You are on page 1of 10

Captulo 1

Fundamentos generales de los lenguajes


de programacin
Objetivo
El alumno explicar las caractersticas y elementos fundamentales de los lenguajes (1671)

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 Computing Engine (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)1 .
1

Originalmente fue descrito por el matemtico hind Pngala (http://bit.ly/Nnn0Bw)

CAPTULO 1. FUNDAMENTOS GENERALES DE LOS LENGUAJES DE PROGRAMACIN 2

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.

CAPTULO 1. FUNDAMENTOS GENERALES DE LOS LENGUAJES DE PROGRAMACIN 3


} 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 paso 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 (V erdadero F also).

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.

CAPTULO 1. FUNDAMENTOS GENERALES DE LOS LENGUAJES DE PROGRAMACIN 4

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.

CAPTULO 1. FUNDAMENTOS GENERALES DE LOS LENGUAJES DE PROGRAMACIN 5

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 nos 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 f ibonacci (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

CAPTULO 1. FUNDAMENTOS GENERALES DE LOS LENGUAJES DE PROGRAMACIN 6

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:
int 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 f oo una funcin. La secuencia de caracteres
var se puede usar cuando se desee hacer referencia a la nueva variable, de igual forma, f oo 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 denotables. An
cuando existen diferencias considerables entre lenguajes de programacin, los siguientes son ejemplos comnes de objetos denotables:
} 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 denotables se fijan desde el inicio de la
ejecucin del programa, para entender cmo se comportan algunas asociaciones, es necesario
introducir el concepto de entorno.

CAPTULO 1. FUNDAMENTOS GENERALES DE LOS LENGUAJES DE PROGRAMACIN 7


Un entorno es un conjunto de asociaciones entre nombres y objetos denotables 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:
int x ;
int f (){
return 0;
}
type T = i n t ;
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:

CAPTULO 1. FUNDAMENTOS GENERALES DE LOS LENGUAJES DE PROGRAMACIN 8


open b l o c k A;
open b l o c k B ;
c l o s e b l o c k 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: { i n t a = 1 ;
B: { i n t b = 2 ;
int c = 2;
C: { i n t c = 3 ;
int d;
d = a+b+c ;
}
D: { i n t 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 ejecicn de un programa, cuando ste entra en un bloque, se llevan a cabo las
siguientes modificaciones al ambiente:

CAPTULO 1. FUNDAMENTOS GENERALES DE LOS LENGUAJES DE PROGRAMACIN 9


1. Se crean las asociaciones entre los nombres declarados localmente y sus correspondientes
objetos denotables.
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 asocuaciones 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. :
int a = 1;
foo1 ( i n t b){
int c = 3;
{ int a = 4;
{ int d;
d = a+b+c ;
}
}
i n t e = a+b+c ;
}
foo2 ( i n t b){
b = 2;
{ int c = 3;
{ int d;
d = a+b+c ;
}
}
}
main ( ) {
foo1 ( 5 ) ;
foo2 ( 5 ) ;
}

CAPTULO 1. FUNDAMENTOS GENERALES DE LOS LENGUAJES DE PROGRAMACIN 10


2. :
A: { i n t a = 1 ;
B: { i n t b = 2 ;
int c = 2;
C: { i n t c = 3 ;
int d;
d = a+b+c ;
}
D: { i n t e ;
e = a+b+c ;
}
}
}

You might also like