Sie sind auf Seite 1von 68

Ciencias de la Computacin y

Programacin
Licenciatura en Fsica Departamento
de Fsica ECEN
Computacin y Clculo Numrico
Turner, P.A.
Adaptacion: Walter Ruiz

Objetivos (I)
Que al final del curso el estudiante sea capaz de:
Ubicar la importancia de la programacin en la ingeniera
del software
Explicar el proceso de construccin de un programa
Disear algoritmos para resolver problemas simples
Disear y construir programas modulares bajo el enfoque
de la programacin estructurada utilizando eficazmente y
eficientemente un entorno de desarrollo convencional
Conocer el papel de las etapas de anlisis, diseo y
programacin en el desarrollo estructurado del software

Resolucin de problemas y los


algoritmos
Concepto de algoritmo
Propiedades de un algoritmo
El rol del algoritmo en la resolucin de
problemas

Concepto de algoritmo (I)


Un algoritmo es un procedimiento para resolver un problema.
ste describe un conjunto finito y ordenado de pasos, reglas o
instrucciones para producir la solucin a un problema dado.
Un algoritmo puede ser definido como una secuencia de
instrucciones bien definidas y efectivas, y finaliza con la
produccin del resultado esperado a partir de las entradas
dadas.
Es un procedimiento computacional bien definido que toma un
conjunto de valores como entrada y produce otro conjunto de
valores como salida

Concepto de algoritmo (II)

Algoritmo

Especificacin
de las entradas

Accin o
procedimiento

Accin o
procedimiento

...

Accin o
procedimiento

Accin o
procedimiento

Descripcin
del resultado o
efecto

Aspectos que se deben considerar a la hora


de escribir un algoritmo

Determinacin de las Acciones primitivas de las que se


parte
Lenguaje simblico a utilizar para desarrollar el algoritmo
Representacin de los datos
Establecer datos de entrada
Establecer datos de salida
Establecer las relaciones entre los datos de entrada y los
de salida

Primer ejemplo de algoritmo


El siguiente algoritmo para calcular el rea Total y el volumen de un
tanque cilndrico
Datos de entrada: diametro y altura
Datos de salida: area y volumen
Procesos: area = 3,14159*diametro*(diametro/2+altura)
volumen= 3,14159*diametro^2*altura/4
1.
2.
3.
4.
5.
6.
7.

Inicio
Leer dimetro y altura
area<- 3.14159*diametro*(diametro/2+altura)
volumen<-3.14159*diametro^2*altura/4
Escribir rea del tanque: , area
Escribir volumen : , volumen
Fin

Anlisis
resumido
del
problema

Caractersticas de los algoritmos (I)


Son precisos. Deben indicar el orden de realizacin de cada
paso, as como especificar con precisin las entradas y cada
paso o etapa
Estn bien definidos. Etapas bien definidas y concretas
Exactitud y correccin. Se debe demostrar que el algoritmo
resuelve el problema para el cual fue escrito
Son finitos. Deben tener un nmero finito de pasos y deben
terminar
Deben describir el resultado o efecto final. La salida
esperada del algoritmo debe estar completamente especificada.
Diferencias entre un algoritmo y un programa: Los algoritmos
no son directamente interpretables por el computador =>
deben ser traducidos a un lenguaje de programacin
concreto

Caractersticas de los algoritmos (II)


Partes que debe describir la definicin de un algoritmo:
Entrada
Proceso
Salida

Entrada

Proceso

Salida

Caractersticas de los algoritmos (III)

Son independientes tanto del lenguaje de programacin


en el que se expresan como del hardware en que se
ejecutan los programas
Expresado
en

Cdigo en C

Ejecutado
en
Computadora con
los compiladores
de C y Basic

Algoritmo

Cdigo en
Basic
Cdigo en
Fortran

Computadora con el
compilador de
Fortran

El rol del algoritmo en la resolucin de


problemas (I)
La resolucin de un problema en computadora requiere como
paso previo el diseo de un algoritmo que especifique el
procedimiento para resolver el problema. Es decir, antes de
codificar un programa se requiere disear el algoritmo.

Descripcin y
anlisis del
problema

Diseo del
algoritmo

Programa en un
lenguaje de
programacin

Ejemplo de algoritmo (i.0)


Definicin del problema
Ir al trabajo
Anlisis del problema
Acciones a considerar:
1.Levantarse,
2.Darse una ducha,
3.Vestirse,
4. Desayunar y
5.Tomar Transporte

Ejemplos de algoritmos (I.a.)


Definicin del problema
Calcular los porcentajes de hombres y mujeres en un grupo de N
Estudiantes de Actividad Acreditable PNF en Electrnica
Anlisis del problema
Datos a considerar:
1.
2.
3.
4.
5.
6.

Sexo de la persona (S)


Nmero de personas del sexo masculino (CM)
Nmero de personas del sexo femenino (CF)
Total de Estudiantes (N)
Porcentaje de hombres (PM)
Porcentaje de mujeres (PF)

Ejemplos de algoritmos (I.b.)


Datos de entrada:

Total de estudiantes (N)


Sexo de la persona (S)

Datos de salida:

Continuacin del
anlisis del problema

Porcentaje de hombres (PM)


Porcentaje de mujeres (PF)

Procesos:

Contar la cantidad de personas del sexo masculino (CM = CM + 1)


Contar la cantidad de personas del sexo femenino (CF = CF + 1)
Calcular el porcentaje de hombres en el grupo (PM = CM/N*100)
Calcular el porcentaje de mujeres en el grupo (PF = CF/N*100)

Ejemplos de algoritmos (I.c.)


Algoritmo:
1.
2.
3.
4.
5.
6.

Inicio
Inicializar en cero el total de personas del sexo masculino: CM
0
Inicializar en cero el total de personas del sexo femenino: CF 0
Inicializar en cero el total de personas procesadas: TP 0
Leer total de Estudiantes (N)
MIENTRAS TP < N
6.1 Leer sexo de la persona (S)
6.2 SI S =M, entonces CM CM + 1
6.3 SI S = F, entonces CF CF + 1
6.4 Incrementar en 1 el contador: TP TP + 1
FIN-MIENTRAS

Ejemplos de algoritmos (I.d.)


Algoritmo (continuacin):
7.
8.
9.
10.
11.

Calcular porcentaje de hombres en el grupo: PM CM/N*100


Calcular porcentaje de mujeres en el grupo: PF CF/N*100
Escribir Porcentaje de hombres en el grupo: , PM
Escribir Porcentaje de mujeres en el grupo: , PF
Fin
En este algoritmo se puede apreciar el uso de las tres
estructuras de control de la programacin estructurada:

Estructura secuencial

Estructura selectiva

Estructura iterativa

Ejemplos de algoritmos (II)

1.
2.
3.
4.
5.

Clculo de la media de N observaciones numricas


Determinar si un nmero es primo dada una lista de N
nmeros enteros
Clculo del factorial de un nmero N
Retiro de efectivo en un cajero automtico
Receta para preparar spaghetti alla napoletana

Definir en cada caso: entrada, procesos/operaciones y salida.


Escribir el algoritmo completo para todos los casos.

Diseo de algoritmos (I)

Diseo del
algoritmo

Diseo
descendente

Refinamiento

Representacin
grfica

Diseo de algoritmos (II)


Diseo descendente (I)
El diseo descendente (top down) es un procedimiento de
refinamiento iterativo de un problema, en el cual se parte del
mayor nivel de abstraccin del problema (sistema o tarea) y
se prosigue hacia los niveles inferiores a travs de un proceso
de descomposicin del problema en subproblemas.
En el diseo descendente se parte de una visin estructural
del problema sin especificar detalles para ninguna de sus
partes componentes. Cada componente del sistema es
entonces refinado, mostrando ms detalles en cada nivel de
refinamiento.

Diseo de algoritmos (III)


Diseo descendente (II)
Problema

Subproblema

Subproblema

Subproblema

Subproblema

Subproblema

Subproblema

Subproblema

Subproblema

Subproblema

...

Subproblema

Subproblema

Subproblema

Diseo de algoritmos (IV)


Diseo descendente (III)
El diseo descendente efecta una relacin entre las
sucesivas etapas de refinamiento, de forma tal que stas se
relacionen unas con otras a travs de los flujos de entrada y
de salida de informacin.
X

U
X

P1

P2

P4

P3

P31

P32

P33

Diseo de algoritmos (V)


Diseo descendente (IV)
Ejemplo: el problema del cajero automtico
Cajero
automtico

Lectura y
validacin
del Clave

Seleccin de
tipo de
cuenta

Consulta de
saldo

Retiro de
efectivo

Seleccin de
tipo de
operacin

Traspaso
entre cuentas
propias

...

...

Finalizar

Pago de
servicios

Diseo de algoritmos (VI)


Refinamiento del algoritmo (I)
Comnmente, la primera versin de un algoritmo no
constituye una versin completa ni especfica del mismo. El
refinamiento del algoritmo se refiere a la conversin del
primer esbozo/versin del algoritmo en una versin ms
detallada y completa, haciendo los pasos del algoritmo ms
especficos. Este proceso conduce a la obtencin de un
algoritmo claro, preciso y completo.

Diseo de algoritmos (VII)


Refinamiento del algoritmo (II)
Algoritmo para el clculo de la media de la edad de un grupo de
estudiantes (primer esbozo)
1. Inicio
2. Leer cantidad de estudiantes
3. Leer edad de estudiantes
4. Calcular la edad promedio del grupo (la media)
5. Escribir resultados

Diseo de algoritmos (VIII)


Refinamiento del algoritmo (III)
Algoritmo para el clculo de la media de la edad de un grupo de
estudiantes (versin refinada)
1. Inicio
2.

Leer cantidad de estudiantes (N)

3.

NE 0, SE 0

4.

MIENTRAS NE < N
4.1 Leer edad del estudiante (E)
4.2 SE SE + E
4.4 Incrementar el contador: NE NE + 1
FIN-MIENTRAS

Diseo de algoritmos (IX)


Refinamiento del algoritmo (IV)
Algoritmo para el clculo de la media y desviacin estndar de la edad y
peso de un grupo de estudiantes (versin refinada)
5.

Calcular la media de la edad: ME SE/N

6.

Escribir La edad promedio es: , ME

7. Fin

Diseo de algoritmos (X)


Especificacin y representacin grfica del
algoritmo
Pseudocdigo
Diagramas de flujo

Diseo de algoritmos (XI)


Especificacin del algoritmo: pseudocdigo (I)
El pseudocdigo es un lenguaje de especificacin de
algoritmos, comnmente con una sintaxis para las estructuras
de control similar a la expresada en el lenguaje de
programacin al que ser traducido el algoritmo. Cuando un
algoritmo es expresado en pseudocdigo, entonces la
traduccin de ste al lenguaje de programacin seleccionado
resultar relativamente fcil.
Algoritmo

Especificacin
en
pseudocdigo

Programa

Diseo de algoritmos (XII)


Especificacin del algoritmo: pseudocdigo (II)
Las acciones y las estructuras de control se representan en el
pseudocdigo con palabras reservadas del ingls, similares a las utilizadas
en los lenguajes de programacin estructurada. Entre estas palabras
reservadas, las ms usadas son:
start
read
write
If-then-else
while-end
repeat-until
end

Comnmente, la
escritura del
pseudocdigo
requiere el uso de la
indentacin de las
diferentes lneas

Diseo de algoritmos (XIII)


Algoritmo para calculos del rea Total y el volumen de un
Tanque cilndrico, realizado con PSeInt
Proceso Calculos_Tanque_Cilindrico
Escribir "Ingrese diametro del cilindro:";
Leer diametro
Escribir "Ingrese altura del cilindro:";
Leer altura
area<-3.14159*diametro*(altura+diametro/2)
volumen<-3.14159*diametro^2*altura/4
Escribir "el volumen del cilindro es... ",volumen;
Escribir "el area del cilindro es... ",area;
FinProceso

Diseo de algoritmos (XIV)


Algoritmo para encender y apagar un led con un retardo de un segundo
Proceso Led_Intermitennte
t<-1
Salida<-Pin13
Mientras (t=1) Hacer
Led<-1;
Escribir "Poner Led en Nivel Alto:",Led
Esperar 1 Segundo
Led<-0;
Escribir "Poner Led en Nivel Bajo:",Led
Esperar 1 Segundo
Fin Mientras
FinProceso
realizado con PSeInt

Cuando se usa el
pseudocdigo como
lenguaje de
especificacin de un
algoritmo, el
programador puede
concentrarse en la
lgica y en las
estructuras de control
sin preocuparse por
la sintaxis y reglas
del lenguaje de
programacin.

Diseo de algoritmos (XV)


Representacin grfica del algoritmo:
diagramas de flujo (I)
Un diagrama de flujo (flowchart, del ingls) es una tcnica de
representacin grfica de la lgica o pasos de un algoritmo. El diagrama
de flujo consiste de un conjunto de smbolos (tales como rectngulos,
paralelogramos, rombos, etc.) y flechas que conectan estos smbolos.
Los smbolos representan las diferentes acciones que se pueden
ejecutar en un algoritmo (lectura, asignacin, decisin, escritura, etc.),
mientras que las flechas muestran la progresin paso a paso a travs
del algoritmo.
Con la aparicin de los lenguajes de programacin estructurada el uso
de los diagramas de flujo ha disminudo considerablemente, dando
paso a otras tcnicas de representacin (como por ejemplo, diagramas
N-S, tablas procesos-entidades, diagramas estructurales, diagramas de
burbujas, etc. ) que capturan en un modo ms adecuado la esencia y
principios de la programacin estructurada.

Diseo de algoritmos (XVI)


Representacin grfica del algoritmo:
diagramas de flujo (II)
Smbolo

Representacin

Significado

Flechas o lneas de flujo

Indica el sentido de
ejecucin de las acciones

Rectngulo

Proceso o accin a realizar


(por ejemplo, asignacin)

Paralelogramo

Representa una entrada o


salida

Rombo

Si

Condicion
Verdadera ?

No

Rectngulo redondeado
Crculo

Representa el constructor de
seleccin (decisin lgica)
Representa el inicio y fin del
diagrama

Misma
hoja

Otra
hoja

Se usa como conector entre


dos partes del diagrama

Diseo de algoritmos (XVII)


Estructuras de Control Selectivas
If (Si): Si la Condicin es Verdadera, se ejecuta la Accin, sino el
algoritmo continua con su ejecucin.

Condici
n
Verdader
a?

Si
Accin

No

Si < Condicin >


<Accin>
Fin_Si

Diseo de algoritmos (XVIII)


Estructuras de Control Selectivas
If-else (SiSino): Si la Condicin es Verdadera, se ejecuta la
Accin 1, sino el algoritmo ejecuta la Accin 2. Luego el algoritmo
continua con su ejecucin.

Condici
n
Verdader
a?

No

Si < Condicin >


< Accin 1 >
Sino < Accin 2 >

Si
Accin 1

Accin 2

Fin_Si

Diseo de algoritmos (XIX)


Estructuras de Control Selectivas
if...else if (SiSinoS)i: Si la Condicin 1 es Verdadera, se
ejecuta la Accin 1, sino el algoritmo evala la Condicin 2. Si es
Verdadera, ejecuta la Accin 2 y sino la Accin 3.

Cond. 1
Verdader
a?

No

Si
Si

Cond. 2
Verdader
a?

< Condicin 1 >


< Accin 1 >
Sino_Si < Condicin 2 >
< Accin 2 >
Sino
< Accin 3 >

No

Accin 1

Si
Accin 2

Accin 3

Fin_Si

Diseo de algoritmos (XX)


Estructuras de Control Selectivas
switch / case (Segn-alternativa mltiple): Se evala una condicin o
expresin que puede tomar n valores. Segn el valor que la expresin
tenga en cada momento se ejecutan las acciones correspondientes al
valor. El valor con el que se compara la expresin, va a depender de los
lenguajes, de lo que sea ese valor. En general ese valor puede ser un
valor constante, un rango de valores o incluso otra condicin.
Expresi
no
Condici
n

Accin 1

Accin 2

Segn <expresin>
< Valor 1 >: < Accin 1 >
< Valor 2 >: < Accin 2 >
< Otro >: < Acciones >

Accin n

Fin_Segn

Diseo de algoritmos (XXI)


Estructuras de Control Repetitivas
While (Mientras): Se evala la Condicin. Si es Verdadera, se ejecuta la Accin y
se evala nuevamente la Condicin. En el momento en el que la Condicin sea
Falsa se sale del bucle y se continua con la ejecucin del algoritmo. Al evaluarse
la Condicin, al principio, antes de entrar en el bucle, si la condicin es Falsa,
nunca se entrar en el bucle. Por lo tanto se utiliza obligatoriamente este tipo de
bucle en el caso de que exista la posibilidad de que el bucle pueda ejecutarse 0
veces.
Condici
n
Verdader
a?

Si
Accin

No

Mientras < Condicin >


< Accin >
Fin_Mientras

Diseo de algoritmos (XXII)


Estructuras de Control Repetitivas
do... while (Hacer- Mientras): En primera instancia se ejecuta la Accin.
Posteriormente, se evala la Condicin. Si es Verdadera, se ejecuta nuevamente
la Accin. Si es Falsa, se contina con la ejecucin del algoritmo. Se repite el
bucle mientras la condicin sea Verdadera. La Condicin se evala siempre al
final del bucle, si es Verdadera se ejecuta nuevamente la Accin, si es Falsa se
sale del bucle. Como la Condicin se evala al final, incluso aunque la primera
vez ya sea Falsa, el bucle (la Accin) se habr ejecutado al menos una vez.
Hacer
< Accin >
Mientras < Condicin >

Accin

Condici
n
Verdader
a?

Si

No

Diseo de algoritmos (XXIII)


Estructuras de Control Repetitivas
For (DesdeHasta): Se utiliza cuando se sabe el nmero exacto de veces que
hay que iterar. Para ello el bucle llevar asociado una variable ndice, a la que
se le asigna un valor inicial y se determina cual va a ser su valor final y adems
se va a incrementar (o decrementar) en cada iteracin de bucle en un valor
constante.
Inicio

Variable = Inicio ; Condicin? ; Inc.


n
Si

Accin

No
Condici
n
Verdader
a?

Si
Accin

Para variable = Vi, variable < Vf, Inc n


<Accin>
Fin_Para

Accin 2

No

Diseo de algoritmos (XXIV)


Representacin
grfica del
algoritmo: Diagrama
de flujo para clcular
el rea total y el
volumen de un Tanque
cilndrico, realizado
con Software PSeInt

Diseo de algoritmos (XXV)


Representacin grfica del algoritmo:
Diagrama de flujo Led Intermitente.

para el encendido y apagado de un


led con un retardo de 1 segundo,
usando el PIN 13 como salida.
Antes de comenzar a escribir el
programa, se realiza la asignacin de
pines para las entradas y las salidas,
y se plantea la solucin mediante un
diagrama de flujo.

Diseo de algoritmos (XXVI)


Representacin
grfica del
algoritmo:
Diagrama de flujo
para Led
Intermitente.
realizado con
Software PSeInt

De los algoritmos a los programas (I)


Elementos, estructura y funcionamiento de un
sistema de cmputo
Lenguajes de programacin: niveles, sintaxis y
semntica
Estrategias de contruccin de programas

De los algoritmos a los programas (II)


La plaraforma Arduino cuenta con
dos funciones obligatoriamente :
void setup() y void loop().
void setup() es la primera funcin en
ejecutarse dentro de un programa en
Arduino. Es, bsicamente, donde se
setean las funciones que llevar a
cabo el microcontrolador.
void loop() Loop en ingls significa lazo
o bucle. La funcin loop en Arduino es la
que se ejecuta un nmero infinito de
veces. Al energizaese el Arduino se
ejecuta el cdigo del setup y luego se
entra al loop, el cual se repite de forma
indefinida hasta que se apague o se
reinicie el microcontrolador.

Lenguajes de programacin: niveles,


sintaxis y semntica (I)
Niveles de lenguajes de programacin (I)

Lenguajes declarativos

Lenguajes de alto nivel

Lenguajes
ensambladores
Lenguajes de mquina

Lenguajes de programacin: niveles,


sintaxis y semntica (II)
Niveles de lenguajes de programacin (II)
Lenguajes de mquina
Fue el primer lenguaje utilizado en la programacin de computadoras.
Constituye la capa ms interna en los niveles de lenguaje en la
computacin. Se podra decir que el lenguaje de mquina es el nico que
entiende directamente la computadora. Este lenguaje se expresa a travs
del alfabeto binario, el cual consta solo de los smbolos 0 y 1. El lenguaje de
mquina es dependiente de la computadora.

Lenguajes ensambladores
El lenguaje ensamblador es una representacin simblica del lenguaje de
mquina asociado. Es decir, cada computadora tiene un lenguaje
ensamblador propio. El lenguaje ensamblador usa palabras nemotcnicas
para representar cada instruccin (cadenas de bits) del lenguaje de
mquina asociado.

Lenguajes de programacin: niveles,


sintaxis y semntica (III)
Niveles de lenguajes de programacin (III)
Lenguajes de alto nivel
Constituyen los lenguajes de programacin ms utilizados. Son lenguajes
independientes de la computadora. Un programa escrito en lenguaje de alto
nivel puede ser ejecutado en cualquier computadora, siempre que sta
disponga del traductor o compilador del lenguaje en cuestin. Los
programas pueden ser escritos y comprendidos de una forma ms sencilla,
dada la aproximacin de estos lenguajes con el lenguaje natural. Se
caracterizan por proporcionar libreras de uso frecuente (entrada/salida,
funciones matemticas, manejo de cadenas, etc.). Ejemplos de estos
lenguajes son: Pascal, Fortran, C, C++, Java, Ada, Lisp y Prolog.

Lenguajes declarativos
Son aquellos lenguajes en los que se indica a la computadora qu es lo que
debe hacer, qu es lo que se desea obtener o qu es lo que se est
buscando. Son comnmente lenguajes de rdenes, donde se expresa lo
que hay que hacer en lugar de cmo hacerlo. Ejemplos de lenguajes
declarativos son SQL y Prolog.

Lenguajes de programacin: niveles,


sintaxis y semntica (IV)

Lenguaje de programacin =
Lxico + Sintaxis + Semntica

Lenguajes de programacin: niveles,


sintaxis y semntica (V)
Aspectos a considerar en el diseo e implementacin de los
lenguajes de programacin (I)

Lxico
Sintaxis
Semntica
Gestin de memoria
Manejo de excepciones
Implementacin
Pragmtica

Lenguajes de programacin: niveles,


sintaxis y semntica (VI)
Aspectos a considerar en el diseo e implementacin de los
lenguajes de programacin (II)
Lxico
Es el conjunto de categoras gramaticales que definen el vocabulario del
lenguaje de programacin. Comnmente, el lxico de un lenguaje de
programacin posee las siguientes categoras gramaticales:
Identifier (nombre de variables, nombre de constantes, nombre de
funciones, etc.)
Literal (nmeros enteros y decimales)
Operator (+, -, *, /. etc.)
Separator (; . , etc.)
Keyword (while, read, write, if, for, case, int, real, etc.)

Lenguajes de programacin: niveles,


sintaxis y semntica (VII)
Aspectos a considerar en el diseo e implementacin de los
lenguajes de programacin (III)
Sintaxis
La sintaxis de un lenguaje de programacin es la definicin gramatical de
lo que constituye un programa en dicho lenguaje. La sintaxis se especifica
en trminos de un conjunto de reglas que rigen la construccin de los
programas. La definicin de la sintaxis de un lenguaje de programacin
debe ser clara, concisa y formal. La sintaxis del lenguaje de programacin
se describe a partir de otros lenguajes, llamados metalenguajes. Uno de
los metalenguajes ms difundidos es el formalismo BNF (Backus-Naur
Form), una gramtica libre de contexto.

Lenguajes de programacin: niveles,


sintaxis y semntica (VIII)
Aspectos a considerar en el diseo e implementacin de los
lenguajes de programacin (IV)
Semntica
Se refiere al significado de los programas. Es el conjunto de reglas que
permiten determinar el significado de cualquier construccin del lenguaje.
La semntica asocia un significado a cada posible construccin gramatical
del lenguaje.
Gestin de memoria
La gestin de memoria se refiere al proceso de asignar valores a la
memoria, considerando tanto las caractersticas estticas como dinmicas
de dichos valores. Los valores pueden ser asignados a una de tres
categoras de memoria: memoria esttica, la pila en tiempo de ejecucin y
el montculo.

Lenguajes de programacin: niveles,


sintaxis y semntica (X)
Aspectos a considerar en el diseo e implementacin de los
lenguajes de programacin (VI)
Implementacin
Cmo se ejecutan los programas.

Pragmtica
Se refiere a los aspectos prcticos del uso de los programas.

Lenguajes de programacin: niveles,


sintaxis y semntica (XI)
Lenguaje natural
Aplicacin
Lenguaje de programacin
Compilador/Intrprete

Contexto en el
que se ubican
los lenguajes de
programacin

Mquina virtual
Sistema operativo
Lenguaje
de mquina

Lenguajes de programacin: traductores de


lenguajes (I)

Traductores de
lenguaje

Intrpretes

Compiladores

Un traductor de lenguaje es un programa que traduce a cdigo de


mquina un programa fuente escrito en un lenguaje de alto nivel.

Lenguajes de programacin: traductores de


lenguajes (II)
Intrpretes
Un intrprete es un traductor que recibe como entrada un programa
fuente, lo traduce y lo ejecuta. Un intrprete traduce y ejecuta una
instruccin en cdigo fuente, a la vez. Los programas interpretados
generalmente son ms lentos en ejecucin que los programas compilados.

Programa fuente

Intrprete

Traduccin y
ejecucin lnea
a lnea

Lenguajes de programacin: traductores de


lenguajes (III)
Compiladores
Un compilador traduce un programa fuente escrito en lenguaje de alto
nivel al lenguaje de mquina de la computadora. El programa traducido a
lenguaje de mquina es almacenado como cdigo objeto.

Programa fuente

Compilador

Programa objeto

Lenguajes de programacin: traductores de


lenguajes (IV)
Fases de la compilacin de un programa
Programa
fuente

Analizador
lxico

Compilador

Analizador
sintctico

Programa
objeto

Analizador
semntico

Linker

Generador
de cdigo
intermedio

Optimizador
de cdigo

Programa
ejecutable
en lenguaje
de mquina

Generador
de cdigo
objeto

Paradigmas de programacin (I)

Programacin imperativa
Programacin funcional
Programacin lgica
Programacin orientada a objetos
Programacin concurrente
Programacin guiada por eventos

Paradigmas de programacin (II)


Programacin imperativa
El programa se define como una serie de acciones o pasos, cada uno de
los cuales recibe una entrada, ejecuta un clculo, o produce como
resultado una salida. La programacin imperativa se basa en la asignacin
de valores, en la utilizacin de variables para almacenar valores y en la
realizacin de operaciones con estos valores almacenados. Ejemplos de
lenguajes de programacin imperativa son los lenguajes de alto nivel
(Fortran, C, Basic, etc.) y los lenguajes ensambladores.
Programacin funcional
Los programas estn formados por una coleccin de definiciones de
funciones. Las funciones interactan entre s utilizando condicionales,
recursividad y composicin funcional. Ejemplos de lenguajes de
programacin funcional son Lisp y Scheme.

Paradigmas de programacin (III)


Programacin lgica
Un lenguaje de programacin lgica es un tipo de lenguaje declarativo, en
el cual el programa est formado por un conjunto de declaraciones lgicas
(predicados, hechos). La ejecucin de un programa consiste en aplicar
estas declaraciones para obtener todas las soluciones posibles a un
problema. El ejemplo clsico de lenguaje de programacin lgica es
Prolog.
Programacin orientada a objetos
El programa es una coleccin de objetos que interactan entre s a travs
del paso de mensajes, los cuales comnmente transforman el estado de
los objetos. Ejemplos de lenguajes orientados a objetos son Smalltalk, C+
+, Eiffel y Java.

Paradigmas de programacin (IV)


Programacin concurrente
La programacin se basa en la ejecucin simultnea de procesos, ya sea
en una misma computadora con uno o varios procesadores, que en un
cluster de computadoras. El programa se define como una coleccin de
procesos cooperativos y asncronos. Ejemplos de lenguajes concurrentes
son Linda y Fortran de alto rendimiento.
Programacin guiada por eventos
El programa responde a eventos externos generados en un orden no
predecible. Los eventos comnmente se generan a partir de acciones del
usuario en la pantalla (por ejemplo, clics del mouse o pulsaciones de
teclas), pudiendo existir tambin otras fuentes generadoras de eventos.
Ejemplos de lenguajes de programacin guida por eventos son Visual
Basic y Java.

Estrategias de construccin de
programas (I)
Fases de construccin de un programa
Descripcin y
anlisis del
problema
Diseo del
algoritmo
Codificacin
del programa
Ejecucin del
programa
Validacin del
programa

Estrategias de construccin de
programas (II)
Programacin modular (I)
La filosofa subyacente de la programacin modular es la descomposicin
del programa en mdulos independientes, cada uno de los cuales ejecuta
una nica actividad o funcin. Cada mdulo se analiza, se disea, se
codifica y se verifica por separado. El programa es una jerarqua de
mdulos, con un mdulo principal (tambin llamado programa principal) con
una funcin de controlador. El mdulo principal transfiere el control a los
mdulos inmediatamente subordinados (o subprogramas), de modo que
stos puedan ejecutar sus funciones. Una vz que el mdulo subordinado
haya completado su tarea, devolver nuevamente el control al mdulo
controlador.
La descomposicin de un mdulo en submdulos contina hasta que se
llegue a un punto en que el mdulo resultante tenga slo una tarea
especfica que ejecutar (lectura, salida de resultados, procesamiento de
datos o control de otros mdulos).

Estrategias de construccin de
programas (III)
Programacin modular (II)
Mdulo
principal

Mdulo 1

Mdulo 11

Mdulo 2

Mdulo 12

Mdulo 3

Mdulo 31

Mdulo 311

Mdulo 32

Mdulo 312

...

Mdulo N1

Mdulo N

Mdulo N2

Estrategias de construccin de
programas (IV)
Programacin modular (III)
Ejemplo de descomposicin de un programa en mdulos:
programa para el clculo de estadsticas descriptivas
Clculo de
estadsticas

Lectura de
datos

Clculo de
medidas de
tendencia
central

Clculo de
medidas de
dispersin

Generacin de
tablas
resumen

Generacin de
grficos

Estrategias de construccin de
programas (V)
Programacin estructurada (programacin sin goto)
La programacin estructurada es un conjunto de tcnicas que
incorporan:
Diseo modular

Diseo descendente (top-down)


Estructuras de control bsico:
secuencia, seleccin e iteracin