Sie sind auf Seite 1von 24

1

$BQUVMPt%FMBMHPSJUNPBMQSPHSBNB *OUSPEVDDJOBMBQSPHSBNBDJO
1.1 Programa, algoritmo, lenguaje
De acuerdo con la naturaleza del funcionamiento de las computadoras, se dice que estas siempre ejecutan rdenes en
un formato que les resulta inteligible; dichas rdenes se agrupan en programas, conocidos como software, el cual, para
su estudio, a su vez, se divide en dos partes: el formato de representacin interno de los programas, que constituye el
lenguaje mquina o cdigo ejecutable, y el formato de presentacin externa, que es un archivo o un conjunto de archi-
vos, que puede o no estar en un formato que puede ser visto/ledo por el usuario (es decir, en un formato que respeta
las reglas).
Para ejecutar lo que el usuario desea hacer en su computadora, o bien para resolver un problema especfico, este pre-
cisa buscar un software que realice o ejecute con exactitud la tarea que se ha planteado o elaborar y desarrollar (escribir)
un programa que la realice. El trabajo de elaboracin de un programa se denomina programacin. Pero la programacin
no es solo el trabajo de escritura del cdigo, sino todo un conjunto de tareas que se deben cumplir, a fin de que el cdigo
que se escribi resulte correcto y robusto, y cumpla con el objetivo o los objetivos para los que fue creado.
Las afirmaciones que se derivan de lo anterior son varias:
s Conocer las herramientas, los formalismos y los mtodos para transformar un problema en un programa escrito en
un lenguaje (que posiblemente no ser el lenguaje mquina), y para que dicho programa pueda ser transformado
en un cdigo ejecutable.
s Saber transformar el problema inicial en un algoritmo y luego en un programa.
La primera afirmacin es genrica y se considera para varias categoras de problemas para resolver. Por su parte, la se-
gunda es especfica de un problema determinado que se tiene que resolver, para lo cual existen diversas metodologas
especficas de resolucin para este tipo de problemas. Para los casos de problemas muy generales, en ocasiones existen
mtodos conocidos que solo se adaptan a un problema en particular. El mtodo es, por lo general, un algoritmo o una
tcnica de programacin.
Contenido
Algoritmo
1.1 Programa, algoritmo, lenguaje  $IAGRAMADEmUJO Un algoritmo constituye una lista bien definida, ordenada y finita de operaciones, que permite encontrar la solucin a un
Algoritmo Sntesis del captulo problema determinado. Dado un estado inicial y una entrada, es a travs de pasos sucesivos y bien definidos que se
Anlisis y comprensin de un problema Bibliografa llega a un estado final, en el que se obtiene una solucin (si hay varias) o la solucin (si es nica).
Programas y paradigmas de programacin y lenguajes Ejercicios y problemas Ejemplo
Transformacin de un programa
Problema: Gestionar la lista de compras que una empresa realiza durante un mes.
1.2 Variables, tipos y expresiones
Variables Solucin
Tipos Para resolver este problema de gestin muy general, se cuenta con las herramientas que se utilizan en otros problemas
Apuntadores que ya tienen una resolucin en la empresa (por ejemplo, un programa en Java con los datos en una base de datos).
Objetivos As, para la solucin del problema planteado, se proponen dos opciones:
Expresiones
Funciones s #OMPRENDERQUELACOMPUTADORAFUNCIONACONPROGRAMASY s Usar la base de datos de trabajo para guardar, tambin en esta, la lista de productos que se requiere comprar.
QUEADEMSESCAPAZDEREALIZARPROGRAMAS
1.3 Pseudocdigo s Guardar una lista en entradas que se actualiza cada vez que se captura o se incluye un nuevo producto que la
Nociones bsicas: variables, tipos y expresiones s #ONOCERYCOMPRENDERLASNOCIONESFUNDAMENTALESDELA empresa necesita, y que se borra o elimina al momento que el producto ya est abastecido, y en salidas, cada vez
Estructura general del pseudocdigo programacin: variable, tipo y funcin. que algn empleado necesite una impresin de dicha lista.
Estructuras componentes del pseudocdigo s %STUDIARLOSPRINCIPALESPARADIGMASDELAPROGRAMACIN
En este ejemplo, el algoritmo global de resolucin se compone de diversos pasos sucesivos de dilogo con el usuario
Uso de los arreglos s 0ROPONERALGORITMOSSIMPLESPARALARESOLUCINDEDIVERSASTAREAS (un empleado de la empresa), para mantener actualizada la lista de productos necesarios; asimismo, en pasos si-
Funciones y procedimientos s % XPRESARALGORITMOSCONDIAGRAMASDEmUJOOCON guientes se precisa hacer una insercin y/o una eliminacin o borrado de los productos (elementos) de la lista o una
pseudocdigo. impresin en una forma legible.
1 2
$BQUVMPt%FMBMHPSJUNPBMQSPHSBNB *OUSPEVDDJOBMBQSPHSBNBDJO
Un algoritmo puede ser expresado en: Las etapas de desarrollo de un algoritmo, con base en la lgica, son las siguientes:
s Lenguaje natural (a veces, este no resulta muy claro, pero es muy til para problemas simples) 1. Definicin. En esta etapa se especifica el propsito del algoritmo y se ofrece una definicin clara del problema
s Pseudocdigo por resolver. Adems, aqu tambin se establece lo que se pretende lograr con su solucin.
s Diagramas de flujo 2. Anlisis. En este punto se analiza el problema y sus caractersticas, y se determinan las entradas y salidas del
problema. De igual modo, tambin se realiza una investigacin sobre si ya se conoce alguna o varias soluciones
s Programas de este. En el caso de que ya se conozcan varias soluciones, entonces se determina cul es la ms conveniente
El uso de algn elemento de la lista anterior para la expresin de un algoritmo, se hace segn el nivel de descripcin de para el problema que estamos tratando. Si no se conoce ninguna, o no nos satisfacen las soluciones existentes,
dicho algoritmo. Es evidente que el lenguaje natural es de mayor utilidad para transmitir las ideas del algoritmo. Al con- se propone una nueva.
trario, un programa es difcil de entender por simple lectura, aun por una persona que conoce el lenguaje del programa, 3. Diseo. Aqu es donde se plasma la solucin del problema. Con ese fin, se emplea una herramienta de diseo,
e imposible para aquellas que no lo conocen. que consiste en el diagrama de flujo y el pseudocdigo.
El pseudocdigo y los diagramas de flujo, en cambio, se sitan en un punto intermedio de comprensin, entre 4. Implementacin. En este ltimo paso es donde se realiza o se ve concretado el programa y, por ende, se hacen
el lenguaje natural y un programa. Estas dos herramientas poseen un poder de expresin equivalente; no obstante, los varias pruebas.
diagramas de flujo tienen la ventaja de ser ms grficos y visuales.
En cada una de las etapas especificadas antes, se utiliza un tipo de descripcin conveniente e inteligible para cada uno
Con base en el ejemplo anterior, se puede afirmar que la parte de solucin expresada en lenguaje natural tiene algu-
de los participantes en el proceso de concepcin y realizacin del algoritmo. Hoy en da, existe una rama de las ciencias de
nas ambigedades para el usuario que no es el programador; por ejemplo, qu significa la expresin de pasos sucesivos
la computacin que se ocupa del manejo de los proyectos de desarrollo de programas: la ingeniera de software.1
de dilogo con el usuario? Aunque, en ocasiones, tambin presenta ambigedades hasta para el propio programador;
por ejemplo, cules son los datos en una base de datos?, una base de datos es relacional o de otro modelo?, cul En el ejemplo citado antes, en el que se plantea el desarrollo de un programa de lista de compras, el enunciado
interfaz?, cmo se manejan las lecturas/escritura en dicha base de datos? constituye la definicin del problema, mientras que la fase de anlisis pone en evidencia las entradas y las salidas, el
modo operativo, el formato de la base de datos y su ubicacin, los dispositivos de acceso a los datos contenidos y algunos
Las respuestas a las interrogantes anteriores se expresan de la siguiente forma:
datos de volumetra.
s La primera ambigedad (pasos sucesivos) se debe expresar lo ms detallada posible por el destinatario del pro- Entre los principales datos del ejemplo, que seran tratados en esta fase, destacan: el tamao mximo posible de la
grama (el usuario). lista de compras y el tamao del catlogo de productos, en donde el usuario deber buscar el producto que se inserta en
la lista de compras. En el diagrama de la figura 1.1 se representa un diagrama de la actividad posible del usuario.
s Los otros cuestionamientos son de detalles tcnicos.
La descripcin de un algoritmo usualmente se realiza en tres niveles: Imprimir la lista
1. Descripcin de alto nivel. El primer paso consiste en la descripcin del problema; luego, se selecciona un
modelo matemtico y se explica el algoritmo de manera verbal, posiblemente con ilustraciones, pero omitiendo Borrar toda la lista
detalles.
Borrar
2. Descripcin formal. En este nivel se usa un pseudocdigo o diagrama de flujo para describir la secuencia de
pasos que conducen a la solucin. Borrar un elemento
3. Implementacin. Por ltimo, en este nivel se muestra el algoritmo expresado en un lenguaje de programacin
especfico, o algn objeto capaz de llevar a cabo instrucciones.
Insertar un elemento
Para llegar a la implementacin, primero se deben tener descripciones de alto nivel o formalmente explcitas, sobre todo
cuando el trabajo de desarrollo de un algoritmo se hace en grupo.
Figura 1.1
Asimismo, en esta fase es fcil distinguir la necesidad de desarrollar una manera de guardar la lista de compras de mane-
ra permanente; idealmente, esta puede generarse en un da. As, al iniciar las labores del da se puede cargar o capturar
Anlisis y comprensin de un problema la lista y durante el transcurso de la jornada laboral se pueden hacer diversas actualizaciones (insercin y borrado). En
esta fase de anlisis, tambin se indica el funcionamiento global del programa.
En el ejemplo que se present acerca de la necesidad de una empresa de gestionar la lista de compras que Para el mismo ejemplo, en la fase de diseo se plantear un diagrama de flujo de la totalidad del programa; adems
efecta durante un mes, se realiz, de forma informal y muy esquemtica, la presentacin de un problema de que aqu tambin se pone en evidencia la solucin que se eligi para guardar los nuevos datos (la lista de compra) y
que ocurre comnmente, y se indic, de forma muy literal, cmo se puede resolver, aunque sin bastantes detalles. No qu formato se utilizar.
obstante, tambin es claro que para la resolucin de este problema debemos saber cmo insertar, borrar u ordenar los
elementos de una lista. As, para cada aspecto del problema se debe buscar un algoritmo que lo resuelva; por ejem- Ejemplo
plo, un algoritmo de insercin, otro para borrar de la lista un elemento y, si la lista no est explcita en la memoria de la
computadora, un algoritmo para ordenar los elementos en una forma deseada. Supngase un nmero entero N del que se requiere probar si es divisible o no entre 3.
Por lo general, un problema se descompone en subproblemas; por tanto, un algoritmo expresa la resolucin de un
problema (elemental o no). 1
Para mayor informacin vase el libro Sommerville, Ian, Ingeniera de software, 6a. ed., Pearson Educacin, Mxico, 2001.
3 4
$BQUVMPt%FMBMHPSJUNPBMQSPHSBNB *OUSPEVDDJOBMBQSPHSBNBDJO
En este caso, la definicin del problema es el enunciado mismo: Probar si un nmero entero N es o no divisible Si un programa est escrito en un lenguaje de programacin comprensible para el ser humano, se le llama cdigo fuente.
entre 3. Este caso se trata de un problema muy simple de aritmtica. A su vez, el cdigo fuente se puede convertir en un archivo ejecutable (cdigo mquina) con la ayuda de un compilador,
aunque tambin puede ser ejecutado de inmediato a travs de un intrprete.
En la etapa de anlisis, identificamos las entradas y las salidas:
A su vez, un paradigma de programacin provee (y determina) la visin y los mtodos de un programador en la
Entrada: Un nmero entero N.
construccin de un programa o subprograma. Existen diferentes paradigmas que derivan en mltiples y variados estilos
Salida: Una respuesta (S o No). de programacin y en diferentes formas de solucin de problemas:
Para la resolucin del problema de este ejemplo, conocemos la definicin de la divisibilidad: un nmero N es divisible s 0ARADIGMAIMPERATIVO
entre otro nmero k, si la divisin N k es exacta (o el resto es 0).
s En este paradigma se impone que cualquier programa es una secuencia de instrucciones o comandos que se
Asimismo, existen mtodos que presentan diferentes grados de dificultad para un ser humano: ejecutan siguiendo un orden de arriba hacia abajo; este nico enlace del programa se interrumpe exclusivamente
para ejecutar otros subprogramas o funciones, despus de lo cual se regresa al punto de interrupcin.
s Realizar la divisin n k y comprobar si es exacta.
s 0ARADIGMAESTRUCTURADO
s Efectuar la suma de las cifras que componen el nmero en base 10 y verificar si el nmero es divisible entre 3.
s Este paradigma es un caso particular de paradigma imperativo, por lo que se imponen nicamente algunas es-
De acuerdo con la naturaleza del ser humano, l puede aplicar con mayor facilidad el segundo mtodo, de- tructuras de cdigo, prohibiendo una continuacin del clculo de manera catica. Por ejemplo, se impone que las
bido a que la divisin de la suma de las cifras y el clculo mismo de la suma son ms simples que la divisin instrucciones sean agrupadas en bloques (procedimientos y funciones) que comunican; por tanto, el cdigo que
inicial; sin embargo, para la computadora es lo mismo realizar la divisin de 78564589 entre 3 o la divi- se repite tiene la forma de un ciclo (loop, en ingls), gobernado por una condicin lgica.
sin de 52 entre 3. En el segundo caso, en cambio, es necesario hacer la extraccin de las cifras y luego la suma de las
s 0ARADIGMADECLARATIVO
cifras; entonces, la resolucin del problema es simple, como lo establecen los siguientes pasos:
s Un programa describe el problema a solucionar y la manera de resolverlo, pero no indica el orden de las acciones
1. Se hace la lectura del nmero N. u operaciones que se deben seguir. En este caso, hay dos paradigmas principales:
2. Se toma el resto de la divisin de N entre 3 (la operacin mdulo N %3). 0ARADIGMAFUNCIONAL Conforme a este, todo se describe como una funcin.
3. Segn el valor del resto, se escribe: S o No. 0ARADIGMALGICO De acuerdo con este, todo se describe como un predicado lgico.
En la etapa de fin de anlisis, los pasos a seguir resultan muy claros; en tanto, en el paso de diseo se formalizan an Un problema a resolver se expresa como una llamada de una funcin o un predicado lgico, y su resolucin depende de
ms y lo describen sin ninguna ambigedad. Durante la implentacin (la ltima etapa), es preciso saber cmo introducir la descripcin introducida en las funciones o los predicados.
los valores de entrada en la computadora y cmo hacer el programa.
s 0ARADIGMAORIENTADOAOBJETOS
En el siguiente apartado se estudia cules son dichos valores de entrada, qu es un lenguaje de programacin, qu
significa programa y cmo se transforma un programa en cdigo mquina. s Existen tres principios fundamentales que gobiernan este tipo de programacin:
%NCAPSULACIN En este principio se encapsulan datos, estados, operaciones y, en ocasiones, tambin eventos,
en objetos. El cdigo sera ejecutado, entonces, segn la ocurrencia de eventos o de creacin/destruccin de
Programas y paradigmas de programacin y lenguajes instancia de objetos.
0ROTOTIPOS CLASESYHERENCIAS El prototipo y la clase son las abstracciones del objeto; otros prototipos se
Un programa informtico se define como un conjunto de instrucciones que, una vez ejecutado, realiza una o varias definen de acuerdo con un prototipo existente.
tareas en una computadora. De esta forma, sin programas, una computadora no puede realizar las actividades para las
4IPIlCACINYPOLIMORlSMO Constituyen la comprobacin del tipo con respecto a la jerarqua de las clases.
que fue diseada y creada.
s 0ARADIGMADEPROGRAMACINPOREVENTOS
El conjunto general de programas que posee una computadora se denomina software, trmino que se utiliza para
definir al equipamiento o soporte lgico de una computadora. s Un programa se concibe como una iteracin infinita con dos objetivos: detectar los eventos y establecer el clculo
capaz de tratar el evento.
Un programa se escribe con instrucciones en un lenguaje de programacin, el cual, a su vez, est definido por su
sintaxis, que establece e indica las reglas de escritura (la gramtica), y por la semntica de los tipos de datos, instrucciones, s 0ARADIGMASPARALELO DISTRIBUIDOYCONCURRENTE
definiciones, y todos los otros elementos que constituyen un programa.
Un programa no se realiza con una sola unidad de cmputo, sino que emplea varias unidades de clculo (reales en caso
Un lenguaje de programacin es un caso particular del lenguaje informtico; este ltimo permite hacer programas, paralelo y distribuido), las cuales pueden ser procesadores o computadoras y/o unidades centrales del mismo procesa-
pero tambin describir datos, configuraciones fsicas y protocolos de comunicacin entre equipos y programas. dor. En el caso de este paradigma, el programa se corta en subprogramas o rutinas que se ejecutan de manera indepen-
diente sobre otras unidades de cmputo, ya sea de modo sncrono o asncrono, compartiendo o no la misma memoria.
C, C++, Pascal, ADA, FORTRAN, LISP, SCHEME, Un lenguaje de programacin puede verificar uno o ms paradigmas. Por ejemplo, el lenguaje Java comprueba el paradig-
PROLOG, SQL, Xquery, Java, entre otros ma orientado a objetos y el cdigo que compone la parte de mtodos de los objetos verifica el paradigma estructurado.
Lenguaje de programacin Por su parte, el lenguaje de programacin de pginas de Internet, JavaScript, funciona/trabaja conjuntamente con las p-
ginas y el servidor del sitio; por tanto, es un lenguaje, inspirado por Java, que comprueba el paradigma de programacin
HTML, XML, RDF, Latex, orientado a objetos, al tiempo que tambin funciona segn el paradigma de la programacin por eventos.
Lenguaje informtico SVG, entre otros
Algunos ejemplos de lenguajes de programacin imperativos son: lenguaje mquina, lenguaje ensamblador, C, For-
tran, Cobol, Pascal, Ada, C++, C#, Java. A excepcin del lenguaje mquina y el lenguaje ensamblador, los otros constituyen
Figura 1.2 Tipos de lenguajes. lenguajes estructurados.
5 6
$BQUVMPt%FMBMHPSJUNPBMQSPHSBNB *OUSPEVDDJOBMBQSPHSBNBDJO
Entre los lenguajes declarativos ms conocidos son: LISP (Scheme), Prolog, SQL, Smalltalk, Datalog. Asimismo, el Java
lenguaje Java tambin puede ser considerado como un lenguaje declarativo. Script
Como lenguajes orientados a objetos existen: Simula, C++, Java, C#(.Net), Python. FORTRAN COBOL APL 1968 PROLOG SQL Eiffel HTTP Ruby PHP XML
1954 1959 1962 logo 1972 1978 1985 1991 1993 1995 1997
Histricamente, las primeras computadoras se programaban manualmente (de forma fsica), cambiando los disposi-
tivos fsicos del equipo de cmputo; por ejemplo, la mquina analtica de Charles Babbage, programada por Ada Byron,
o la computadora ENIAC. 1950 1958 1964 1969 1973 1983 Ada 1987 1991 1994 2000 2001
Lenguaje LISP BASIC SGPIL C C++ PERL Python Common C# Kylix
Al principio, en los albores de la computacin, se introdujo el lenguaje ensamblador, que codifica, con cdigos li- ensamblador ALGOL PL/I Objective C Java Lisp
terales, las operaciones del procesador, los registros y las direcciones de memoria. En la actualidad, algunas mquinas
virtuales an se pueden programar en un lenguaje ensamblador adaptado. Otro dominio actual, por el cual se utiliza el Figura 1.3 Lnea de tiempo de los lenguajes de programacin.
lenguaje ensamblador, es el desarrollo de interfaces especficas con dispositivos de entrada/salida de los datos. La prin-
cipal ventaja del lenguaje ensamblador es un cdigo eficaz, muy cercano al lenguaje mquina. En tanto, las principales
desventajas o defectos que presenta el lenguaje ensamblador son, en principio, su verbosidad, esto es, para escribir Esta proliferacin y riqueza de lenguajes de programacin tiene su origen en:
clculos, que parecen simples, se escriben pginas y pginas en el lenguaje ensamblador, y la dificultad de corregir los
errores que pueden parecer errores de concepcin del programa o errores de compilacin. s El importante desarrollo de software, el cual, cada dos aos, ofreci un poder de clculo multiplicado y de almace-
namiento de datos por n, por el mismo precio.
Un gran avance en materia de programacin fue la aparicin de los lenguajes de programacin de alto nivel, por
medio de los cuales se simplific la escritura de cdigo. s La diversificacin de los campos de aplicacin. En un principio, la mayor necesidad de los lenguajes de progra-
macin era tratar grandes volmenes de datos e importantes clculos numricos; sin embargo, las necesidades
En el siguiente esquema se observa un fragmento de un programa escrito en lenguaje C, una parte del cdigo en
lenguaje ensamblador y una imagen de la memoria que contiene el cdigo mquina. cambiaron, por lo que despus aparecieron aplicaciones de inteligencia artificial, de manejo de bases de datos, de
tratamiento y de generacin de imgenes.
int main() LFB2: 0x100000f20 <main+4>: 0x0afc45c7 0xc7000000 0x0023f845 0x458b0000 s La teora de la computacin en un amplio sentido. Por ejemplo, los dos casos siguientes:
{ pushq %rbp
La teora de Codd, de lgebras relacionales (creada en la dcada de 1970), que permiti el desarrollo del len-
int a=10; LCFI0: 0x100000f30 <main+20>: 0xfc4503f8 0xb8f44589 0x00000001 0x25ffc3c9 guaje SQL para el manejo de las bases de datos relacionales.
int b, c; movq %rsp, %rbp 0x100000f40 <dyld_stub_exit+2>: 0x000000f4 0xe51d8d4c 0x41000000 El trabajo de MacCarthy (1956) sobre las funciones recursivas, que permitieron el desarrollo del lenguaje LISP.
0xd525ff53 s Las nuevas metodologas de ingeniera de software. Aqu, lo ms importante es el uso extendido del paradigma
b = 35; LCFI1:
orientado a objetos.
c = a + b; movl $10, -4(%rbp) 0x100000f50 <stub helpers+12>: 0x90000000 0x00000068 0xffe6e900
0x0000ffff s La implementacin. El uso prctico de un lenguaje permite distinguir las limitaciones de uso e impulsa las nuevas
return 1; movl $35, -8(%rbp) proposiciones para su mejoramiento.
0x100000f60: 0x00000001 0x0000001c 0x00000001 0x00000020
} movl -8(%rbp), %eax Hoy en da, an se trabaja en el desarrollo de lenguajes de programacin, pero desde dos perspectivas bsicas: proponer
0x100000f70: 0x00000000 0x00000020 0x00000002 0x00000000 nuevas soluciones a los problemas actuales4 y mejorar algunos de los lenguajes actuales, proponiendo nuevos estndares.
addl -4(%rbp), %eax
0x100000f80: 0x00000000 0x00000038 0x00000038 0x00001001 En la actualidad, el uso de un lenguaje de programacin est condicionado por:
movl %eax, -12(%rbp)
0x100000f90: 0x00000000 0x00000038 0x00000003 0x0003000c s El conocimiento del lenguaje en cuestin; es decir, su sintaxis y la semntica de los conceptos y las instrucciones
movl $1, %eax
que lo componen.
leave s El tipo de problema a resolver. Por ejemplo, para consultar datos que se guardan en un formato especfico en
ret una base de datos o en una base de conocimiento se utilizan, comnmente, los lenguajes de tipo declarativo,
donde se caracterizan los datos que se esperan en salida, como SQL para la base de datos relacional, PROLOG
para la base de conocimiento, XQuery y XSLT para colecciones de datos en el formato XML. En otro ejem-
En la corta historia de la computacin (corta en comparacin con otras ciencias y reas del conocimiento humano), han
plo, para dar las rdenes de instalacin de software, es conveniente escribir programas en el shell del sistema
sido propuestos varios lenguajes, pero solo algunos cuantos han sido utilizados en realidad.2
operativo.
s El derecho y la posibilidad material de utilizar un compilador o intrprete de dicho lenguaje, ya que estos tipos de
En la figura 1.3 se observa una lista de lenguajes de programacin, ordenados cronolgicamente (en azul se desta-
software (compilador, taller de desarrollo, intrprete) suelen tener un costo monetario o licencias restrictivas.
can los lenguajes de descripcin de datos ms importantes y el protocolo fundamental de Internet):3
s La configuracin fsica que est disponible. Por ejemplo, si est disponible una arquitectura multiprocesador, sera
ms conveniente utilizar un lenguaje de tipo C o FORTRAN, por medio de los cuales se abstendra de realizarse el
2
Algunos lenguajes, como ALGOL, para la programacin, o SGML, para la descripcin de los datos, fueron propuestos; sin
embargo, tcnicamente, nunca se desarrollaron el compilador ni las herramientas necesarias para trabajar con la versin completa. clculo paralelo, o emplear herramientas de paralelizacin automtica. En el caso de que el programa tuviera que
Estos lenguajes se consideran importantes por su incursin en la historia de la computacin y porque constituyen el origen de
otros lenguajes de programacin (como PASCAL) o HTML y XML.
3
Consultar la pgina http://oreilly.com/news/graphics/prog_lang_poster.pdf, para observar un esquema que aborda la historia de los 4
Por ejemplo, un grupo de trabajo de W3C an trabaja en el desarrollo de un lenguaje de manejo y actualizacin de colecciones de
lenguajes, sus versiones y su filiacin. archivos XML.
7 8
$BQUVMPt%FMBMHPSJUNPBMQSPHSBNB *OUSPEVDDJOBMBQSPHSBNBDJO
explorar y comunicar con una interfaz de un equipo raro, como una mquina de produccin o un dispositivo de Para la mayora de los lenguajes, hay herramientas completas que permiten, en ambientes amigables, la edicin y la
medicin, es preferible escribirlo en un cdigo del lenguaje ensamblador. realizacin de todos los pasos hasta la construccin del ejecutable de una manera implcita.
s La configuracin del software que est disponible o que se impone por la construccin del programa y el uso ulte- Es muy probable que un programa que se compila y se ejecuta por primera vez tenga errores de compilacin. Tam-
rior del producto finito. Por ejemplo, para aprender la programacin es mejor iniciar con un lenguaje de alto nivel bin es probable que, despus de un tiempo de ejecucin, el programa tenga errores lgicos de ejecucin; en este caso,
del paradigma imperativo de tipo C o PASCAL. En el caso de que el destinatario del programa utilizara el sistema se regresa a la edicin del cdigo fuente inicial, con el fin de corregir los errores, y luego se desarrollan las otras etapas,
operativo de plataforma mvil con sistema MAC OS, las herramientas para desarrollar aplicaciones imponen usar el hasta la construccin del ejecutable (vase figura 1.5).
framework COCOA o XCode y el lenguaje de programacin Objective C.
Tambin es posible que al interior de un programa sean introducidas algunas otras funciones de diferente naturaleza, Editor
las cuales son escritas en otros lenguajes de programacin o en fragmentos de cdigos de otro lenguaje (por lo gene-
ral, en un lenguaje declarativo de interrogacin de base de datos). En un proyecto de desarrollo de programa, se elige
al menos un lenguaje de programacin, pero resulta tcnicamente posible elegir otro u otros lenguajes. Cdigo fuente
Compilador (y ms)
Si hay
Transformacin de un programa errores
Cdigo ejecutable
Un programa de usuario recorre el siguiente camino hasta su ejecucin:
s %DICIN
s Con un editor de texto se escribe el programa en el lenguaje elegido.
Ejecucin
s #OMPILACIN
s En lenguaje de alto nivel, el cdigo fuente se transforma en instrucciones para la mquina (cdigo objeto o cdigo Figura 1.5
ejecutable).
s %NLAZADO A lo largo de este captulo se presentan el pseudocdigo y los diagramas de flujo como herramientas para el diseo de
los algoritmos. Por su parte, el lenguaje C, se aborda con amplitud ms adelante en otros captulos, ya que se trata de un
s Un ejecutable se construye con cdigos objeto (uno o ms) y libreras de funciones, entre otros. lenguaje imperativo y estructurado, considerado un lenguaje de alto nivel.
El resultado de este proceso es un cdigo ejecutable directo para la mquina.
Pero tambin existe el modo interpretacin de ejecucin, en el cual cada frase, instruccin, orden o consulta, escritos
en cdigo fuente, se transforma, poco a poco, en rdenes, ya sea directamente por el procesador, por otro software o por 1.2 Variables, tipos y expresiones
la mquina abstracta. Este es el caso del intrprete del lenguaje PROLOG, del Shell y del motor de resolucin de consultas
(SQL, por las bases de datos). En el mismo caso tambin se encuentra el lenguaje Java en modo interpretado, en donde
el cdigo transformado (clases o archivos) es interpretado por la Mquina Virtual Java.
El objetivo general de un programa es transformar datos en resultados tiles para el usuario. Los datos estn almacenados
Editor en la memoria principal o en la memoria secundaria, ya sea de manera temporal (durante toda la ejecucin del programa
o durante una parte del tiempo de ejecucin) o de manera permanente. En la mayora de los lenguajes de programacin,
los datos son de diferentes tipos, aparecen en expresiones o en las llamadas de funciones y se manejan a travs del uso
Cdigo fuente de variables.
Editor
Compilador (y ms)
Cdigo fuente Variables
Cdigo ejecutable El formato de representacin y de estructuracin de los datos depende del paradigma del lenguaje de programacin y de
Ejecucin
la opcin que el programador ha elegido para representar los datos. En el paradigma imperativo y en el caso de algunos
otros paradigmas (por ejemplo, lenguaje PROLOG) existe una nocin bsica comn para el manejo de los datos: la no-
Ejecucin cin de variable. La ventaja de las variables es que almacenan datos de entrada, de salida o intermedios. No obstante,
existen lenguajes de tipo SQL o XPath que no implementan la nocin de variable.
Figura 1.4 Por lo general, en cada programa aparece al menos una variable, lo que significa que en cada programa hay una
zona de memoria con un tamao fijo que contiene un valor de tipo preciso; por ejemplo, un entero representado en
En gran parte de los casos, el compilador o el intrprete realiza algunas transformaciones a los programas (optimizacin forma binaria de Ca25 sobre 4 bytes, o una cadena de caracteres de un tamao mximo de 255.
de cdigo, detecciones de fin de programa, paralelizacin de cdigo, etc.), para obtener un cdigo mquina ms rpido
o ms adaptado a la mquina a la cual est destinado. 5
Vase el apndice 1 en el CD-ROM.
9 10
$BQUVMPt%FMBMHPSJUNPBMQSPHSBNB *OUSPEVDDJOBMBQSPHSBNBDJO
Cada variable debe tener: en los cuales si una variable se usa sin definicin, se considera que es una variable simple de un tipo indicado por su
nombre (por ejemplo, el lenguaje FORTRAN). La sintaxis de las declaraciones de variables es diferente de un lenguaje a
s Un tamao de memoria ocupada y un modo de representacin interna. Por ejemplo, un punto flotante simple otro; sin embargo, un elemento comn es que en todos los casos se indican el tipo de la variable y su nombre.
precisin sobre 4 bytes o cadenas de caracteres de 100 + 1 caracteres.
s Un conjunto de operadores y de tratamientos especficos que pueden aplicarse a la variable. Si las variables son, por Ejemplos
ejemplo, de tipo lgico, se aplican operadores lgicos; pero, si las variables son numricas, se aplican operadores
de clculo numrico (suma, producto, entre otros). integer A, I; significa dos variables de nombre A e I y de tipo entero.
El nombre de una variable debe ser nico y no ambiguo. La unicidad del nombre de la variable durante su ciclo de vida, double Rayo; significa una variable de nombre Rayo y de tipo punto flotante doble precisin.
asegura una semntica correcta de las operaciones (expresiones, rdenes o proposiciones) que implican a la variable. De
esta forma, el nombre de una variable es un identificador diferente de cualquier palabra clave utilizada en el lenguaje La nocin de variable es generalmente la misma para la mayora de los lenguajes de programacin de tipo imperativo;
o nombre de una funcin externa. Generalmente, los nombres de las variables inician con una letra y son sucesiones no obstante, de un lenguaje a otro, o de una computadora a otra, la implementacin puede ser diferente. Por ejemplo,
de letras y cifras y el smbolo _ (guin bajo). Para la cualidad del programa, es preferible que el nombre de una variable segn la computadora, un tipo entero se implementa con un tipo de representacin binaria y sobre 2, 4 u 8 bytes. As,
sea sugestivo al tratamiento y de un largo de tamao aceptable, ya que un nombre de variable muy largo puede generar en el lenguaje M, del software MATLAB, todas las variables tienen el tipo de doble precisin (64 bits).
errores de tecleo al momento de la edicin del programa, lo que produce prdidas de tiempo para su correccin. En la Una variable simple tiene un nombre nico y posee un solo valor de tipo elemental; dicho tipo est declarado ex-
determinacin del nombre de la variable, tambin se sugiere utilizar nicamente letras sin acento, para una mejor porta- plcita o implcitamente. En el ejemplo anterior, las tres variables son simples. A una variable le corresponde una zona de
bilidad del cdigo o porque la sintaxis del lenguaje no lo permite. memoria que contiene el valor, donde escribiendo el nombre de la variable se accede a su valor.
Algunos ejemplos de nombres de variables son los siguientes: a, a1, area, suma. Tambin lo son: a1b159 y
a2b158; sin embargo, la lectura de un programa con nombres de este tipo sera difcil. Por lo que respecta a la extensin Ejemplo
del nombre, una variable llamada nueva_suma_valores_quantidades, tomara mucho ms tiempo escribirla.
Si despus de las declaraciones precedentes se escribe A+I, esto representa una expresin aritmtica que usa los valo-
Se considera que variables de nombre i, j, k, indican variables enteras usadas para ndices; en tanto, las variables de res de las variables A e I.
nombre a, b y c, por lo general se utilizan para valores numricos reales (punto flotante); las variables llamadas p y q se
emplean para apuntadores; las variables llamadas n y m son variables que contienen valores de tamaos de arreglos. Un arreglo es una variable que tiene un nombre y posee un cierto nmero de valores del mismo tipo (simple o com-
puesto), los cuales se encuentran almacenados, uno despus del otro, en una zona de memoria contigua. El tipo de cada
No es obligatorio que la variable tenga un valor al saberse que la zona de memoria dedicada a la variable sea ocu-
valor del arreglo tambin es implcito o explcito. En la declaracin de un arreglo, ms que el tipo de los elementos del
pada. En algunos momentos, es posible que la variable no tenga ningn valor; en estos casos, se dice que la variable es
arreglo y el nombre de este, se indica la dimensin.
no-inicializada (por ejemplo, lenguaje PASCAL) o libre (por ejemplo, lenguaje PROLOG). Si la variable posee un valor en
un instante T del programa, dicho valor solo es nico para ese instante T. A lo largo de la vida de la variable, el valor que
tenga esta puede cambiar; la nica condicin es que los valores guardados sean del mismo tipo de la variable. El cambio Ejemplo
de valor de la variable se hace alrededor de una operacin explcita de asignacin o por efecto secundario,6 como el
integer YX[10]; significa un arreglo que contiene 10 valores enteros.
clculo de una funcin o el tratamiento de un recurso externo de tipo archivo.
Segn los lenguajes de programacin, se puede trabajar o no con todo el arreglo en un solo comando o expresin, o (el
Las variables son de varios tipos; en la mayora de los lenguajes de programacin imperativa predominan los siguien-
caso ms comn) trabajar con un solo valor del arreglo a la vez.
tes tipos:
s Variables simples. Son propias de los tipos bsicos, para los datos enteros, flotantes, caracteres y lgicos (pero no Ejemplo
en el lenguaje C).
Si se trabaja con el lenguaje M, sum(YX) significa la suma de todos los valores y 5*YX significa un arreglo temporario
s Variables compuestas. La definicin del tipo de una variable compuesta depende de la sintaxis del lenguaje de que contiene los valores del arreglo YX multiplicados por 5. En el lenguaje C, estas expresiones no significan nada, a
programacin y de su poder semntico. menos que el usuario defina una funcin especial sum(...) capaz de tratar arreglos de tipo entero.
s Arreglos de variables de tipo simple o tipo compuesto. Los arreglos sirven para almacenar una sucesin de
Un valor que compone el arreglo se llama elemento. Un elemento se identifica con el nombre del arreglo y con su posi-
valores del tipo indicado.
cin al interior del arreglo, llamada ndice.
En la mayora de los lenguajes en los que cada variable tiene una declaracin, se indica el nombre y el tipo. En
ocasiones, tambin se indica si la variable es esttica o dinmica o si el acceso al contenido de la variable es p- Ejemplo
blico o privado (por lo general, en lenguajes orientados a objetos). Si la semntica del lenguaje impone la declara-
cin de cualquier variable que se usa, la ausencia de dicha declaracin genera un error de compilacin. Del mis- Por la declaracin precedente, YX[1] es el elemento de ndice 1 del arreglo YX; este valor se puede utilizar en cualquier
mo modo, si existen variables que estn declaradas, pero que no se utilizan, la mayora de los compiladores envan expresin aritmtica o instruccin.
mensajes explcitos de advertencia, que no son errores, pero s informaciones realizadas por el programador. Tam- Si tomamos en cuenta la definicin de una variable entera I, entonces YX[I] es el elemento con el ndice del valor
bin existen casos de lenguajes en los que ninguna variable se declara; en estos lenguajes, a cada aparicin de la de la variable I del arreglo YX.
variable se considera que dicha variable tiene un tipo por defecto. Este es el caso del lenguaje PROLOG, en el cual
nicamente una variable sirve para la evaluacin de expresiones lgicas o del lenguaje M. Tambin hay lenguajes Segn los lenguajes de programacin, los ndices de un arreglo empiezan en 1 (lenguaje M o FORTRAN o PASCAL), o en
0 (lenguaje C o Java).
La discusin sobre las variables compuestas y los apuntadores est muy extendida y es muy dependiente del len-
6
Efecto secundario (side effect en ingls). guaje de programacin. En el caso del lenguaje C, que es el que se va a presentar en este texto, se trata con detalle en
11 12
$BQUVMPt%FMBMHPSJUNPBMQSPHSBNB *OUSPEVDDJOBMBQSPHSBNBDJO
los captulos 2 y 3. En tanto, en el siguiente apartado se estudian los diferentes tipos de variables; normalmente, para En la mayora de los casos y de los lenguajes de programacin (excepto en algunos lenguajes del paradigma de-
cualquier tipo conocido por el programa se puede definir una variable. clarativo), la escritura (cambio) de un contenido se hace con un operador de asignacin de valor. Dicho operador de
asignacin tiene una aridad de dos y generalmente se expresa con la sintaxis siguiente:
El ciclo de vida de una variable inicia en el momento de la ASIGNACINDELAZONADEMEMORIA, conforme a su
definicin. La asignacin es realizada por el compilador, si la variable es global (es decir, si el lenguaje es compilado), o
variable operador_asignacion expresin
por el intrprete, durante la ejecucin del programa, si la variable es local o dinmica. El tamao de la zona de memoria
asignada es, por lo general, el tamao del tipo por las variables simples o el producto del tamao del tipo del nombre
El operador de asignacin cambia segn el lenguaje de programacin del que se trate; as, es = para los lenguajes C,
de los elementos (es decir, la dimensin) del arreglo. En el caso de algunos lenguajes de programacin que manejan C++ o Java, e: = para los lenguajes PASCAL o SET y algunos lenguajes declarativos (por ejemplo, LISP, SCHEME, XSLT).
colecciones de datos, el tamao de memoria asignado es variable. Sin embargo, la reserva de memoria puede ser fija o
variable, segn el lenguaje de programacin, el tipo de clculo que se hace o el ambiente de ejecucin. En el operador de asignacin, la parte izquierda (el primer operando) constituye la variable y la parte derecha es una
expresin del mismo tipo o un tipo compatible por el cual el valor sera convertido al tipo de la variable, si la conversin es
Si la variable es local o aparece en una parte de cdigo que termina o si el programador lo indica (con una funcin posible. Sin embargo, el funcionamiento es siempre el mismo: primero se evala la expresin y luego se hace la escritura
free(X) en el lenguaje C, por ejemplo), se hace la liberacin de la zona de memoria ocupada por la variable. del valor obtenido en la zona de memoria asignada por la variable.
Una variable es local si su contenido es accesible nicamente en una parte del programa (por ejemplo, un bloque La expresin que aparece en una asignacin debe ser correcta sintctica y semnticamente (escritura correcta y uso
en el lenguaje C, la resolucin de un predicado en PROLOG o el cuerpo de una funcin que se ejecuta en la mayora de correcto del tipo). Pero, esta verificacin de correccin no es una garanta de que la expresin est correcta al momento
los lenguajes). En sentido opuesto, tambin hay variables globales; as, una variable global es visible desde cualquier de la ejecucin de la asignacin.
lugar del programa.
Los errores de evaluacin pueden aparecer como la divisin con cero, un valor de ndice que est fuera del rango
permitido o una operacin aritmtica que se hace con desbordamiento aritmtico. Segn el lenguaje del que se trate, si
Ejemplo el clculo de la expresin se hace con errores o excepciones, es posible integrar un cdigo general de tratamiento de la
excepcin o un cdigo particular (lenguajes ADA, Java o Smalltalk). Tambin es posible que el compilador que introduce
#include<stdlib.h> verificaciones de correccin, paso a paso, durante la evaluacin de la expresin de la parte derecha, seale explcitamen-
#include<stdio.h> te la causa del error, como en el lenguaje Java. Pero estos lenguajes tambin son considerados lenguajes sin ninguna
int a; verificacin de este tipo y los errores de clculo de la expresin pueden ser fatales, como la divisin con 0, o el clculo
void funcion_impresion(int x) contina con un valor incorrecto. En el lenguaje C, si el error es fatal, la asignacin se interrumpe y el programa tambin.
{
int b;
b = sizeof(int); Tipos
printf(Se necesita %d bytes para guardar el valor %d.\n, b, x);
printf(Se necesita %d bytes para guardar el valor %d.\n, (int)sizeof(x+a),
x+a); Un tipo informtico es el atributo de cualquier dato (constante, variable o dato almacenado en la memoria interna o en
} la memoria externa) guardado por el programa de manera implcita o explcita. Por lo general, el tipo indica la forma fsica
del contenido del dato. As, un tipo induce naturalmente una representacin interna de los datos; entonces, el tamao
int main() tambin induce en la semntica del lenguaje un conjunto de operadores que se aplican a los valores pertenecientes a
{ este tipo.
int b; Los tipos son caractersticas de los lenguajes de programacin y se clasifican en:
b = 15;
a = 25; s Tipos predefinidos.
funcion_impresion(b); s Tipos definidos por el usuario.
}
Un tipo predefinido es un tipo propuesto por el lenguaje con una semntica explcita y un conjunto preciso de operado-
res. Por su parte, un tipo predefinido puede ser:
Este programa en C tiene una variable global que es visible desde las dos funciones: main y funcion_impresion. Tam-
bin, hay dos variables locales con el mismo nombre, b, en cada una de las dos funciones; cada una de estas variables s Un tipo bsico, el cual traduce tipos de representacin interna de los datos en lenguaje de programacin, como
tiene un contenido diferente. enteros, reales (con representacin en punto flotante), lgicos, carcter (cdigo ascii, Unicode, entre otros) y cade-
na de caracteres (menos frecuente).
Las variables locales pueden clasificarse en estticas o dinmicas, pero esta clasificacin nicamente aplica en algunos
lenguajes de programacin, por lo que su semntica es diferente de un lenguaje a otro, para indicar el modo de asigna- s Un tipo complejo, el cual traduce un tipo abstracto de datos7 o un tipo de datos que responde a una necesidad
cin de memoria. La nocin se usa en el caso de funciones recursivas, por las cuales las variables estticas son nicas en el paradigma de programacin; por ejemplo, el tipo enumerado, el semforo (en programacin concurrente),
para todas las llamadas de una misma funcin. Una variable esttica tiene su espacio de memoria asignado fuera de las el mensaje en la programacin distribuida asncrona, etctera.
variables dinmicas en lenguajes como C, C++ o VisualBasic. En el ejemplo anterior todas las variables son dinmicas.
Toda vez que una variable tiene su espacio de memoria asignado, su contenido puede ser consultado en lectura o
en lectura escritura. 7
Un tipo abstracto es un tipo de datos concebido de manera terica explicitando la semntica del tipo: cmo funciona y cules son
las operaciones con este tipo. Por ejemplo, podemos definir un tipo abstracto para modelar la nocin matemtica de conjunto. El
La lectura del contenido de una variable se hace a cada aparicin del nombre de la variable, pero si la variable no tipo abstracto conjunto tiene definidos los operadores entre conjuntos (reunin, interseccin y diferencia) y el operador de
contiene nada (es decir, no fue inicializada), su lectura produce un error. pertenecia. Un tipo abstracto se implementa despus en su lenguaje de programacin.
13 14
$BQUVMPt%FMBMHPSJUNPBMQSPHSBNB *OUSPEVDDJOBMBQSPHSBNBDJO
Ejemplo else
p = &b;
En el lenguaje C, los tipos bsicos predefinidos son enteros o reales: char, short, int, long, float, double. printf( El contenido inicial de mi variable preferida : %d\n, *p);
a = a + 67;
Un carcter se asimila como un entero representado en 1 byte, y los valores lgicos se consideran por interpre-
printf( El contenido final de mi variable preferida : %d\n, *p);
tacin de los valores que adquiere; es decir, cualquier valor diferente de 0 es verdad, ya que el valor 0 es falso. Las
*p = 100;
cadenas de caracteres se conciben como arreglos de caracteres con un carcter especial al final. Los tipos complejos
printf(El valor de a est ahora : %d.\n, a);
parecen definidos en las libreras estndares: FILE*, para trabajar con archivos; clock y time, para trabajar con el
}
tiempo del sistema o absoluto; socket para trabajar con los sockets, etctera.
Muchos lenguajes permiten al programador la definicin de sus propios tipos, los cuales son ms cercanos al pro- PROGRAM codigo_apuntador_ejemplo;
blema que se pretende resolver. El tipo compuesto es un conjunto ordenado de variables con tipos conocidos (struct VAR
en C, record en PASCAL o PL/SQL). a,b : integer;
p : ^integer;
En el paradigma de la programacin orientada a objetos, tambin hay nociones de tipo jerrquico y de tipo opaco BEGIN
con respecto a la visibilidad o la herencia. a := 12;
b := 5;
La comprobacin de tipificacin constituye la operacin de verificacin de compatibilidad de los tipos al interior de if a > b then p := @a
una expresin. La tipificacin puede ser de dos tipos: else p := @b;
writeln(El contenido inicial de mi variable preferida :,p^);
s Esttica. Hecha al momento de la compilacin. a := a + 67;
s Dinmica. Hecha al momento de la ejecucin del programa. writeln(El contenido final de mi variable preferida :,p^);
p^ = 100;
Esta fase de comprobacin de los tipos es necesaria para garantizar la correccin del cdigo y evitar los errores de des- writeln(El valor de a est ahora ::,a);;
bordamiento. Cuando se hace una operacin entre tipos diferentes, antes es posible hacer una conversin de un tipo a END.
otro (por lo general, el ms dbil se convierte en el ms fuerte), y luego se realiza la operacin. La compatibilidad de los
tipos est indicada en la parte de la semntica del lenguaje. La tipificacin es fuerte cuando solo son aceptadas las trans-
formaciones para el tipo ms fuerte (por ejemplo, el lenguaje PASCAL); en caso contrario, la tipificacin se considera dbil. Memoria
Direccin A Contenido A
Apuntadores
Ensamblador:
Un puntero o apuntador es una variable capaz de referenciar una variable del programa o una direccin de memoria. Este Ensamblador: mover Direccion A, registro2
se define como una variable, pero nada ms se indica que el tipo es una referencia (a veces una ubicacin) de un tipo code_Op direccion A code_Op *registro2
conocido (estndar o definido por el programador) o de cualquier otro tipo. Este modo de acceso a un contenido, pasando
primero por su direccin (ubicacin de memoria), permite realizar tratamientos por los cuales los operandos no son cono-
0
cidos completamente al momento de la ejecucin del programa.
1
No todos los lenguajes implementan esta nocin; por ejemplo, M (del MATLAB), R o FORTRAN. La semntica y el uso
de apuntadores son muy diferentes de un lenguaje a otro.
Direccin A
Los lenguajes ensambladores implementan esta nocin de manera natural, con el modo de direccionamiento indi-
recto por medio de un registro. registro 2
Contenido A
Ejemplo 2
Registro operacin
A continuacin se presenta un ejemplo de uso de apuntadores en C y en PASCAL, por el cual el contenido de una va-
riable es accesible y se modifica usando un apuntador sin hacer referencia al nombre de la variable: Contenido A
#include<stdlib.h> Registro operacin
#include<stdio.h>
int main() Acceder al contenido de la variable A por una operacin Op usando el acceso
{ directo y el acceso indirecto
int a = 12, b = 5;
int *p;
if (a > b) p = &a; Figura 1.6
15 16
$BQUVMPt%FMBMHPSJUNPBMQSPHSBNB *OUSPEVDDJOBMBQSPHSBNBDJO
Expresiones s Suma (adicin) +
s Diferencia (sustraccin o resta) -
En programacin, una expresin es la traduccin en lenguaje informtico de un clculo aritmtico, lgico o de otra natu- s Producto (multiplicacin) *
raleza. La nocin de la expresin fue inspirada de la nocin de expresin matemtica, por lo que su semntica es similar:
la evaluacin de una expresin se hace tomando en cuenta los valores que intervienen y aplicando los operadores. En las s Divisin /
expresiones, los operadores tienen un orden de evaluacin y prioridades. Una expresin contiene, entonces: En algunos lenguajes hay un operador por el resto de la divisin entera (el mdulo), % (en el lenguaje C), o un operador
para la potencia, ^ (en el lenguaje BASIC).
s Valores constantes
Por tipos que no son numricos y segn el lenguaje, tambin hay operadores; por ejemplo, por las cadenas de ca-
s Variables racteres (si el lenguaje se considera cadena de caracteres como un tipo bsico) hay un operador de concatenacin (unir)
s Operadores para dos cadenas: + en el lenguaje C++ o | en el lenguaje SQL.
s Parntesis Segn la semntica de cada lenguaje de programacin, los operadores que corresponden a operaciones aritmticas
/ lgicas o de transformacin se aplican a operandos:
La escritura de una expresin en un cdigo implica la evaluacin de esta al momento de la ejecucin del cdigo. La eva- s de tipos similares o compatibles, obteniendo un resultado del mismo tipo (por ejemplo, las operaciones aritm-
luacin se hace tomando en cuenta la prioridad de los operadores. ticas se hacen entre elementos de tipo numrico) o de otro tipo (por ejemplo, el tipo lgico).
Los operadores estn definidos por la sintaxis del lenguaje, al tiempo que la parte de semntica indica el tipo de s de tipos diferentes; por ejemplo, en el lenguaje C, la adicin y la sustraccin de un apuntador y de un entero;
los operandos y el tipo del resultado. Por lo general, los operadores del lenguaje de programacin son de aridad 1 (un el resultado significa un nuevo apuntador para la direccin calculada, segn el apuntador y el segundo operando.
solo operando) o de aridad 2 (la mayora); el caso de aridad superior a 2 (es decir, de 3 o ms operandos) es menos
comn. La mayora de los lenguajes de programacin usan la forma de infijo para la escritura de las expresiones, que es Otra clase de operadores son los operadores de orden, que sirven para comparar el orden de dos valores de tipos nu-
la escritura en el orden siguiente: mricos, con el fin de regresar un valor de tipo lgico. En matemticas, los operadores de orden ms comunes son: < ,
, > , , = , . En la mayora de los lenguajes, estos operadores se traducen en programas con los siguientes smbolos:
operador_aridad_1 operando < , <=, >, > =, = y < > o ! =.
operando1 operador_aridad_2 operando2 Asimismo, en la mayora de los lenguajes de programacin, tambin se implementan los operadores lgicos de la l-
Ejemplo gica de primer orden: la negacin (operacin de aridad 1), la conjuncin y la disyuncin (operaciones de aridad 2). Estos
1 operandos lgicos corresponden a las palabras no, y, o. En muchos de los lenguajes, corresponden a los operadores
La expresin matemtica 2 mv2 + mhg tiene como posible rbol de evaluacin el siguiente (la operacin de multipli- NOT, AND y OR. Las tablas de verdad de estos operadores son:
cacin es asociativa, entonces hay varias maneras de hacer el clculo):
p NOT p
+
V F
F V
* *
p Q P!.$Q
V V V
* * m * V F F
F V F
F F F
/ m v v h g
p Q P/2Q
V V V
1 2
V F V
Figura 1.7 rbol de evolucin de la expresin.
F V V
F F F
Esta expresin se escribe 1/2*m*v*v+m*h*g en la forma de infijo. En el lenguaje LISP se usa la forma polaca (o forma
de prefijo): (* (/ 1 2) m v v) (* m h g)).
En programacin, los operadores aritmticos tienen la misma prioridad que en matemticas; as, las operaciones de *
Por los tipos numricos, se usan las cuatro operaciones aritmtica conocidas: y / tienen la misma prioridad alta, que las operaciones de + y -. En las operaciones aritmticas, los operadores tienen
17 18
$BQUVMPt%FMBMHPSJUNPBMQSPHSBNB *OUSPEVDDJOBMBQSPHSBNBDJO
una prioridad mayor que los operadores de orden; en tanto, los operadores lgicos tienen una prioridad ms baja que De acuerdo con el lenguaje de programacin, los parmetros pueden modificarse o no en el cdigo de la funcin,
los otros. donde el valor del parmetro a la salida de la funcin es cambiado. O se indica expresamente si los parmetros son de
entrada (cuando sus valores no cambian) o de salida (por ejemplo, el lenguaje PL/SQL) si los valores van a cambiar.
Por ejemplo, si las variables a, b y c tienen valores numricos, para verificar que a, b y c pueden ser las aristas de un
tringulo, en lenguaje matemtico se impone que a, b y c seran valores positivos y que cada nmero verifica la siguiente Un parmetro real que no es de salida puede ser cualquier expresin posible del parmetro formal.
desigualdad triangular: x + y < z.
En el lenguaje C solo existe la nocin de parmetro de entrada y de salida, lo cual depende de la forma en que se
En lenguaje de programacin, estas seis condiciones lgicas que deben cumplirse se escriben con la expresin: transmite: el valor indicado por una variable o una expresin; o un apuntador al contenido de una variable. Solo un apun-
tador transmitido como parmetro puede cambiar el contenido de la memoria. Hablamos de parmetros transmitidos
a > 0 AND b > 0 AND c > 0 AND a < b + c AND b < a + c AND c < a + b
por valor o por referencia.
En la expresin anterior no son necesarios los parntesis, sino que nicamente se utilizan para dar mayor claridad, por lo
Ejemplo
que cada operacin de orden se puede escribir entre parntesis, as:
Una funcin que calcula la suma de los valores de dos elementos o de una lista de elementos.
(a > 0) AND (b > 0) AND (c > 0) AND (a < b + c) AND (b < a + c) AND (c < a + b)
Por la suma de dos elementos, implantamos las funciones en los lenguajes C, PASCAL y PL/SQL, y por la suma de
una lista realizamos las implementaciones en los lenguajes PROLOG y LISP.
Funciones El concepto de lista no tiene un tipo predefinido en los tres lenguajes antes mencionados, por lo que es muy dife-
rente en PROLOG y en LISP. Por su parte, en el lenguaje PROLOG no existe la nocin de funcin regresando cualquier
tipo de valor, sino que las funciones (llamadas predicados) regresan valores de verdad.
Se considera que una funcin es una parte de cdigo capaz de realizar una tarea y/o de transformar valores para obtener
otro valor. Una funcin se define por:
Definicin de la funcin suma #DIGODELASLLAMADAS
s El nombre. Este no debe ser ambigo; segn el lenguaje, el nombre debe ser nico con respecto a las variables
globales y a otras funciones. s ,ENGUAJE#nDOSVERSIONES s ,ENGUAJE#
s El tipo de valor que la funcin regresa. int sumaC1(int a, int b) int suma;
{ printf(suma1:%d\n,sumaC1(12,56));
s El nmero fijo (o variable) de parmetros y la lista ordenada de tipo aceptable por los parmetros. return a + b; sumaC2(12,56, &suma);
s El cdigo. Este es nico para cada funcin. } printf(suma 2: %d\n, suma);
Cercanas a la nocin de funcin (o idnticas por el lenguaje C), se encuentran las nociones de procedimiento, rutina o s ,ENGUAJE0!3#!,
void sumaC2(int a, int b, int *valor)
subrutina, las cuales significan una parte del programa encargada de realizar una tarea sin regresar expresamente un valor. { VAR valor_suma : integer;
Los valores calculados o transformados por el cdigo se regresan en la lista de los parmetros. *valor = a + b; BEGIN
Si el lenguaje permite la redefinicin de las funciones, por ejemplo, los lenguajes orientados a objetos, como C++ o } valor_suma := SUMA2(12, 67);
Java, o que las funciones tengan varias listas de parmetros, el cdigo de una funcin no es nico. En el primer caso se WRITELN(La suma es:, valor_suma);
s ,ENGUAJE0!3#!,
toma en cuenta la ltima definicin de la funcin, mientras que en el segundo se hace la correspondencia entre la lista END.
de parmetros actuales y las listas de parmetros. FUNCTION SUMA2(a : integer; b : INTE-
s ,ENGUAJE0,31,
GER) : INTEGER;
Una vez que la funcin est definida (y si no tiene restricciones de acceso; por ejemplo, no es privada, como en el BEGIN DECLARE
caso del lenguaje Java, o no es una funcin interna de otra funcin, como en el lenguaje C), en todo el cdigo se pueden SUMA2 := a+b; VAR VALOR_SUMA INTEGER;
hacer una o varias llamadas a la funcin, con la nica restriccin de que la lista de los parmetros reales (especificados END; BEGIN
en la llamada) correspondan en nombre y tipo con los parmetros formales (que aparecen en la definicin de la fun- SUMA2(12, 67, VALOR_SUMA);
s ,ENGUAJE0,31,
cin). END.
CREATE OR REPLACE PROCEDURE SUMA2(a IN
La llamada de la funcin se hace especificando: s ,ENGUAJE02/,/'
integer, b in INTEGER, s OUT INTEGER)
s El nombre de la funcin. BEGIN ?- suma(8, [1, 2, 4]).
s := a+b; false.
s La lista de los parmetros reales, los cuales pueden ser expresiones que se evalan o variables.
END; ?- suma(XX, [11, 2, 45]).
Por su parte, la sintaxis de una llamada de funcin es casi la misma para prcticamente todos los lenguajes (a excepcin de XX = 58 .
s ,ENGUAJE02/,/'
algunos lenguajes funcionales, como LISP o SCHEME) y es inspirada en la notacin matemtica:
s ,ENGUAJE,)30
suma(0, []).
Nombre_funcin(parametro1, parametro2, ) suma(X, [X]). >(suma ())
suma(S,[X|L]):-suma(Y,L),S is X +Y. 0
La sintaxis de la definicin de una funcin vara considerablemente de un lenguaje a otro, al igual que la semntica de la >(suma (1 2 3 4 5))
definicin y el modo de ejecucin de las llamadas. En el caso de las llamadas de funciones, estas tienen varias semnticas, 15
segn el paradigma del lenguaje de programacin. Por el paradigma imperativo y por las funciones que regresan valores,
las llamadas se comportan como expresiones del tipo regresado.
19 20
$BQUVMPt%FMBMHPSJUNPBMQSPHSBNB *OUSPEVDDJOBMBQSPHSBNBDJO
s ,ENGUAJE,)30 Para cambiar o dar un valor a una variable, se utiliza una lectura o una asignacin. La lectura de una variable se realiza
de la siguiente forma:
(defun suma (lista)
Calculo de la suma de dos elemen- Lectura (variable)
tos de la lista
El funcionamiento de una variable es conforme al siguiente orden:
(if (null lista) 0
(+ (first lista) (suma (rest 1. El usuario del cdigo entrega un valor de buen tipo y este valor se guarda en variable.
lista))
) Ejemplos
)) Lectura (alfa).
Se lee (entrega) un valor por la variable alfa.
En ocasiones, las funciones tienen efectos de bordo, transformando contenidos en otras zonas de la memoria o cambian-
do los estados de los dispositivos de entrada/salida. Por ejemplo, una funcin clear( ) sin parmetros en lenguaje C Lectura (alfa, beta).
o la rutina ClrScr en PASCAL, que borra la pantalla de trabajo. Se leen dos valores que se entregan luego: primero a la variable alfa, segundo a la variable beta.
En todos los lenguajes, ms que las funciones definidas por el usuario, se utilizan funciones que provienen de libre- 2. Despus de una lectura, y hasta un nuevo cambio de valor, el valor contenido en la memoria para una variable
ras externas, estndares (anexadas al compilador o al intrprete) o funciones adicionales. La funcin citada, que borra la no cambia.
ventana de trabajo, proviene de una librera estndar para los dos lenguajes.
La asignacin de un valor a una variable se realiza de esta forma:
variable expresin (matemtica o lgica)
1.3 Pseudocdigo La expresin (matemtica o lgica) puede contener la variable misma, mientras que su tipo es el mismo que el tipo de
la variable.
La significacin de la asignacin se efecta realizando el clculo de la expresin y, luego, el contenido de la variable
se cambia con el valor de ese clculo; por tanto, el valor anterior de la variable se pierde.
Un pseudocdigo (falso lenguaje) est formado por una serie de palabras con un formalismo muy sencillo, que permite
describir el funcionamiento de un programa. Se usa tanto en la fase de diseo como en la fase de anlisis. Ejemplos
El pseudocdigo describe un algoritmo utilizando una mezcla de frases en lenguaje comn, instrucciones de progra- x 4 + 22
macin y palabras clave que definen las estructuras bsicas. Su objetivo es permitir que el programador se centre en los alfa beta gamma
aspectos lgicos de la solucin de un problema. i i + 1
El pseudocdigo utiliza expresiones matemticas, expresiones lgicas y la nocin de variable (sencilla, arreglo, En la primera asignacin aparece el smbolo matemtico !, el cual posee una significacin muy precisa, pero en el
pila, cola, conjunto, etctera). El pseudocdigo se puede extender para expresar tipos complejos y operaciones entre momento de la traduccin del pseudocdigo en un lenguaje de programacin, debemos buscar cmo se implementa
variables y constantes de este nuevo tipo. o se puede implementar esta constante.
Por su parte, la ltima asignacin tiene el siguiente funcionamiento: con el valor actual de la variable i se hace el
clculo de i + l, cuyo valor sera guardado en la variable i. Por ejemplo, si la variable i vale 3, despus de esta asignacin
Nociones bsicas: variables, tipos y expresiones el contenido de la variable es 4.
La escritura de un contenido se hace de una manera muy simple:
Una variable es un contenido de memoria que contiene un valor que podemos cambiar; es decir, que vara. Una variable
tiene un nombre (fijo y nico) y un valor (variable durante la ejecucin del algoritmo). Escritura (variable)
Las expresiones matemticas contienen los operadores conocidos, constantes y funciones matemticas. Por ejemplo: Escritura (constante)
X 1, 2 + 16 + 18, sen(2)* cos(x) El funcionamiento es evidente; el valor de la variable o de la constante se pone en la salida del pseudocdigo.
Una expresin lgica contiene expresiones matemticas, operadores de comparacin y operadores lgicos. La principal funcin del pseudocdigo consiste en decir qu debe hacer el cdigo y cmo; por esta razn, la escritura
s Los operadores de comparacin son: =,,>,<,,. es muy simple, sin indicar el formato de salida, y con un cierto nmero de cifras despus del punto decimal; por ejemplo,
con una poltica de caracteres o determinando en qu lugar de la pantalla se escribe.
s Los operadores lgicos son: AND, OR, NOT.
Ejemplos
Ejemplo
Escritura (Aqu termina el programa)
X 1 = 4, + 16 5, sen(x)* cos(x)0.2, x < y AND y < z Escritura (i)
En este caso, las primeras tres expresiones contienen nicamente un operador de comparacin, mientras que la ltima Escritura (j)
expresin es la traduccin de la expresin matemtica: x < y < z. La primera escritura, Aqu termina el programa, es una constante de tipo cadena de caracteres.
Una variable contiene valor de entrada o de salida (resultados) o clculos intermediarios. Las siguientes escrituras se colocan en la salida de los valores de las variables i y j, en ese orden.
21 22
$BQUVMPt%FMBMHPSJUNPBMQSPHSBNB *OUSPEVDDJOBMBQSPHSBNBDJO
Para ser ms especfico, antes de una lectura o de una escritura, se puede poner una Escritura (mensaje). s Las instrucciones se ejecutan en el siguiente orden: lectura, asignacin, escritura.
Ejemplos s No hay ambigedades en cada instruccin y pueden ejecutarse.
Escritura (Indica por favor el valor de a:) s Las variables que se usan tienen un valor correcto al inicio o al fin de cada instruccin y en todo el pseudocdigo.
Lectura (a)
La estructura secuencial es la base del pseudocdigo, pero no es suficiente para resolver todos los problemas.

Escritura (Mi calculo final es:)
Escritura (X) Estructura selectiva
Las estructuras selectivas permiten expresar las elecciones que se hacen durante la resolucin del problema. Hay varios
tipos de estructuras selectivas:
Estructura general del pseudocdigo
s Selectiva simple.
Un pseudocdigo se escribe para dar las grandes lneas del clculo; su objetivo es compartir con los dems programado- s Selectiva doble (alternativa).
res su visin de la resolucin del problema. Hay dos principios en la escritura de un pseudocdigo: s Selectiva mltiple.
s Al inicio se escriben todas las variables que se usan en pseudocdigo; cada una con su nombre y su tipo. s Selectiva casos (mltiple).
s Las lneas del pseudocdigo que siguen son rdenes (instrucciones o estructuras) que se ejecutan de arriba hacia
abajo; primero una orden y despus otra, as sucesivamente. La estructura selectiva simple es de la siguiente forma:
El pseudocdigo que se utiliza para la descripcin de un algoritmo o para indicar los pasos de resolucin de un problema
contiene estructuras de control, las cuales se utilizan para describir las instrucciones de los algoritmos. Hay cuatro tipos si expresin lgica entonces
de estructuras: instrucciones fin si
s Secuencial
s Selectiva
En esta estructura, primero se hace el clculo de la expresin lgica; si el valor de esta expresin es cierto (no falso) se eje-
s Iterativa cutan las instrucciones (puede ser una sola o ms de una). Si el valor de la expresin lgica es falso, no se ejecuta nada.
s Anidamiento Las palabras si, entonces y fin si, son palabras clave que permiten estructurar y dar un sentido a las instrucciones. Por
otro lado, es posible escribir la estructura anterior como:
si expresin lgica entonces
Estructuras componentes del pseudocdigo instrucciones
Estructura secuencial
La estructura de control secuencial tiene la siguiente forma:
instruccin^
1
fin si
instruccin^
2
Esta escritura no es tan clara. Dnde inicia y dnde termina la estructura si?, dnde empiezan las instrucciones que se
ejecutan cuando la expresin es cierta? Por estas razones, es mejor que las partes que componen una estructura (en
instruccin^
k
nuestro caso selectiva, aunque tambin aplica para todas las estructuras selectivas e iterativas) se escriban con algunos
espacios y que la parte si se alinee con la parte fin si.
Las instrucciones se ejecutan en el orden indicado por los ndices: de arriba hacia abajo y una despus de la otra.
La estructura selectiva alternativa es de esta forma:
Ejemplo
Primer pseudocdigo
si expresin lgica entonces
Lectura de x y clculo del cuadrado de x: instrucciones1
Real x, y; si no
Lectura (x) instrucciones2
y x x fin si
Escritura (y)
Primero, se hace el clculo de la expresin lgica. Si el valor de esta expresin es cierto (no falso) se ejecutan las instruc-
Observaciones: ciones1. Si no, se ejecutan las instrucciones2.
s La primera lnea contiene la declaracin de las variables; x y y son las nicas variables y tienen el mismo tipo.
23 24
$BQUVMPt%FMBMHPSJUNPBMQSPHSBNB *OUSPEVDDJOBMBQSPHSBNBDJO
Real x
Lectura (a)
Lectura (b)
Ejemplo si a 0 entonces
Verificar si un nmero entero es o no divisible entre 3. Escritura (Hay una nica raz)
x b/a
La entrada es el nmero n, la salida es un mensaje de tipo S o No. Escritura (x)
sino si b 0 entonces
Integer N Escritura (No hay ninguna raz)
Lectura (N) sino
resto N%3 Escritura (Hay una infinidad de races)
si resto = 0 entonces fin si
Escritura (S)
Este pseudocdigo contiene una estructura selectiva mltiple con condiciones lgicas exclusivas. La resolucin se puede
sino hacer con un pseudocdigo que contiene dos estructuras selectivas alternativas, una aadida a la otra:
Escritura (NO)
Real a, b, x
Lectura (a)
fin si
Lectura (b)
La estructura selectiva mltiple es usada para anidar condiciones lgicas mutuamente excluyentes. Su forma es la si a = 0 entonces
siguiente: si b = 0 entonces
Escritura (Hay una infinidad de races)
si expresin lgica1 entonces sino
instrucciones1 Escritura (No hay ninguna raz)
sino si expresin lgica2 entonces fin si
instrucciones2 sino
sino si expresin lgica3 entonces Escritura (Hay una nica raz)
instrucciones3 x b/a
Escritura (x)
sino fin si
instruccionesn
fin si Las dos soluciones propuestas son semnticamente equivalentes, por lo que se realiza el mismo tratamiento; depende
nicamente de la manera de escribir y leer el cdigo y de que los participantes en el desarrollo de la solucin del pro-
Esta estructura se ejecuta de la siguiente manera: blema prefieran una u otra.
Se hace el clculo de la expresin lgica1, si el resultado es cierto se ejecutan instrucciones1 y la instruccin En la segunda versin, en lugar de dos declaraciones de variables, tambin tenemos una sola para las tres variables
selectiva se termina. Si no, se hace el clculo de la expresin lgica2; si el resultado es cierto se ejecuten instrucciones2 del cdigo; sin embrago, la primera versin permite nada ms una separacin lgica entre las variables de entrada
y la instruccin selectiva se termina Si todas las expresiones lgicas son falso, entonces se ejecutan instruccionesn. y la nica variable de salida.
La estructura selectiva mltiple-casos se usa cuando un mismo valor se compara con varios valores. Su forma es la
Ejemplo siguiente:
Resolver la ecuacin de primer grado que tiene su forma matemtica ms general:
seleccionar expresin
ax + b = 0 caso valor1
La entrada est formada por los dos parmetros de la ecuacin, a y b, que sern guardados en dos variables de tipo instrucciones1
punto flotante. La salida ser un mensaje sobre la raz de la ecuacin y, en algn caso, su valor. caso valor2
instrucciones2
Los casos que pueden aparecer y que deben tratarse de manera diferente sern:

s a = 0 y b = 0: cualquier nmero real es una solucin. en otro caso
instruccionesn
s A =0yb 0: no hay ninguna solucin. fin seleccionar
s a 0: la raz es nica y de valor a/b.
La expresin puede ser una sola variable. Primero, se obtiene el valor de esta expresin y se compara con cada valori;
Una proposicin de pseudocdigo es la siguiente: si hay expresin = valori, se ejecutan las instruccionesi. Si ningn valor corresponde, se ejecuta la parte en otro caso,
instruccionesn.
Real a, b
25 26
$BQUVMPt%FMBMHPSJUNPBMQSPHSBNB *OUSPEVDDJOBMBQSPHSBNBDJO
Ejemplo La entrada del problema es el nmero x y la salida es el nmero entero m. La idea es incrementar en 1 una variable
m iniciada con el valor 0 hasta que la variable m sea ms grande que la variable de entrada x. El pseudocdigo es:
Segn el valor de una variable de entrada, se escribe:
Real x
s FALSO si el valor de la variable es 0. Integer m
s CIERTO si el valor de la variable es 1. Lectura (x)
s INDEFINIDO si el valor de la variable es 1. m 0
s ERROR en otros casos. mientras m<x hacer
m m + 1
El pseudocdigo es muy simple, est estructurado en dos partes: la lectura de la variable y una estructura selectiva de
tipo caso: fin mientras
Escritura (m)
Integer x
Lectura (x)
Ejemplo
seleccionar x
caso 0 Buscar el nmero entero ms grande de forma 2k que sea menor que un nmero real positivo x, con x 1.
Escritura (FALSO)
caso 1 La entrada del problema es el nmero x y la salida es el nmero m = 2k; asimismo, podemos considerar que la
Escritura (CIERTO) variable k es tambin una salida.
caso 1 La resolucin de este problema es parecida a la del problema anterior:
Escritura (INDEFINIDO)
en otro caso Se calcula la potencia ms pequea de 2(2j), que sera ms grande que x; despus, se hace un paso detrs. El
Escritura (ERROR) pseudocdigo es de la siguiente forma:
fin seleccionar
Real x
Observacin: El orden de tratamiento de los casos es libre; se puede poner cualquier permutacin de los valores 1, Integer m, k, j
0 y 1, nicamente al final se pone en otro caso. Lectura (x)
m 1
Estructura iterativa j 0
mientras m x hacer
Las estructuras iterativas abren la posibilidad de ejecutar un grupo de instrucciones ms de una vez; es decir, sirven para
m m*2
ejecutar varias veces una misma parte de un cdigo. Hay varios tipos de estas:
j j + 1
s Bucle mientras fin mientras
m m/2
s Bucle repetir
k j1
s Bucle para (cada) Escritura (El numero que se busca es:)
Escritura (m) Escritura (es la potencia 2 de)
La estructura iterativa mientras (while) tiene la siguiente forma:
Escritura (k)
_#UIDADO4AMBINALINTERIORDEESTAESTRUC En este ejemplo de pseudocdigo, se muestra que antes y despus de la estructura re-
mientras expresin lgica hacer
tura repetitiva, durante las instrucciones HAY petitiva mientras, entre las variables m y j, siempre existe la relacin m = 2j.
instrucciones QUEHACERACTUALIZACIONESDELASVARIABLESQUE
componen la expresin lgica DEOTRAMA La estructura iterativa repetir (repeat) tiene la siguiente forma:
fin mientras nera, el valor de la expresin no cambia y
la estructura repetir SE EJECUTARA INlNIDAD
de veces.
repetir
Su ejecucin es la siguiente:
instrucciones
Se calcula la expresin lgica y, si su valor es cierto, se ejecutan las instrucciones y se hace un nuevo clculo de la ex-
hasta que expresin lgica
presin lgica. Entones, en total, las instrucciones se ejecutan 0 o varias veces, dependiendo del valor de la expresin
lgica.
Su ejecucin es la siguiente:
Ejemplo _#UIDADO!LINTERIORDELASINSTRUCCIONESHAY
Se ejecutan las instrucciones y se hace el clculo de la expresin lgica. Si su valor es falso, se ejecutan de nuevo las
QUEHACERMODIlCACIONESDELASVARIABLESQUE
Buscar el entero m ms pequeo, pero que sea mayor que un nmero real positivo componen la expresin lgica PORQUELAEX instrucciones y se hace un nuevo clculo de la expresin lgica.
x, con x 1. presin siempre sera cierta y la estructura no
En resumen, las instrucciones se ejecutan una o ms veces, dependiendo del valor de la expresin lgica.
se terminara nunca.
27 28
$BQUVMPt%FMBMHPSJUNPBMQSPHSBNB *OUSPEVDDJOBMBQSPHSBNBDJO
Una estructura repetir es equivalente a: El sentido de la variable i es ahora: se est ejecutando la iteracin nmero i.
s Se requiere el clculo de las partes entera y fraccionaria; entonces, se indica con claridad la llamada de funcio-
instrucciones nes, que normalmente estn implementadas en casi todos los lenguajes de programacin.
mientras NOT (expresin lgica) s La variable p es intermediaria y sirve para hacer una sola vez la multiplicacin de y por b. El uso de esta variable
instrucciones no es obligatorio, se puede escribir directamente y en el siguiente orden:
fin mientras c parte_entera(y*b)
y parte_fraccionaria(y*b)
Ejemplo
Nota: Nada ms que la misma multiplicacin se hace dos veces.
Para un nmero real x entre 0 y 1 (0 <x< 1), una base de numeracin b (b 10) y un nmero entero positivo k, buscar
las k primeras cifras despus del punto decimal de la representacin de x en base de b. s Otra variable intermediaria es y, que guarda los valores intermediarios por el clculo de la representacin de x; al
inicio, esta variable toma el valor de x. Es posible usar directamente x en los clculos; pero, al final de la estructura
Las entradas del problema son tres: el nmero x, la base b y el nmero de cifras k. Mientras que la salida sera una
repetitiva, el valor de x se desnaturaliza y el valor inicial se pierde.
sucesin de cifras en base b (un nmero entre 0 y b 1). De manera ms formal:
Una estructura iterativa que toma en cuenta la nocin de variable-contador es la estructura iterativa para (for), la cual
tiene la siguiente forma:
x (10)
= 0.c c c c
1 2 k1 k(b)
para i de inicio hasta fin [paso p] hac-
El algoritmo de transformacin de un nmero en base 10 en otra base se aborda en el apndice 1; la idea es hacer er
multiplicaciones con la base b, tomando despus la parte entera de cada multiplicacin. As, el pseudocdigo:
instrucciones
Real x fin para
Integer b, k Donde i es una variable (simple) e inicio, fin, p, son valores numricos. Si el paso no es declarado, su valor es 1.
Real y, p
Integer i, c Su ejecucin es repetitiva y su funcionamiento es el siguiente:
Lectura (x)
La i recibe el valor inicio y se ejecutan las instrucciones; luego, i se incrementa el valor de p (el paso) y se reejecutan
Lectura (b)
las instrucciones, si el valor de i es menor que fin.
Lectura (k)
y x En resumen, las instrucciones se ejecutan 0 o varias veces, dependiendo de los valores de inicio, fin y el paso.
i 0
El valor de la variable i se puede usar al interior de las instrucciones, pero no puede ser modificado.
repetir
p y*b Esta estructura es equivalente a:
c parte_entera(p)
y parte_fraccionaria(p) i inicio
Escritura (c)
i i + 1 mientras i fin hacer
hasta que i k instrucciones
Este pseudocdigo reviste inters por varias razones: i i + p
fin mientras
s Hasta ahora las salidas de los algoritmos se han colocado al final de todos los clculos; desde que se obtiene una
cifra de la representacin fraccionaria, esta cifra contenida en la variable c, se escribe y a cada paso se calcula
Ejemplo
un nuevo valor en la iteracin siguiente.
Obtener todas las potencias de un nmero a desde a1 hasta ak, donde a y k son valores de entrada; a es un nmero
s Se ejecutan exactamente k iteraciones; la variable i indica, de manera muy precisa, cuntas iteraciones se ejecu-
taron. real y k es un entero positivo.
s La manera de trabajar con la variable i no es nica, tambin se puede escribir as: El uso de una estructura repetitiva para cada es evidente:
Real a, p
i 1 Integer k, i
repetir Lectura (a)
p y*b Lectura (k)
c parte_entera(p) p 1
y parte_fraccionaria(p) para cada i de 1 hasta k
Escritura (c) p p*a
i i + 1 Escritura (p)
hasta que i > k fin para
29 30
$BQUVMPt%FMBMHPSJUNPBMQSPHSBNB *OUSPEVDDJOBMBQSPHSBNBDJO
Es muy fcil verificar que al final de cada iteracin la variable p contiene el valor de ak. El pseudocdigo funciona tam- Lectura (A[i])
bin por un nmero k entregado, que es 0 o un valor negativo; en este caso, no se ejecuta nada. fin para
/* ahora el arreglo est lleno */
Ejemplo suma 0
Obtener la representacin fraccionaria de un nmero. El pseudocdigo del ejemplo anterior se puede escribir con una para cada i de 1 hasta N hacer
estructura iterativa para cada: suma suma + A[i]
fin para
Real x Escribir (suma)
Integer b, k
Real y, p Las partes entre /* y */ son comentarios, que ayudan al lector a entender mejor el cdigo.
Integer i, c
El arreglo A tiene una dimensin variable. Como un consejo de programacin podemos indicar que cuando la di-
Lectura (x)
mensin posible no es demasiado grande, conviene hacer la declaracin con una constante, a fin de evitar trabajo de
Lectura (b)
programacin ms difcil.
Lectura (k)
y x Ejemplo
para cada i de 1 hasta k paso 1
p y*b El clculo de las potencias de a, desde a1 hasta ak. Sin reducir la calidad de la solucin ni su generalidad, podemos
c parte_entera(p) suponer que k 30. En esta versin, los nmeros de forma ai seran guardados en un arreglo C[30].
y parte_fraccionaria(p)
El pseudocdigo es, por tanto:
Escritura (c)
fin para Real a, C[30]
Integer k, i
En los ltimos dos ejemplos, si se quieren guardar los valores de salida, las potencias de a y las cifras en base b del uso Lectura (a)
de las variables simples no son suficientes, por lo que es indispensable usar los arreglos. Lectura (k)
p 1
para cada i de 1 hasta k
p p*a
Uso de los arreglos C[i] p
fin para
para cada i de 1 hasta k
En la seccin 1.2 presentamos las nociones de variable en general y de arreglo. Como se vio, un arreglo se caracteriza por Escritura (C[i])
un tipo bsico (entero, cadena de caracteres, ), su nombre (como cualquier variable) y su tipo. fin para
En el pseudocdigo tambin es til poder usar los arreglos. As, en la parte de la declaracin debemos establecer que
la variable es un arreglo, indicando su dimensin. Por ejemplo:
Funciones y procedimientos
Integer B, A[10]
Real X [200]
Las funciones y los procedimientos son partes de un programa que van a ser ejecutadas, una o varias veces, con los
Aqu, podemos ver que B es una variable simple, A es un arreglo de valores enteros y X es un arreglo de valores en punto valores transmitidos en los parmetros:
flotante. Los dos arreglos tienen una dimensin fija: 10 por el arreglo A y 200 por el arreglo X. Tambin, es posible declarar s Funcin. Recibe parmetros (uno o varios) y calcula un valor de regreso.
arreglos con una dimensin variable, pero se debe tomar en cuenta, en la escritura de los programas, porque en algunos
lenguajes de programacin la definicin de arreglo es ms complicada que una simple declaracin. Por ejemplo: s 0ROCEDIMIENTO Recibe parmetros, pero no regresa explcitamente ningn valor.
Los parmetros son de tipos conocidos (simples o arreglos) y pueden ser de entrada o de salida. Un parmetro de
Integer N entrada sirve para introducir los valores necesarios al clculo y un parmetro de salida va a cambiar su valor durante la
Integer A[N] ejecucin de la funcin o del procedimiento, para entregar resultados. La definicin de un parmetro es la siguiente:
[IN/OUT] tipo_parametro nombre_parametro
En este caso, el arreglo A no se puede usar si la variable N no est definida; as, es preferible que durante la ejecucin del
cdigo, el valor de esta variable no cambie. Con la palabra IN se indica un parmetro de entrada y con la palabra OUT se indica un parmetro de salida. Los pa-
rmetros de entrada siempre deben tener valores; al contrario de los parmetros de salida.
Ejemplo
Las funciones y los procedimientos se declaran una sola vez y pueden ejecutarse varias veces. Una ejecucin se
La suma de los elementos de un arreglo que se lee de entrada: denomina llamada.
Integer N, suma, i La declaracin de un procedimiento es:
Integer A[N]
Lectura (N)
para cada i de 1 hasta N hacer
31 32
$BQUVMPt%FMBMHPSJUNPBMQSPHSBNB *OUSPEVDDJOBMBQSPHSBNBDJO
Integer N, suma
procedimiento nombre_procedimiento (lista de definiciones de parametros) Integer A[N]
inicio inicio
Lectura (N)
lectura_arreglo (N, A)
fin procedimiento Escribir(suma (N, A))
fin
La llamada de un procedimiento es de la siguiente forma:
nombre procedimiento(parametro1, parametro2, )
1.4 Diagrama de flujo
Donde los parametros1 son variables o arreglos, expresiones o constantes. Hay casos en los que los parmetros corres-
ponden en nmero y tipo con la definicin.
Ejemplo Los diagramas de flujo son comunes en varios dominios tcnicos y se usan para poner en orden los pasos a seguir o las
acciones a realizar. Su principal ventaja es que tienen la capacidad de presentar la informacin con gran claridad, adems
La definicin de un procedimiento para la lectura de un arreglo: de que se necesitan relativamente pocos conocimientos previos para entender los procesos y/o el objeto del modelado.
Por ejemplo, en el siguiente diagrama se presentan los pasos a seguir cuando alguien sale de vacaciones:
procedimiento lectura_arreglo (IN Integer dimension, OUT Integer X[])
inicio
Integer i
para cada i de 1 hasta dimension hacer Start
Lectura (X[i])
fin para
fin procedimiento
Ejemplo de dos llamadas: Cierre todas las
lectura_arreglo(100, A) ventanas
lectura_arreglo(N, X)
Una funcin se define como: Cierre agua, gas
y luz
funcin tipo nombre_funcion (lista de definiciones de parmetros)
inicio
. Cierre la puerta
regresa valor de entrada
fin funcin
La funcin tiene que regresar o devolver un valor del mismo tipo de la funcin. Una llamada de funcin es parecida a una
llamada de procedimiento y puede ser escrita en una expresin. NO S
Hay un vecino
Ejemplo de confianza?
La definicin de una funcin para la suma de los elementos de un arreglo es la siguiente:
funcin Integer suma_arreglo(IN Integer dimension, IN Integer X[ ]) Deje un duplicado
de las llaves al
inicio
vecino
Integer i, ss
ss 0
para cada i de 1 hasta dimension hacer
ss ss + X[i]
fin para
regresa ss Stop
fin funcion
El programa completo para calcular la suma de los elementos de un arreglo puede ser el siguiente: Figura 1.8
33 34
$BQUVMPt%FMBMHPSJUNPBMQSPHSBNB *OUSPEVDDJOBMBQSPHSBNBDJO
En la descripcin de los algoritmos o de los programas existen varios formalismos. Pero, de una manera sinttica, las reglas
comunes a todos para expresar algoritmos, segn el paradigma de la programacin estructurada, son:
s Un diagrama de flujo se lee de arriba hacia abajo.
S expresin NO
s Un diagrama se compone de bloques entre los cuales existen flechas que indican el sentido de lectura o de eje-
lgica
cucin.
s Tanto al inicio como al final hay un solo bloque, START y STOP, respectivamente (vase figura 1.9).
instrucciones 1 instrucciones 2
Start Stop
Figura 1.9
Figura 1.13
s Para las operaciones de entrada o de salida se utilizan los bloques con la forma de un paralelogramo (vase figura
1.10). Nota: Cualquier rama (S o NO) puede dejarse vaca.
s Estructura iterativa mientras:
Lectura(x) Escritura(x)
expresin
Figura 1.10 S
lgica
s Los bloques para hacer asignaciones son rectangulares o cuadrados (vase figura 1.11).
variable expresion NO
instrucciones
Figura 1.11
Figura 1.14
s Una decisin tomada con base en una expresin lgica se expresa con un bloque en forma de rombo (vase figura
1.12).
s Estructura iterativa repetir:
NO S
expresin
lgica
instrucciones
Figura 1.12 expresin
lgica
La mayora de las estructuras de la programacin estructurada presentadas tienen una transcripcin evidente e inmediata
NO
en diagramas de flujo:
S
s La estructura selectiva simple y la estructura selectiva alternativa:
Figura 1.15
35 36
$BQUVMPt%FMBMHPSJUNPBMQSPHSBNB *OUSPEVDDJOBMBQSPHSBNBDJO
En cada una de estas estructuras, instrucciones significa cualquier construccin correcta de diagrama de flujo formada Este diagrama de flujo es lineal y muy simple: lectura, clculo y escritura.
para uno solo o ms bloques.
Ejemplo
Las variables (simples, arreglo o de otro tipo) de un diagrama de flujo pueden considerarse implcitamente declara-
Verificar si un nmero entero es o no divisible entre 3.
das desde sus primeras apariciones, o bien pueden declararse de manera explcita y detallada en un documento anexo
al diagrama. De cualquier forma, la primera aparicin de una variable debe ser en bloque de entrada o escrita en el lado
izquierdo de una asignacin. Por ejemplo: Start
Start Start Su variable:
GET I
Lectura (i) j k + 3
resto I%3
Lectura (i)
j i + 3 S NO
resto = 0
Stop Stop
PUT S, es di- PUT NO. No es di-
visible entre 3 visible entre 3
Figura 1.16
El primer diagrama de flujo es correcto, porque en el momento del clculo de la variable j, la variable i es conocida y
contiene un valor; pero en el segundo diagrama, el uso de la variable k del lado derecho de la primera asignacin no es
correcto, porque aqu la variable k aparece por primera vez y no contiene ningn valor. End
Los ejemplos de diagramas de flujo que aparecen enseguida, son la resolucin de los problemas y ejercicios mostra-
dos como ejemplos a lo largo de todo el captulo. El diagrama de flujo es, en la mayora de los casos, una traduccin fiel Figura 1.18
Ejemplo 3
del pseudocdigo. Los diagramas de flujo fueron concebidos y probados con el software Raptor.8 En el apndice 2 que se
encuentra en el CD-ROM, se presenta este software, la manera cmo hacer los diagramas de flujo y la forma de probarlos. Resolver la ecuacin de primer grado que tiene su forma matemtica ms general:
Ejemplo 1 ax + b = 0
Leer una variable x y calcular el cuadrado de x. Start
Start
Su valor:
GET n
Su variable:
GET x
S NO
x = 0
y x * x
PUT FALSO S NO
x = 1
PUT El cuadrado PUT CIERTO S NO
de + x +es + x = 1
y
PUT INDEFINIDO PUT ERROR
End
Figura 1.17
End
Figura 1.19
8
Raptor es un software libre disponible en: http://raptor.martincarlisle.com/
37 38
$BQUVMPt%FMBMHPSJUNPBMQSPHSBNB *OUSPEVDDJOBMBQSPHSBNBDJO
Ejemplo 4
Start
Segn el valor de una variable de entrada, se escribe:
s FALSO si el valor de la variable es 0.
s CIERTO si el valor de la variable es 1. Su variable real > l:
GET x
s INDEFINIDO si el valor de la variable es 1.
s ERROR en otros casos.
S NO
Start x = l
Su valor:
PUT La entrada
GET n m 0
no es correcta
S NO Loop
n = 0
S
S NO m > x
PUT FALSO n = 1
NO
m m + l
PUT CIERTO S NO
n = 1
PUT Se obtiene:
PUT INDEFINIDO PUT ERROR + m + l > + x
End
End
Figura 1.21
Figura 1.20 /BSERVACIN En el diagrama introducimos de manera suplementaria la prueba para certificar si la entrada es correcta; a
saber, si x l.
Ejemplo 6
/BSERVACIN En el software Raptor no se dispone de formalismos para modelar la estructura selectiva casos; entonces, Buscar el nmero entero ms grande de forma 2k que sea menor que un nmero real positivo x, con x 1.
se utiliza la estructura alternativa clsica; esto es, existe la libertad de poner los bloques de decisin en cualquier orden,
aunque es mejor seguir el enunciado del problema.
Ejemplo 5
Buscar el nmero entero ms pequeo, m que es mayor que un nmero real positivo x, con x l.
39 40
$BQUVMPt%FMBMHPSJUNPBMQSPHSBNB *OUSPEVDDJOBMBQSPHSBNBDJO
Start Start
Su valor x: Su nmero entre
GET x 0 y 1: GET x
m 1 La base de numeracin:
GET b
Loop Nmero de cifras en base
+ b + : GET k
m m * 2
y x
S
m > x
i 0
NO
Figura 1.23
m m/2
PUT m = + m + Loop
< x = + x
p y * b
End
Figura 1.22 c floor (p)
/BSERVACIN Por razones de tamao, en este diagrama de flujo hemos renunciando al clculo de j con m = 2j.
y p floor (p)
Ejemplo 7
Para un nmero real x entre 0 y 1 (0 < x < 1), una base de numeracin b (b 10) y un nmero entero po- PUT c
sitivo k, buscar las k primeras cifras despus del punto decimal de la representacin de x en base b.
i i + 1
S
i > = k
NO
End
Figura 1.24
41 42
$BQUVMPt%FMBMHPSJUNPBMQSPHSBNB *OUSPEVDDJOBMBQSPHSBNBDJO
/BSERVACIN Con respecto al pseudocdigo, cambiamos el orden de obtencin de c al interior de la estructura iterativa i 1
por una razn pedaggica: disponemos de la funcin floor() para el clculo de la parte entera inferior; entonces, obte-
nemos la parte fraccionaria por diferencia entre el nmero y su parte entera. Vase el CD-ROM de apoyo que acompaa
este libro, donde se incluye una versin en la que se usa un arreglo para guardar las cifras en base b con una escritura
ms legible del resultado. Loop
Ejemplo 8
Obtener todas las potencias de un nmero a, desde a1 hasta ak, donde a y k son valores de entrada, a es un nmero
real y k es un entero positivo. PUT in +
+ c[i]
Start
i i + 1
El nmero real:
GET a
S
El coeficiente i > k
mximo: GET k
NO
i 1
End
p 1
Figura 1.27
Figura 1.25
/BSERVACIN El diagrama de flujo implementa (expresa) la versin con las potencias de a almacenadas en un arreglo
que se escribe al final, durante otra estructura repetitiva.
Ejemplo 9
Calcular la suma de los elementos de un arreglo que se lee de entrada.
Loop Start
S
i > k
lectura_arreglo
(M, B)
NO
p p * a
suma (M, B, suma)
c[i] p
escribir (suma, la
suma de los elemen-
tos del arreglo)
i i + 1
End
Figura 1.26 Figura 1.28
43 44
$BQUVMPt%FMBMHPSJUNPBMQSPHSBNB *OUSPEVDDJOBMBQSPHSBNBDJO
/BSERVACIN La herramienta que empleamos, nicamente nos permite el uso de procedimientos; entonces, la solucin 2. Por el clculo de la suma de los elementos del arreglo:
del problema la expresamos como tres llamadas de procedimientos:
1. Por la lectura del arreglo: Start (in N,
in A, out s)
Start s 0
(out N, out A)
i 1
La dimensin del
arreglo: GET N
Loop
i 1
s s + A [i]
Loop
i i +1
Elemento +i+:
GET A[1] S
i > N
NO
I I + 1
S End
i > N
NO Figura 1.30
3. Por la escritura de un valor y de un mensaje:
End Start (in valor,
in mensaje)
Figura 1.29
PUT valor + +
mensaje
End
Figura 1.31
45 46
$BQUVMPt%FMBMHPSJUNPBMQSPHSBNB *OUSPEVDDJOBMBQSPHSBNBDJO
/BSERVACIN Aqu se puede observar que el nombre del arreglo es X y que el nombre de su dimensin es M. Estos
nombres se usan en las llamadas de los procedimientos de lectura y de clculo de suma. As, podemos definir los par- Bibliografa
metros de los procedimientos con los nombres que deseamos; en este caso, N por el parmetro de dimensin y A por el
parmetro que guarda el arreglo. Algunos de los parmetros son: de entrada, cuando se calcula la suma de los elementos s Knuth, Donald, El arte de programar ordenadores, Vol. I, Algoritmos fundamentales, Editorial Revert, Barcelona,
del arreglo, o de salida, que es el valor calculado de esta suma. Bogot, Mxico, 1986.
s Cedano Olvera, Marco Alfredo y otros, Fundamentos de computacin para ingenieros, Grupo Editorial Patria, Mxi-
co, 2010.
Sntesis del captulo s Alfred V., Sethi, Ravi y Ullman, Jeffrey D., Compilers: Principles, Techniques, and Tools, Addison-Wesley, Estados
Unidos, 1986.
La computadora siempre ejecuta rdenes en un formato inteligible para ella; dichas rdenes estn agrupadas en un pro-
grama o software. Un programa est escrito en un lenguaje de programacin de alto o bajo nivel y traducido en cdigo Ejercicios y problemas
ejecutable. Por su parte, un software es un conjunto de programas.
El trabajo de realizacin de un software que resuelve un problema o que responde a una situacin est basado en la
elaboracin de algoritmos. Un algoritmo sigue un proceso de elaboracin que pasa por las siguientes fases: 1. Cul es la diferencia entre un programa y un algoritmo?
1. Definicin. Se especifica el propsito del algoritmo.
2. Anlisis. Se analizan el problema y sus caractersticas; se determinan las entradas y las salidas del problema, y se 2. Es posible escribir directamente un programa para la resolucin de un problema? Es til?
elige la solucin ms conveniente, si hay varias, o se propone una nueva.
3. Diseo. Se plasma la solucin del problema; aqu se emplea una herramienta de diseo: el diagrama de flujo y
el pseudocdigo. 3. Construir el rbol de evaluacin y luego escribir la expresin en lenguaje informtico en forma de infijo de:
4. Implementacin. Se realiza el programa y se hacen varias pruebas; el programa se edita con editores de texto y
se compila o se interpreta a fin de crear el ejecutable o ejecutar el cdigo. a) ab + bd
Los programas se escriben en un lenguaje de programacin. Hay varios paradigmas de programacin y una multitud de b) a2 103
lenguajes de programacin que tienen uno o varios paradigmas. La eleccin del lenguaje de programacin depende prin-
cipalmente del tipo de problema a resolver, de la computadora y de otros dispositivos fsicos que se utilizarn. a b 2 4ac
c)
2b
Los programas contienen variables. Una variable tiene un tipo y un nombre que debe ser nico. Segn los paradig-
mas el lenguaje, la asignacin de una zona de memoria para la variable se hace en la memoria (memoria central, en la d) a + b < c y 2c < 4a + 3b
mayora de los lenguaje) de manera esttica o dinmica.
El pseudocdigo y los diagramas de flujo son herramientas de diseo de algoritmos ms o menos equivalentes, que 4. Escribir la expresin lgica que corresponde a la expresin a 0 y b2 4ac > 0 matemtica siguiente:
tienen el paradigma de programacin imperativa y estructurada.
Las estructuras de paradigma que se conocen son:
s Estructura secuencial. 5. Proponer nombres de variables para resolver una ecuacin de segundo grado.
s Estructura alternativa.
s Estructura iterativa. 6. Si los coeficientes algebraicos de una ecuacin de segundo grado son nmeros reales, proponer tipos para
s Funciones y procedimientos. las variables elegidas en el problema anterior.
Las variables que se usan en el pseudocdigo o en el diagrama de flujo pueden ser simples, de tipo arreglo o de otro tipo,
descrito por el programador. Cada variable posee un nombre nico y no ambiguo y tiene reservada una zona de memoria 7. Si los coeficientes de la ecuacin x2 by2 = 0 son nmeros enteros, proponer nombres y tipos de variables
en la cual se almacena el valor de la variable. para buscar soluciones enteras.
8. Por qu la definicin de una funcin parece tan diferente entre los lenguajes C, PASCAL y PL/SQL, por un
lado, y PROLOG o LISP, por el otro? Por qu los primeros ejemplos son tan parecidos (lenguajes C, PASCAL
y PL/SQL)?
47 48