Está en la página 1de 8

Captulo 1

Fundamentos generales de los lenguajes de programacin


1.1. Historia de los lenguajes Un lenguaje de programacin es un lenguaje artificial diseado para expresar instrucciones que pueden ser llevadas a cabo por mquinas como las computadoras. De acuerdo al nivel de abstraccin, se clasifican en lenguajes de bajo nivel y lenguajes de alto nivel. Existen miles de lenguajes de programacin, muchos de ellos pueden ser encontrados en diversas listas, como: The Language List en la Universidad de Kansas (http://bit.ly/6uzot) Lenguajes de programacin en la Wikipedia (http://bit.ly/14GvDzS) A brief, incomplete, and mostly wrong history of programming languages (http://bit.ly/XaUMQL) Infografa: Computer Languages History (http://bit.ly/1Dglg6) Las listas son amplias, pero no cubren la historia completa de los lenguajes de programacin, hace falta, por ejemplo, el mtodo de Ada Lovelace (http://bit.ly/OPGL9) para calcular una secuencia de nmeros de Bernoulli utilizando la mquina analtica (http://bit.ly/r0UoVN) de Charles Babbage (http://bit.ly/18iTf0) el propuesto por Alan Turing para su Automatic ComputingEngine (http://bit.ly/14GvTiu) o incluso el se olvida que el sistema binario moderno(http://bit.ly/rzyuD) fue propuesto por Leibniz (http://bit.ly/14GvYTc).

Figura 1.1: Automatic Computing Engine y Leibniz Programa 1: Desarrollar un programa que realice las siguientes operaciones de nmeros complejos: Mdulo Fase Suma

Resta Multiplicacin Divisin Potencia

1.2. ELEMENTOS DE LOS LENGUAJES


Un programa es un conjunto de instrucciones que una vez ejecutadas realizarn una o varias tareas en una computadora. Un programa (algoritmo) contiene instrucciones elementales seleccionadas cuidadosamente que pueden ser realizadas por un robot un procesador; el procesador recibe las rdenes y ejecuta lo que indican, resulta obvio que la disposicin de las instrucciones resulta crucial al momento de llevarlas a cabo. Por tanto, el algoritmo debe incluir instrucciones de control que modifiquen la ruta que debe seguir el procesador, adems de indicar que debe hacerse en cada paso, as como el momento en el cual debe detenerse. Se ha probado que para implementar cualquier algoritmo, son suficientes tres construcciones bsicas para control de flujo: Secuencia. Condicional. Ciclos iterativos (repetitivos). A continuacin se describe cada una de ellas y se muestra su representacin tanto en pseudocdigo.

1.2.1. EJECUCIN SECUENCIAL.


La ejecucin secuencial consiste de ejecutar una instruccin y al terminar, realizar lo que indica el siguiente pas del algoritmo. n. Instruccin i o. Instruccin i + 1 Figura 1.2: Ejecucin secuencial.

1.2.2. EJECUCIN CONDICIONAL.


Consiste de ejecutar un grupo de acciones A un grupo de acciones B (pero no ambos) en funcin del resultado de la evaluacin de una condicin C (Verdadero Falso). n. SI c ENTONCES n.1. Subinstruccin 1 n.k. Subinstruccin k o. SI NO o.1. Subinstruccin 1 o.j. Subinstruccin j Figura 1.3: Ejecucin condicional.

Un algoritmo que solo contiene las estructuras de control anteriores funciona para tareas de longitud fija, dado que cada instruccin se ejecuta solamente una vez. Sin embargo, generalmente se requiere que algunas instrucciones sean ejecutadas ms de una vez (como en el algoritmo de obtencin del mcd); existen estructuras de control que se encargan de la ejecucin repetida de bloques de instrucciones, se conocen de forma genrica como estructuras iterativas o ciclos.

1.2.3. ITERACIN DEFINIDA.


Sirve para ejecutar un grupo de instrucciones A exactamente N veces, donde N es un entero positivo. n. DESDE cont 1 HASTA N n.1. Subinstruccin 1 n.k. Subinstruccin k n.k+1. Cont cont + 1 Figura 1.4: Iteracin definida. Es importante notar que en el caso de la iteracin definida existe una variable implcita llamada contador, cont en el ejemplo, y sirve para tener un registro del nmero de iteraciones realizadas hasta el momento y para llegar a la condicin de paro. Otra variable muy utilizada cuando se trabaja con ciclos es conocida como acumulador, y sirve para almacenar resultados parciales de alguna operacin importante dentro del ciclo; adems, al terminar el ciclo, almacena el resultado final deseado.

1.2.4. ITERACIN CONDICIONAL.


Conocida tambin como iteracin indefinida, se utiliza para repetir un bloque de acciones A, mientras una condicin c sea verdadera, c es una condicin de paro. n. MIENTRAS c HACER n.1. Subinstruccin 1 n.k. Subinstruccin k Figura 1.5: Iteracin condicional. En este caso, a diferencia de la iteracin definida, la condicin de paro C depende exclusivamente de las operaciones realizadas dentro del cuerpo del ciclo. Cuando en un algoritmo se utilizan iteraciones, es necesario tener cuidado de no crear ciclos infinitos, esto se hace con operaciones dentro del bloque de instrucciones que garanticen que la condicin de paro se cumplir. 1.2.5. COMBINACIN DE ESTRUCTURAS DE CONTROL. Un algoritmo puede contener estructuras de control de flujo combinadas de forma compleja; secuencias, condicionales e iteraciones pueden estar intercaladas y anidadas.

Figura 1.6: Algoritmo de la amistad Ejercicio: Desarrollar pseudocdigos para: Convertir un nmero entero de base 10 a base N Convertir un nmero entero de base 10 a su representacin en C2 Tarea: Desarrollar pseudocdigos para: Dados dos nmeros naturales M,N, obtener el mximo comn divisor entre ellos dado un nmero natural N, determinar si es primo; en caso de no serlo, que muestre su primer factor primo y el valor por el cual se debe multiplicar para obtener N Dado un nmero natural N, imprimir todos los nmeros primos antes de N Dado un nmero natural N, obtener fibonacci (N) Programa 2: Desarrollar un programa que realice las siguientes operaciones de polinomios: Valor en un punto Suma Resta Igualdad de 2 polinomios Polinomio opuesto Multiplicacin

1.3. ENTORNOS SOBRE LOS LENGUAJES


Dada la evolucin de los lenguajes de programacin, ha crecido la necesidad de mecanismos de abstraccin apropiados; los nombres juegan un rol fundamental en este contexto. Un nombre (identificador) no es ms que un secuencia de caracteres (posiblemente con algn significado) que sirve para representar alguna otra cosa.

La manipulacin de nombres requiere de reglas que garanticen la correcta interpretacin de esos nombres en el programa. El concepto de entorno (ambiente) y las construcciones que se usan para organizarlo son importantes para este fin. Cuando se declara una nueva variable: i n t var ; o se define una nueva funcin: i n t foo (){ var = 1; } Se introducen nuevos identificadores para representar objetos (en sentido amplio, no en sentido de la POO); por ejemplo var representa una variable y foo una funcin. La secuencia de caracteres var se puede usar cuando se desee hacer referencia a la nueva variable, de igual forma, foo permite llamar a la funcin que asigna a var el valor 1. Los objetos a los que se les puede dar un nombre se conocen como objetos de notables. An cuando existen diferencias considerables entre lenguajes de programacin, los siguientes son ejemplos comunes de objetos de notables: Objetos cuyos nombres son definidos por el usuario: variables, parmetros, procedimientos (en sentido amplio), tipos definidos por el usuario, mdulos, etiquetas, constantes definidas por el usuario, excepciones. Objetos cuyos nombres son definidos por el lenguaje de programacin: tipos primitivos, operaciones primitivas, contantes predefinidas. La asociacin (enlazado) entre un nombre y el objeto que denota, puede hacerse en diferentes momentos: Definicin del lenguaje: por ejemplo, + indica adicin; int denota el tipo entero, etc. Escritura del programa: el programador elige los nombres que usar en sus cdigos. Tiempo de compilacin: el compilador al traducir el cdigo fuente en cdigo mquina, reserva espacio en memoria para datos que pueden ser procesados estticamente. Tiempo de ejecucin: este trmino denota el periodo entre el inicio y trmino del programa; todas las asociaciones que no se han realizado previamente, se realizan en este periodo.

1.3.1. ENTORNOS
No todas las asociaciones entre nombres y objetos de notables se fijan desde el inicio de la ejecucin del programa, para entender cmo se comportan algunas asociaciones, es necesario introducir el concepto de entorno. Un entorno es un conjunto de asociaciones entre nombres y objetos de notables que existen en tiempo de ejecucin en un punto especfico en el programa y en un tiempo especfico de la ejecucin; tambin suele llamarse entorno referenciable. La presencia de entornos constituye una de las caractersticas principales de lenguajes de alto nivel y que debe ser simulado de forma adecuada por cada implementacin. Una declaracin es una construccin que permite la introduccin de una asociacin en

el entorno. Los lenguajes de alto nivel comnmente incluyen declaraciones explcitas, como: intx; i n t f (){ return 0; } type T = int ; la primera es la declaracin de una variable, la segunda una funcin y la tercera, declara un tipo T que coincide con el tipo bsico int.

1.3.2. BLOQUES
Casi todos los lenguajes de programacin actuales permiten el uso de bloques, un mtodo para estructurar programas introducido en ALGOL60; los bloques son fundamentales para organizar entornos. Un bloque es una regin textual del programa identificada por una seal de inicio y una seal de fin, y que puede contener declaraciones locales a esa regin (es decir, que aparecen dentro de esa regin). Las seales de inicio y fin varan de acuerdo al lenguaje de programacin. Existen dos tipos principales de bloques: Bloque asociado a un procedimiento: es un tipo de bloque asociado con declaraciones locales a algn procedimiento; incluye el cuerpo del procedimiento junto con la declaracin de parmetros. Bloque in-line: este bloque no se asocia con procedimientos y puede aparecer en cualquier posicin en la que se puede colocar algn comando.

1.3.3. TIPOS DE ENTORNOS


El entorno cambia durante la ejecucin de un programa; sin embargo, los cambios suceden generalmente en dos momentos precisos: al entrar y salir del bloque. Por tanto, el bloque se puede considerar como una construccin de mnima granularidad que tiene un entorno constante asociado. El entorno de un bloque; es decir, el entorno que existe cuando el bloque se ejecuta; se compone inicialmente de las asociaciones entre los nombre declarados localmente dentro del mismo bloque. La mayora de los lenguajes de programacin permiten tener bloques anidados: definir bloques dentro de otros bloques. El traslape de bloques en el que algn bloque interno se cierra despus de algn bloque externo no est permitido; por ejemplo, secuencias de instrucciones como las siguientes no se permiten en ningn lenguaje: open block A; open block B; c l o s e block A; c l o s e block B; El anidamiento de bloques es un mecanismo importante para estructurar el entorno. Es comn que se permita que las declaraciones locales a un bloque sean visibles a otros bloques internos.

El ambiente asociado con un bloque se conforma de los siguientes componentes: Entorno local: compuesto por el conjunto de asociaciones para nombres declarados localmente en el bloque. Cuando se trata del bloque de un procedimiento, el ambiente local contiene tambin las asociaciones de los parmetros. Ambiente no local: es el entorno formado por las asociaciones de nombre que son visibles dentro del bloque, pero que no se declararon localmente. Entorno global: Es el ambiente que se forma cuando inicia la ejecucin del programa; contiene a las asociaciones de nombres que se pueden utilizar en todos los bloques del programa. Ejercicio: Determinar los tipos de entornos para cada bloque en el siguiente cdigo; para facilitar, se asume que los bloques pueden etiquetarse y las etiquetas no modifican la ejecucin: A:{ int a = 1; B:{ int b = 2; i n t c = 2; C:{ int c = 3; intd; d = a+b+c; } D:{ int e ; e = a+b+c; } } } Las reglas de visibilidad especifican como los nombres declarados en bloques externos son visibles para los internos. En algunos casos es posible importar nombres desde otros mdulos; las asociaciones para estos nombres forman parte del entorno global. Las reglas de visibilidad permiten solamente heredar nombres declarados en bloques exteriores hacia bloques internos pero no en el otro sentido.

1.3.3.1. OPERACIONES SOBRE ENTORNOS


Como se mencion anteriormente, los cambios en el entorno se producen al entrar y salir de un bloque. Durante la ejecucin de un programa, cuando ste entra en un bloque, se llevan a cabo las siguientes modificaciones al ambiente: 1. Se crean las asociaciones entre los nombres declarados localmente y sus correspondientes objetos de notables. 2. Se desactivan las asociaciones entre nombres declarados de forma externa al bloque y que son redefinidos dentro del mismo. As mismo, cuando el programa sale del bloque, el entorno se modifica de la siguiente manera: 1. Se destruyen las asociaciones entre los nombres declarados dentro del bloque y los objetos que denotan.

2. Se reactivan las asociaciones entre nombres declarados fuera del bloque y que fueron redefinidas dentro del mismo. Ejercicio-tarea: Determinar los entornos y los valores de las variables dentro de cada bloque en los siguientes cdigos: 1. i n t a = 1; foo1 ( int b){ i n t c = 3; { int a = 4; { int d; d = a+b+c; } } i n t e = a+b+c ; } foo2 ( int b){ b = 2; { int c = 3; { int d; d = a+b+c; } } } main ( ){ foo1 ( 5 ) ; foo2 ( 5 ) ; } 2.: A:{ int a = 1; B:{ int b = 2; i n t c = 2; C:{ int c = 3; intd; d = a+b+c; } D:{ int e ; e = a+b+c; } } }
http://dicyg.fi-c.unam.mx:8080/lalo/lp-teo/presentaciones/Tema1.pdf