You are on page 1of 36

UNIVERSIDAD DE MALAGA

DPTO. DE LENGUAJES Y C. DE LA COMPUTACION


E.T.S. DE INGENIERIA INFORMATICA



FUNDAMENTOS DE LA PROGRAMACIN



T TE EM MA A I I


INTRODUCCIN A LA PROGRAMACIN


I.1. La Informtica y el Papel de la Programacin de Computadores
I.2. El Computador: Una Mquina que Procesa Informacin
I.3.Codificacin de la Informacin
I.3.1. Representacional posicional de los nmeros
I.3.2. Cdigos de E/S
I.4. Estructura Funcional de los Computadores
I.4.1. Funcionamiento interno de los computadores
I.5. Algoritmos y Resolucin de Problemas
I.5.1. Qu se quiere hacer? Concepto de Algoritmo
I.5.2. Qu se puede hacer? Calculabilidad y Complejidad
1.5.3.Cmo hay que hacerlo? Correccin
I.6. Lenguajes de Programacin
I.6.1. Reconocimiento de Lenguajes. Gramticas
I.6.2. Traductores, Compiladores e Intrpretes
I.7.Visin General de un Sistema Informtico
I.7.1. Entorno integrado de desarrollo


E.T.S. de Ingeniera Informtica Dpto. de Lenguajes y C. de la Computacin



Fundamentos de la Programacin Tema I. Introduccin a la Programacin 1

I. 1. LA INFORMTICA Y EL PAPEL DE LA
PROGRAMACIN DE COMPUTADORES.

La informtica es una disciplina que naci con la aparicin de los
primeros computadores y cuyo crecimiento ha sido espectacular en
las ltimas dcadas.

Es una disciplina en continua evolucin tecnolgica, con
aplicaciones en todos los campos del quehacer humano:
bionformtica, informtica jurdica, informtica educativa,

En los ltimos aos se ha producido una sinergia entre la
informtica, las comunicaciones y la electrnica, que ha provocado la
aparicin de las denominadas Tecnologas de la Informacin y las
Comunicaciones, TIC.

La palabra Informtica es de origen francs y tiene su origen en la
unin de dos palabras: Informacin y Automtica. INFORMTICA
= INFORmacin + autoMTICA

La definicin que da la Real academia de la lengua espaola es la
siguiente:Conjunto de conocimientos cientficos y tcnicas que
hacen posible el tratamiento automtico de la informacin por medio
de computadores electrnicos

La informtica es simultneamente una disciplina matemtica,
cientfica y una ingeniera Por este motivo en ella confluyen las tres
formas de pensar propias de la:

-Teora: Usando, desarrollando y entendiendo los principios
matemticos que se usa en la disciplina informtica
(matemtica discreta, computabilidad, gramticas formales y
autmatas,.)
-Abstraccin: Esta forma de pensar tiene su origen en las
ciencias experimentales y el mtodo cientfico. Con la
abstraccin se hacen predicciones a travs de los resultados
tericos obtenidos a partir de los modelos.
E.T.S. de Ingeniera Informtica Dpto. de Lenguajes y C. de la Computacin



Fundamentos de la Programacin Tema I. Introduccin a la Programacin 2

-Diseo: Tiene que ver con el aspecto ingenieril de la
informtica. Se construyen artefactos (aplicaciones,
computadores, sistemas operativos, traductores, etc..) de un
modo sistemtico y aplicando tcnicas bien definidas

La programacin es un actividad transversal asociada a cualquier
rea de la informtica, aunque existe un rea especfica, la Ingeniera
del Software, que se ocupa de toda la problemtica de la creacin de
software. Cuando se discute la construccin del software hay que
tener en cuenta que los programas pueden ser clasificados en
diferentes niveles segn su tamao. As tenemos los programas
pequeos, que resuelven problemas elementales de pequea
envergadura, los programas de tamao medio escritos por una
persona durante unos cuantos meses (ejemplo proyectos fin de
carrera), y los programas grandes realizados por equipos de
programadores durante uno o ms aos. El diseo y la construccin
de estos ltimos entraran dentro del mbito de la Ingeniera del
Software.

Este curso se ocupa de los primeros pasos que ha de dar una persona
que quiere aprender a programar computadores y a disear
algoritmos para resolver problemas elementales. El objetivo del
mismo es proporcionar una buena base para adquirir los
conocimientos que constituyen una formacin en programacin:
estudio de los esquemas algortmicos y estructuras de datos ms
importantes.

Al principio (aos 50 o 60 del siglo pasado), la programacin de
ordenadores se vea como un arte, todo era cuestin de dominar un
lenguaje de programacin y aplicar las habilidades personales de
resolucin de problemas. En esta poca se daba ms importancia al
hardware que estaba continuamente cambiando. Sin embargo, y
segn fue creciendo el nmero de sistemas basados en computadores
y la complejidad de los mismos, los programadores empezaron a
tener problemas con el mantenimiento de los programas, la
correccin de errores, la adaptacin a nuevos requisitos,. El
esfuerzo dedicado al mantenimiento empez a absorber recursos de
forma alarmante, y se puso de manifiesto la importancia del software
E.T.S. de Ingeniera Informtica Dpto. de Lenguajes y C. de la Computacin



Fundamentos de la Programacin Tema I. Introduccin a la Programacin 3

y necesidad de tcnicas de anlisis que facilitaran la creacin del
mismo.

En 1968 se reconoci oficialmente una crisis del software y como
respuesta a ella naci la disciplina de la Ingeniera del Software. Para
ello se consider que al igual que con otros artefactos propios de la
ingeniera, el software era un artefacto cuya construccin deba estar
sujeta a los procedimientos rigurosos propios de la ingeniera.

Desde esta fecha y hasta la actualidad se ha avanzado mucho. Hoy se
disponen de mejores herramientas (lenguajes, compiladores y
entornos de desarrollo de software), de programadores mejor
formados, as como de nuevas tcnicas que facilitan la creacin de
software: la tecnologa de componentes software, el desarrollo de
software dirigido por modelos,
.

I. 2. EL COMPUTADOR: UNA MQUINA QUE PROCESA
INFORMACIN

Un computador es un mquina que ejecuta de forma automtica una
secuencia de instrucciones, que especifica qu acciones tendr que ejecutar y
en qu orden para realizar una determinada tarea.
La ejecucin o procesamiento de las instrucciones, supone la transformacin
de unos datos de entrada en unos datos de salida o resultados. A este proceso
se la denomina Procesamiento automtico de la informacin.


datos de entrada
e instrucciones
Computador
datos de salida
o resultados

Los datos son conjuntos de smbolos utilizados para expresar o representar
un valor numrico, un hecho, un objeto, o una idea, en la forma adecuada
E.T.S. de Ingeniera Informtica Dpto. de Lenguajes y C. de la Computacin



Fundamentos de la Programacin Tema I. Introduccin a la Programacin 4

para su tratamiento. Esto implica que es un concepto ms amplio que en
matemticas o fsica. Hay dos formas de representar los datos:

Datos de Entrada:
-Magnitudes fsicas: datos captados directamente por el
computador.
-Representacin conceptual mediante caracteres.
Datos de Salida:
-Mostrados de forma fsica.
-Mostrados mediante caracteres.

A continuacin mostramos algunos de los conceptos que constituyen
la terminologa bsica relacionada con los computadores y la
programacin. A lo largo del tema desarrollaremos estos conceptos
con mayor profundidad:

Software: Es el conjunto de programas ejecutables por el
computador, as como todo lo relacionado con la construccin de los
mismos.

Hardware: Es la parte fsica de la mquina, esto es el conjunto de
circuitos electrnicos y parte mecnica.

Instruccin: conjunto de smbolos que representan una orden de
operacin para el computador. Manipulan los datos.

Programa: secuencia de instrucciones, ejecutables, directa o
indirectamente, por un computador, que resuelven un problema o
llevan a cabo una tarea.

Lenguaje de Programacin: Establece las reglas para escribir
programas.

Lenguaje Mquina: Aquel cuyas instrucciones son ejecutables
directamente por el computador.

Lenguaje de Alto Nivel: Notacin que permite describir los
programas a un mayor nivel de abstraccin que con el Lenguaje
E.T.S. de Ingeniera Informtica Dpto. de Lenguajes y C. de la Computacin



Fundamentos de la Programacin Tema I. Introduccin a la Programacin 5

Mquina. Es un lenguaje ms cercano al programador que a la
mquina. Sus instrucciones deben ser traducidas a instrucciones del
Lenguaje Mquina.

Traduccin entre Lenguajes: Un programa escrito en un lenguaje se
transforma en el equivalente escrito en otro lenguaje.


I 3. CODIFICACIN DE LA INFORMACIN

En informtica es frecuente codificar la informacin. La codificacin es
una transformacin que me permite representar los elementos de un
conjunto mediante los de otro, de tal forma que a cada elemento del
primer conjunto le corresponda un elemento distinto del segundo. La
informacin es necesario codificarla debido a que de esta forma es
posible estructurarla y comprimirla.

En el interior de los computadores la informacin se almacena y se
transfiere de un sitio a otro segn un cdigo que slo usa dos valores,
representados por el 0 y el 1, y que se denomina cdigo binario. En la
entrada/salida del computador se efectan los cambios de cdigo
oportunos para que en su exterior la informacin sea directamente
comprendida por los usuarios. La razn de usar el cdigo binario es que
en un computador los circuitos generan pulsos temporizados de
naturaleza elctrica. El computador reacciona ante la presencia o
ausencia del pulso. Por este motivo el sistema binario es ideal para tales
patrones, debido a que slo usa dos valores.

Cdigo Binario: Es un sistema digital con dos estados.

BIT (BInary digiT): unidad elemental de informacin. Slo admite
dos valores 0 y 1.

BYTE: 8 bits. Nmero de bits necesarios para almacenar un carcter.


E.T.S. de Ingeniera Informtica Dpto. de Lenguajes y C. de la Computacin



Fundamentos de la Programacin Tema I. Introduccin a la Programacin 6

Otras unidades para medir la capacidad de almacenamiento:

KILOBYTES (KB): 2
10
bytes,
MEGABYTES (MB): 2
10
KB
GIGABYTES (GB): 2
10
MB
TERABYTES (TB): 2
10
GB

I.3.1. Representacin posicional de los nmeros

Un sistema de numeracin en base "b" utiliza para representar los nmeros
un alfabeto compuesto por b smbolos o cifras. Cada cifra que compone un
nmero contribuye con un valor que depende de:

a) La cifra en s.
b) La posicin dentro del nmero.

Ejemplo: En el sistema decimal (b=10)

{0,1,2,3,4,5,6,7,8,9}

El nmero 3278.52 puede obtenerse como:

3278.52 = 3 10
3
+ 2 10
2
+ 7 10
1
+ 8 10
0
+ 5 10
-1
+ 2 10
-2


Generalizando, dado el nmero... n
4
n
3
n
2
n
1
n
0.
n
-1
n
-2
..., representado
en un sistema de numeracin en base b, su valor es:

N = ...+ n
4
b
4
+ n
3
b
3
+ n
2
b
2
+ n
1
b
1
+ n
0
b
0
+ n
-1
b
-1
+ n
-2
b
-2
+...

(Expresin I.1)

Sistema de numeracin en base 2 o binario.
Aqu b = 2 y slo se necesitan dos smbolos para representar cualquier
nmero: {0,1}
E.T.S. de Ingeniera Informtica Dpto. de Lenguajes y C. de la Computacin



Fundamentos de la Programacin Tema I. Introduccin a la Programacin 7

Binario Decimal
Tabla I.1
000
001
010
011
100
101
110
111
0
1
2
3
4
5
6
7

Conversin de binario a decimal.

Aplicar la expresin I.1 para b = 2.

Ejemplos:
110100
)2
= 52
)10

10100.001
)2
= 20.125
)10

En realidad basta con sumar los pesos (2
i
) de las posiciones (i) en las
que hay un 1.
Conversin de decimal a binario.
Aplicar el mtodo de las "divisiones y multiplicaciones".
Ejemplo:
26.1875
)10
= 11010.0011
)2

Para la parte entera:
26 | 2
0 13 | 2
1 6 | 2
0 3 | 2
1 1 | 2
1 0
Para la parte fraccionaria:
0.1875 0.3750 0.7500 0.5000
x2 x2 x2 x2
0.3750 0.7500 1.5000 1.0000


Para la parte entera se utilizan los restos de las divisiones, en el orden
inverso al que se han ido calculando.
Para la parte fraccionaria se utilizan las partes enteras de los distintos
resultados de los productos, en el mismo orden en el que se han calculado.
E.T.S. de Ingeniera Informtica Dpto. de Lenguajes y C. de la Computacin



Fundamentos de la Programacin Tema I. Introduccin a la Programacin 8

I.3.2. Cdigos de E/S

Los cdigos de E/S o cdigos externos asocian a cada carcter
(alfabtico, numrico o especial) una determinada combinacin de
bits. Los caracteres especiales o de control no representan datos, sino
instrucciones que el computador puede ejecutar de forma automtica.
Ej. salto de lnea, pitido,..

cdigo E/S : a ----> b

a = {0,1,2,...,8,9,A,B,...,Y,Z,a,b,...,y,z,*,",/,...}
b = {0,1}
n


Para codificar m smbolos distintos se necesitan n bits, siendo n >=
log
2
m (expresin I.2)

En la prctica n es entero, y concretamente el menor nmero entero
que verifica dicha relacin.

La entrada/salida de caracteres se codifica numricamente segn una
tabla de correspondencia.

Se podran establecer cdigos de E/S de forma arbitraria.
Obviamente existen cdigos normalizados. El ms utilizado en la
actualidad es el cdigo ASCII (American Standard Code for
Information Interchange).











E.T.S. de Ingeniera Informtica Dpto. de Lenguajes y C. de la Computacin



Fundamentos de la Programacin Tema I. Introduccin a la Programacin 9

C C d di ig go o A AS SC CI II I

C CA AR RA AC CT TE ER RE ES S D DE E C CO ON NT TR RO OL L

0 N NU UL L (nulo) 16 D DL LE E (escape de enlace de datos)
1 S SO OH H (comienzo de cabecera) 17 D DC C1 1 (control de dispositivo 1)
2 S ST TX X (comienzo de texto) 18 D DC C2 2 (control de dispositivo 2)
3 E ET TX X (fin de texto) 19 D DC C3 3 (control de dispositivo 3)
4 E EO OT T (fin de transmisin) 20 D DC C4 4 (control de dispositivo 4)
5 E EN NQ Q (pregunta) 21 N NA AK K (acuse de recibo negativo)
6 A AC CK K (acuse de recibo) 22 S SY YN N (sincronizacin)
7 B BE EL L (campana sonora) 23 E ET TB B (fin de bloque de transmisin)
8 B BS S (retroceso de un espacio) 24 C CA AN N (anulacin)
9 H HT T (tabulacin horizontal) 25 E EM M (fin de medio fsico)
10 L LF F (cambio de rengln) 26 S SU UB B (carcter de sustitucin)
11 V VT T (tabulacin vertical) 27 E ES SC C (escape)
12 F FF F (pgina siguiente) 28 F FS S (separador de ficheros)
13 C CR R (retroceso del carro) 29 G GS S (separador de grupos)
14 S SO O (fuera de cdigo) 30 R RS S (separador de registros)
15 S SI I (en cdigo) 31 U US S (separador de unidades)






C C d di ig go o A AS SC CI II I
C CA AR RA AC CT TE ER RE ES S G GR RA AF FI IC CO OS S

3 32 2 S SP P 4 48 8 0 0 6 64 4 @ @ 8 80 0 P P 9 96 6 ` ` 1 11 12 2 p p
3 33 3 ! ! 4 49 9 1 1 6 65 5 A A 8 81 1 Q Q 9 97 7 a a 1 11 13 3 q q
3 34 4 " " 5 50 0 2 2 6 66 6 B B 8 82 2 R R 9 98 8 b b 1 11 14 4 r r
3 35 5 # # 5 51 1 3 3 6 67 7 C C 8 83 3 S S 9 99 9 c c 1 11 15 5 s s
3 36 6 $ $ 5 52 2 4 4 6 68 8 D D 8 84 4 T T 1 10 00 0 d d 1 11 16 6 t t
3 37 7 % % 5 53 3 5 5 6 69 9 E E 8 85 5 U U 1 10 01 1 e e 1 11 17 7 u u
3 38 8 & & 5 54 4 6 6 7 70 0 F F 8 86 6 V V 1 10 02 2 f f 1 11 18 8 v v
3 39 9 ' ' 5 55 5 7 7 7 71 1 G G 8 87 7 W W 1 10 03 3 g g 1 11 19 9 w w
4 40 0 ( ( 5 56 6 8 8 7 72 2 H H 8 88 8 X X 1 10 04 4 h h 1 12 20 0 x x
4 41 1 ) ) 5 57 7 9 9 7 73 3 I I 8 89 9 Y Y 1 10 05 5 i i 1 12 21 1 y y
4 42 2 * * 5 58 8 : : 7 74 4 J J 9 90 0 Z Z 1 10 06 6 j j 1 12 22 2 z z
4 43 3 + + 5 59 9 ; ; 7 75 5 K K 9 91 1 [ [ 1 10 07 7 k k 1 12 23 3 { {
4 44 4 , , 6 60 0 < < 7 76 6 L L 9 92 2 \ \ 1 10 08 8 l l 1 12 24 4 | |
4 45 5 - - 6 61 1 = = 7 77 7 M M 9 93 3 ] ] 1 10 09 9 m m 1 12 25 5 } }
4 46 6 . . 6 62 2 > > 7 78 8 N N 9 94 4 ^ ^ 1 11 10 0 n n 1 12 26 6 ~ ~
4 47 7 / / 6 63 3 ? ? 7 79 9 O O 9 95 5 _ _ 1 11 11 1 o o 1 12 27 7 D DE EL L



E.T.S. de Ingeniera Informtica Dpto. de Lenguajes y C. de la Computacin



Fundamentos de la Programacin Tema I. Introduccin a la Programacin 10

C C d di ig go o A AS SC CI II I E Ex xt te en nd di id do o




I 4. ESTRUCTURA FUNCIONAL DE LOS COMPUTADORES



Memoria
Masiva
Memoria Principal
datos e instrucciones
Procesador Central (CPU)
Unidad
de Control
Unidad
Aritmtico-
Lgica (ALU)
ENTRADA SALIDA
Datos e instrucciones
Datos
Datos
e instrucciones
Datos Instrucciones
Seales de control
y de estados
Dir.

En la figura podemos apreciar el esquema general de los primeros
computadores electrnicos que seguan la arquitectura de Von Neumman.
E.T.S. de Ingeniera Informtica Dpto. de Lenguajes y C. de la Computacin



Fundamentos de la Programacin Tema I. Introduccin a la Programacin 11

Aunque la tecnologa haya evolucionado mucho, este esquema sigue
siendo conceptualmente valido hoy en da. Antiguamente cada bloque
corresponda a un mdulo o armario independiente, conectado al resto
mediante cables. Actualmente y debido principalmente al desarrollo de la
microelectrnica, cada mdulo se compone de unos pocos circuitos
integrados o incluso uno solo, interconectados por las finas pistas de cobre
de los circuitos impresos.

Caractersticas de la Arquitectura de Von Neumann:
-Datos e instrucciones se codifican en dgitos binarios.
-Tanto instrucciones como datos se almacenan juntos en la
memoria principal del computador.
-El computador procesa tanto las instrucciones como los datos.

Elementos Bsicos de un Computador:

Computador central (CPU): Se encarga de ejecutar las instrucciones y
realizar los clculos. Est compuesto de la Unidad de Control (UC) y la
Unidad Aritmtico Lgica (ALU).

a) ALU: En sta residen los circuitos electrnicos que permiten realizar
las operaciones de tipo aritmtico (sumas, restas, etc.) y lgico
(operaciones del lgebra de Boole, comparaciones).

b) UC: Es la que se encarga de controlar la ejecucin de las
instrucciones. Va recibiendo de la memoria principal las
instrucciones almacenadas y va generando las seales de control
necesarias para realizar las acciones a ejecutar.

Dentro de la UC tenemos el Reloj. ste es un generador de pulsos que
sincroniza todas las acciones elementales del computador. Cualquier
accin del computador se realiza en un nmero entero de ciclos de reloj. El
periodo de esta seal se denomina tiempo de ciclo. La frecuencia del reloj
se mide en megahercios (MHz=Millones de ciclos/seg), y determina en
parte la velocidad de funcionamiento del computador.

La UC tiene un registro denominado Registro Contador de Programa. En
ste se almacena la direccin la siguiente instruccin a ejecutar.
E.T.S. de Ingeniera Informtica Dpto. de Lenguajes y C. de la Computacin



Fundamentos de la Programacin Tema I. Introduccin a la Programacin 12


Memoria. Permite el almacenamiento de la informacin e instrucciones.
Sus caractersticas principales son: volatilidad, capacidad y tiempo de
acceso. En funcin de stas se clasifica en dos tipos:

a) Principal, central o interna. Tiene un gran velocidad, un alto coste y
en consecuencia poca capacidad de almacenamiento. Est muy
ligada a las unidades ms rpidas de la computadora ALU y UC.
Para que un programa se ejecute en el ordenador debe estar
almacenado en memoria principal. Esta memoria se organizada en
forma de vector de elementos bsicos (celdas) o palabras de memoria
que son identificados por su posicin (direccin). Hay dos tipos:
RAM (Random Access Memory). Voltil, al apagarse el equipo
se pierde la informacin). Es de lectura/escritura.
ROM (Read Only Memory). No voltil. Contiene informacin
permanente. Es de slo lectura.
b) Secundaria, externa o masiva. Esta es una memoria de poca
velocidad, bajo coste y por tanto gran capacidad Es una memoria no
voltil. Usa para su construccin tecnologas magnticas y pticas.
Ej. Disco duro, pendrive,.

Palabra: La unidad de informacin ligada a la estructura interna del
computador es la palabra. Est formada por un nmero entero de bytes
(1,2,4 u 8) e indica la longitud de los datos con los que opera la ALU
(Palabra de CPU) o los que son transferidos entre CPU y memoria
(Palabra de Memoria). sta ltima coincide con el nmero de bits que
conforma cada posicin de la memoria principal, y que por tanto puede
leerse o escribirse simultneamente.

Perifricos: Son los dispositivos que el computador utiliza para
comunicarse con el exterior. Hay dos tipos:
a) Entrada: Son los dispositivos por medio de los cuales se
introducen al computador datos e instrucciones.
Transforman la informacin de entrada en seales discretas o
cdigos. Ej. Teclado,
b) Salida: Son los dispositivos por medio de los cuales se obtienen
los resultados del computador. Transforman las seales
E.T.S. de Ingeniera Informtica Dpto. de Lenguajes y C. de la Computacin



Fundamentos de la Programacin Tema I. Introduccin a la Programacin 13

discretas en caracteres escritos o visualizados. Ej. Pantalla,
impresora,

Buses: Son canales de informacin que permiten la conduccin de
informacin de un elemento a otro del computador. La informacin que
circula a travs de los buses puede ser informacin de control, de estado,
direcciones o datos. De ah los distintos tipos de buses. Enumeramos a
continuacin los ms importantes:
a) Bus de datos: Es el bus por el que circulan tanto las
instrucciones como los datos.
b) Bus de direcciones: Es un bus a travs del cual se envan las
direcciones de memoria (posiciones de la memoria donde se ha
de leer o escribir) desde la CPU a la memoria. Lgicamente el
ancho de este bus determina el tamao de la memoria principal
o el mximo rango de direccionamiento de la misma.
c) Bus de Control: Transfiere seales de estado y control.
Gobierna el uso y el acceso a los buses de datos y direcciones.
Transporta las rdenes y las seales de sincronizacin que
vienen de la unidad de control y viajan hacia los distintos
componentes de hardware.

La potencia de un computador viene determinada por: el tiempo de ciclo,
la longitud de palabra y la capacidad de la memoria.

I.4.1. Funcionamiento Interno de los Computadores

Para ejecutar un programa escrito en lenguaje mquina, lo primero que hay
que hacer es introducirlo en la memoria principal.

El "cargador" se encarga de introducir el programa en posiciones
consecutivas de memoria a partir de una dada "i".

Una vez cargado, se le da paso a la UC, poniendo el registro CP (contador
de programa) a "i", para que empiece a ejecutar el programa.


E.T.S. de Ingeniera Informtica Dpto. de Lenguajes y C. de la Computacin



Fundamentos de la Programacin Tema I. Introduccin a la Programacin 14

La UC repite sucesivamente las siguientes fases:

a) Fase de captacin de la instruccin.

Mem(CP) --- (instruccin) ---> UC

Incremento de CP

b) Fase de ejecucin de la instruccin,
y vuelta a la fase a).

Si la ejecucin de una instruccin implica saltar a una instruccin distinta
a la siguiente, pondr el CP al valor de la posicin de dicha instruccin,
con lo que se coger en la siguiente fase a).


I. 5. ALGORITMOS Y RESOLUCIN DE PROBLEMAS


El objetivo de la Programacin consiste en establecer una secuencia de
acciones que tras ser ejecutadas por un procesador resuelvan un
determinado problema.
Fases:
1. Anlisis del problema. El primer paso requiere que el
problema sea definido y comprendido, para que pueda ser
analizado en profundidad. Para ello se requiere que las
especificaciones de entrada y salida sean descritas con
detalle.
2. Estudio de su solucin.
3. Diseo del algoritmo. Para el segundo y tercer paso se
utilizan tcnicas que facilitan su desarrollo y se sigue una
determinada metodologa (diseo modular).
4. Codificacin del algoritmo en un determinado lenguaje de
programacin. Programa. En este paso se codifica el
algoritmo o la solucin obtenida en un lenguaje de
programacin que el computador entienda y sea capaz de
ejecutar.
E.T.S. de Ingeniera Informtica Dpto. de Lenguajes y C. de la Computacin



Fundamentos de la Programacin Tema I. Introduccin a la Programacin 15

5. Depuracin y prueba. En este paso se seleccionan un
conjunto de datos de prueba adecuado y se observa el
comportamiento real del programa, comparndolo con su
comportamiento esperado.

I.5.1. Qu se quiere hacer? Concepto de Algoritmo

El trmino algoritmo proviene de Mohammed al-Khowrizm,
matemtico persa que vivi durante el siglo IX y que alcanz gran
reputacin por el enunciado de las reglas paso a paso para sumar,
restar, multiplicar y dividir nmeros decimales.
La nocin de algoritmo no es particular a la informtica -hay
algoritmos que describen todo tipo de procesos como pueden ser una
receta de cocina, una partitura musical o las instrucciones para
sintonizar un televisor.
Esas operaciones sencillas se denominan primitivas, y deben poder ser
entendidas y llevadas a cabo por un procesador. El procesador puede
ser una persona, un computador o cualquier dispositivo electrnico o
mecnico. Pero, adems, el procesador debe disponer de las
condiciones necesarias para poder realizar cada una de las primitivas.
Esto es lo que se denomina entorno.

Veamos algunos ejemplos previos antes de definir el concepto de
algoritmo. Consideremos los siguientes enunciados:

A) Clculo de la media aritmtica de tres nmeros con una
calculadora.
a) Pulsar la tecla C.
b) Teclear el primer nmero.
c) Pulsar la tecla +.
d) Teclear el segundo nmero.
e) Pulsar la tecla +.
f) Teclear el tercer nmero.
E.T.S. de Ingeniera Informtica Dpto. de Lenguajes y C. de la Computacin



Fundamentos de la Programacin Tema I. Introduccin a la Programacin 16

g) Pulsar la tecla /.
h) Teclear el nmero 3.
i) Pulsar la tecla =.
B) Preparacin de un tinto de verano.
a) Colocar tres cubitos de hielo en un vaso.
b) Echar vino tinto hasta cubrir el hielo.
c) Aadir gaseosa hasta llenar el vaso.
d) Agitar el contenido.

Sin embargo, es posible que el procesador no sea capaz de interpretar una
instruccin como colocar tres cubitos de hielo en un vaso, y sea
necesario descomponerla en un conjunto de acciones primitivas que ste si
sea capaz de ejecutar.

a) Colocar tres cubitos de hielo en un vaso.
a1) Sacar la cubitera del congelador.
a2) Rociar la parte inferior con agua.
repetir
a3) Extraer un cubito.
a4) Echarlo al vaso.
mientras que el n de cubitos sea menor que 3.
a5) Rellenar los huecos de la cubitera con agua.
a6) Meter de nuevo la cubitera en el congelador.




E.T.S. de Ingeniera Informtica Dpto. de Lenguajes y C. de la Computacin



Fundamentos de la Programacin Tema I. Introduccin a la Programacin 17

Definicin de Algoritmo

Procesador. Entidad capaz de entender una secuencia finita de
acciones y ejecutar el trabajo descrito por stas.
Entorno. Conjunto de condiciones necesarias para la ejecucin del
trabajo.
Acciones Primitivas. Son acciones que el procesador es capaz de
entender y ejecutar directamente.
Secuencialidad y Paralelismo.


Definicin:

Dado un procesador bien definido y un trabajo a ejecutar por este
procesador, un algoritmo es el enunciado de una secuencia finita de
acciones primitivas que realizan ese trabajo.

[Kunth, 1986]. Secuencia finita de instrucciones, reglas o pasos que
describen de forma precisa las operaciones que un computador debe
realizar para llevar a cabo una tarea en un tiempo finito.

Segn Knuth, un algoritmo debe tener las siguientes propiedades:

- Finitud: la longitud y duracin de un algoritmo son finitas.
- Precisin: un algoritmo determina sin ambigedad las
operaciones que debe ejecutar un computador.
- Efectividad: las reglas pueden ser ejecutadas por un ser
humano con papel y lpiz.
- Generalidad: un algoritmo suele resolver una clase de
problemas y no un problema en particular.
- Entradas y Salidas. Un algoritmo puede tener varias entradas o
ninguna, pero al menos debe tener una salida que es el
resultado que se pretende obtener.

A la hora de disear un algoritmo hay que considerar 3 aspectos:
- Primitivas de las que partimos.
- Lenguaje simblico a utilizar.
E.T.S. de Ingeniera Informtica Dpto. de Lenguajes y C. de la Computacin



Fundamentos de la Programacin Tema I. Introduccin a la Programacin 18

- Representacin de los datos.

En los siguientes ejemplos podemos observar cmo la
representacin de los datos determina la descripcin del algoritmo, y
por tanto la forma de las acciones.

Ejemplo: Producto de 2 nmeros naturales X e Y.

1) Mediante un baco.
- Primitiva: saber contar.
- Abaco de 3 filas de bolas de distinto color.
- Representamos un dato con bolas a la izquierda.
- Inicialmente a la izquierda no hay bolas.

a) Desplazar X bolas rojas a la izquierda.

b) Desplazar Y bolas azules a la izquierda.

mientras haya bolas azules a la izquierda

c) Desplazar tantas bolas blancas a la izquierda como
bolas rojas haya a la izquierda.

d) Desplazar 1 bola azul a la derecha.

fin_mientras

e) Contar las bolas blancas a la izquierda.

f) Parar

2) Mediante hojas de papel.

- Primitiva: saber sumar y restar.

- Representacin de los datos mediante cifras.
E.T.S. de Ingeniera Informtica Dpto. de Lenguajes y C. de la Computacin



Fundamentos de la Programacin Tema I. Introduccin a la Programacin 19


- Proceso sobre 3 hojas de papel.

a) Escribir X sobre la hoja 1.

b) Escribir Y sobre la hoja 2.

c) Escribir 0 sobre la hoja 3.

mientras el valor de la hoja 2 sea mayor que 0
d) Sumar los valores de las hojas 1 y 3 y escribir el
resultado en la hoja 3, perdindose el valor anterior.

e) Restar 1 al valor escrito en la hoja 2 y escribir el
resultado en la misma hoja, perdindose el anterior.
fin_mientras
f) Leer el valor escrito en la hoja 3.
g) Parar.

I.5.2. Qu se puede hacer? Calculabilidad y Complejidad

Calculabilidad.

Durante muchos aos existi la creencia de que no exista ningn
problema que no pudiera resolverse.

El matemtico David Hilbert (1862-1943) quiso desarrollar un sistema
matemtico formal en el cual se pudiera expresar cualquier problema en
trminos de sentencias que fueran verdaderas o falsas. Su idea era
desarrollar un algoritmo de manera que dada una sentencia en el sistema
formal se determinase si dicha sentencia era verdadera o no (en definitiva
un algoritmo que nos permitiera para resolver cualquier problema).
Durante muchos aos se intento buscar ese algoritmo sin xito. No fue
hasta 1931 cuando Kurt Gdel demostr matemticamente que para los
E.T.S. de Ingeniera Informtica Dpto. de Lenguajes y C. de la Computacin



Fundamentos de la Programacin Tema I. Introduccin a la Programacin 20

nmeros naturales ese algoritmo no puede existir (teorema de
incompletitud), y que por tanto el problema de "decisin" de Hilbert no es
computable.

Otros matemticos como Church, Kleene, Post y Turing encontraron otros
problemas no computables, es decir, problemas para los no se puede
encontrar un algoritmo que los resuelva. Estos resultados fueron expuestos
a principios de los aos 30 cuando an no se haba desarrollado ningn
computador.

Por tanto, existen problemas no computables, esto es, no existe y nunca
existir ningn algoritmo que los resuelva. Algunos ejemplos de
problemas no computables:
-El problema de la Parada (the halting problem).
-El problema del Castor Afanoso (busy beaver problem).

El problema de la parada es un problema aparentemente sencillo que no es
computable. En programacin ocurre que cuando se est escribiendo un
programa, se cometen errores que provocan que el programa nunca acabe.
Veamos un ejemplo de algoritmo que nunca termina.

a) Leer un valor de teclado e introducirlo en la variable x.
repetir
b) Restar 1 al valor de x.
mientras que el valor de x sea distinto de 0.

Este algoritmo que puede parecer correcto, no terminar nunca si el valor
introducido por teclado es un nmero negativo. Sera muy til tener un
programa que nos dijera si un programa P ante unos datos de entrada D se
detendr o no. Sin embargo, no merece la pena intentar desarrollar ese
programa puesto que el problema de la detencin no es computable.

La teora de la calculabilidad estudia y caracteriza qu problemas son
algortmicamente resolubles o computables.




E.T.S. de Ingeniera Informtica Dpto. de Lenguajes y C. de la Computacin



Fundamentos de la Programacin Tema I. Introduccin a la Programacin 21

Complejidad

Es interesante conocer los recursos computacionales necesarios para
ejecutar un determinado algoritmo.

La teora de la complejidad se encarga de estudiar la cantidad de recursos
computacionales (espacio y tiempo) que necesita un determinado
algoritmo para ejecutarse. Slo aquellos algoritmos que utilizan una
cantidad factible de recursos son tiles en la prctica.



Todos los problemas
Problemas computables
Problemas
factiblemente
computables (tratables)




Dentro de los problemas computables se distinguen dos categoras:
- Tratable: cuando existe un algoritmo que lo resuelve de manera
eficiente.
- Intratable: cuando no existe un algoritmo que lo resuelva de manera
eficiente.

Un ejemplo de problema computable pero intratable, es el problema del
viajante de comercio. ste consiste en encontrar el camino de menor
longitud que pase una sola vez por un determinado conjunto de ciudades y
vuelva al punto de partida.

Para este problema existen n! combinaciones de recorridos, y no se conoce
ningn algoritmo que proporcione la de menor longitud de manera
eficiente, es decir, sin tener que examinar la mayor parte de las n!
soluciones. Por ejemplo, para un tamao de n=100 ciudades hay alrededor
de 3*7*10
156
soluciones (incluso si todos los tomos del universo pudieran
E.T.S. de Ingeniera Informtica Dpto. de Lenguajes y C. de la Computacin



Fundamentos de la Programacin Tema I. Introduccin a la Programacin 22

calcular mil millones de soluciones por segundo, sera necesario mucho
ms tiempo del que lleva el universo existiendo).

La eficiencia de un algoritmo (parmetros espacio/tiempo) es dependiente
del tamao de los datos de entrada y tambin de la arquitectura del
computador. Sin embargo, buscamos variaciones ms abstractas del
espacio y tiempo computacional que sean lo ms independientes posibles
del tipo de computador en el que se ejecute el algoritmo, y que nos
permitan comparar la eficiencia de diferentes algoritmos que resuelvan el
mismo problema.

Existen diversas medidas de la eficiencia de un programa:
- Nmero de instrucciones en cdigo mquina: depende del
computador y de los detalles de implementacin.
- Nmero de instrucciones en un lenguaje de alto nivel: depende del
lenguaje y del estilo de programacin.
- Nmero de operaciones bsicas: es una medida independiente.

Nos quedaremos con esta ltima medida de la eficiencia, y para medir la
complejidad computacional de un algoritmo identificaremos aquella
operacin bsica dentro del algoritmo que capture el grueso de la
computacin, y contaremos el nmero de veces que sta se repite.

Ejemplo: en un algoritmo de bsqueda de un elemento dentro de una lista
la operacin bsica (ms costosa) es la comparacin de elementos.
Supuesto que la lista es de tamao N obtendremos una funcin T(N) que
expresar el tiempo de ejecucin de ese algoritmo, y donde N es el tamao
de los datos sobre los que se ejecuta el algoritmo.

Si la funcin T(N) tiene un trmino N
c
como factor dominante, donde c es
una constante tal que c>0, se dice que es un algoritmo polinomial y
tratable. Si la funcin tiene un trmino a
N
como factor dominante, donde a
es una constante tal que a>1, se dice que el algoritmo es exponencial e
intratable, ya que slo finaliza en un tiempo razonable para valores
pequeos de N. En la siguiente tabla se muestran valores de algunas
funciones para distintos tamaos de entrada. El objetivo es observar el
comportamiento de dichas funciones cuando se dobla el tamao de la
entrada.
E.T.S. de Ingeniera Informtica Dpto. de Lenguajes y C. de la Computacin



Fundamentos de la Programacin Tema I. Introduccin a la Programacin 23





N=10 N=20 N=40 N=80 N=160 N=320 N=640 N=1280
logN 1 1.30 1.60 1.90 2.20 2.50 2.80 3.10
N 10 20 40 80 160 320 640 1280
N
2
100 400 1600 6400 25600 102400 409600 1638400
N
4
10000 160000 2.56x10
6
4.096x10
7
6.5536x10
8
1.048x10
10
1.677x10
11
2.68x10
12

2
N
1024 1.048x10
6
1.0995x10
12
1.20x10
24
1.461x10
48
2.1359x10
96
4.56x10
192


Supuesto que un computador pueda ejecutar mil millones de operaciones
por segundo, si se examinan los resultados obtenidos en la tabla anterior,
se puede comprobar que para un valor pequeo de N (80) el algoritmo de
coste 2
N
es claramente no factible.

I.5.3. Cmo hay que hacerlo? Correccin

Este es un objetivo bsico exigible a los programas. En la actualidad la
mayora de los programas contienen errores. Por ejemplo, la explosin del
cohete espacial europeo Ariane5, fue debida a un error del programa que
provoc que una operacin aritmtica produjese un valor inesperado. A
continuacin enumeramos los 3 tipos de errores que pueden estar
presentes en un programa:
1) Errores lexicogrficos, sintcticos y semnticos (ver seccin
I.6.2). Son fciles de corregir.
2) Errores lgicos en la especificacin y diseo del algoritmo:
consisten en partir de una especificacin incorrecta del
problema que se desea resolver. Estos errores son ms costosos
de corregir cuanto ms tarde se detecten, puesto que se
desperdicia tiempo y recursos al tener que repetir el desarrollo
(ej. hacemos un producto cuando queremos hacer unas suma).
3) Errores en tiempo de ejecucin: errores lgicos tan severos que
el sistema normalmente parar la ejecucin del programa (ej.
divisin por cero).
E.T.S. de Ingeniera Informtica Dpto. de Lenguajes y C. de la Computacin



Fundamentos de la Programacin Tema I. Introduccin a la Programacin 24

Cmo asegurar que un programa es correcto? Hay diferentes enfoques:

1) Prueba Experimental:
Consiste en seleccionar un conjunto adecuado de datos de entrada de
prueba y observar el comportamiento real del programa, comparndolo
con el comportamiento esperado del mismo. ste es un proceso
iterativo:
Probar
Corregir


El problema consiste en determinar el conjunto de casos de prueba
adecuado, junto con la interpretacin de los mismos. Adems,
Cmo decidir si los resultados de una prueba son correctos o no?
La prueba slo puede concluir que un programa es correcto si se
testean con xito todas las posibles entradas al mismo. Por ello, no es
factible en la prctica.
Ejemplo: Un mtodo para calcular N
2
para algn entero positivo N
sin realizar el producto consiste en sumar los N primeros impares:
N
2
= 1+3+5+...+(2N-1)
Ante cualquier algoritmo que construyamos, nos encontramos con
que no es factible probar para todo N. Cmo sabemos que la
frmula no fallar para algn valor no probado?

El Teorema de Gilb dice:La prueba experimental puede ser
empleada para mostrar la presencia de errores, pero nunca su
ausencia. Por tanto la solucin pasara por emplear un razonamiento
matemtico:
E.T.S. de Ingeniera Informtica Dpto. de Lenguajes y C. de la Computacin



Fundamentos de la Programacin Tema I. Introduccin a la Programacin 25

( )


( )


La nica forma de demostrar la correccin de un programa es
mediante la verificacin de programas. La solucin anterior se
enmarca dentro de las tcnicas de verificacin formal
2) Verificacin formal:
Consiste en demostrar mediante algn mtodo la correccin de un
programa. ste es un enfoque anlogo a la demostracin de teoremas.
La correccin es una nocin relativa. Cuando decimos que un programa
es correcto nos referimos respecto a alguna especificacin. Hay dos
tipos de correccin:
- Correccin parcial. Se supone que el programa termina.
- Correccin total. Se demuestra que el programa
termina.
Tcnica para verificar programas. Con los asertos (expresiones lgicas)
expresamos las condiciones que se le imponen a los datos. Dependiendo
del punto del algoritmo en que aparezcan sern:
Precondiciones. Son asertos que deben ser verdad antes
de ejecutar un algoritmo o parte del mismo.
Postcondiciones. Son asertos que expresan las
propiedades de los resultados de los algoritmos.
Asertos intermedios Son asertos situados en distintos
puntos del algoritmo.
* Notacin: {P} S {Q} (Especificacin pre/post)
S -> Algoritmo
{P} -> Precondicin de S
{Q} -> Postcondicin de S
E.T.S. de Ingeniera Informtica Dpto. de Lenguajes y C. de la Computacin



Fundamentos de la Programacin Tema I. Introduccin a la Programacin 26

Interpretacin: Si P es verdad y se ejecuta S, entonces (suponiendo
que S termina) Q es verdad.
Verificar un programa consiste en demostrar que cumple su
especificacin pre/post.

I. 6. LENGUAJES DE PROGRAMACIN


Como dijimos en la introduccin un lenguaje de programacin establece
las reglas para describir programas. La clasificacin de los lenguajes de
programacin se puede hacer atendiendo a diferentes criterios:

1) Nivel de abstraccin
2) Propsito del lenguaje
3) Paradigma de programacin

1) Clasificacin segn el nivel de abstraccin:
Lenguajes de bajo nivel:
Cercanos a la mquina.
Bajo nivel de abstraccin. Programas expresados en
trminos de la arquitectura y operaciones bsicas
que realiza un computador (ej. Lenguaje mquina,
Ensamblador,..)
Lenguajes de alto nivel:
Cercanos al problema
Alto nivel de abstraccin. Programas expresados en
trminos del problema a resolver, en un lenguaje
cercano al programador (ej. Lisp, Prolog, Java, C++,
Ada,)

2) Clasificacin segn el propsito del lenguaje:
Cientficos: para realizar clculos matemticos, manipulacin
de frmulas,Ej. Algol, Fortran
Ingenieriles: diseo de hardware, control de sistemas,
simulaciones,..Ej. Ada, Dynamo, Simscript,..
Gestin: contabilidad, bases de datos,Ej. Cobol, Dbase,..
E.T.S. de Ingeniera Informtica Dpto. de Lenguajes y C. de la Computacin



Fundamentos de la Programacin Tema I. Introduccin a la Programacin 27

Inteligencia Artificial: sistemas expertos, planificacin,..Ej.
Lisp, Planner,..
Multipropsito: aplicaciones de propsito general. Ej. Pascal,
Modula-2, C,..

3) Clasificacin segn el paradigma de programacin. Un paradigma de
programacin es un modelo que engloba a ciertos lenguajes que
comparten:
Elementos estructurales: con qu se confeccionan los
programas?
Elementos metodolgicos: cmo se confecciona un
programa?


E. Estructurales E. Metodolgicos
Imperativo Subprogramas Refinamientos
sucesivos
Orientado a Objeto Objetos Orientado a Objetos
Declarativo:
Lgico y Funcional
Funciones (Funcional)
Hechos y reglas (Lgica)
Anlisis de Relaciones


E.T.S. de Ingeniera Informtica Dpto. de Lenguajes y C. de la Computacin



Fundamentos de la Programacin Tema I. Introduccin a la Programacin 28


En la figura anterior podemos ver la genealoga de diversos lenguajes. En
los orgenes de la programacin es cuando se produce el mayor caos.
Posteriormente se produce una convergencia gradual hacia ciertos modelos
que se imponen (imperativo, orientado a objetos,). Como ocurre en la
naturaleza hay una seleccin natural. Los lenguajes menos adecuados
tienden a desparecer, y son sustituidos por otros lenguajes ms aptos.


I.6.1. Reconocimiento de Lenguajes. Gramticas


Asociada a cada lenguaje de programacin, y al igual que en los lenguajes
naturales, existe una gramtica que establece la forma en la que se pueden
1950
1955
1960
1965
1970
1975
1980
1985
1990
1995
2000
Fortran 9x
Fortran 77
Algol 60
Algol 68
Simula 67
Cobol
Fortran I
Fortran IV
Bas ic
Pas cal
Smalltalk
Ens amblador
Modula 2 ADA
Eiffel
C. Maquina
Scheme
Has kell
Prolog
Lis p
Programacin Imperativa Programacin Declarativa
Funcional Lgica
B
C
C++
J ava
Delphi
Algol 58
Simula I
Programacion Orientada a Objetos
E.T.S. de Ingeniera Informtica Dpto. de Lenguajes y C. de la Computacin



Fundamentos de la Programacin Tema I. Introduccin a la Programacin 29

construir y reconocer sentencias de un programa (frases) correctas o
pertenecientes a dicho lenguaje. El objetivo es que la sintaxis o notacin
usada para describir los lenguajes de programacin no se ambigua.

Una gramtica se define como una tupla G = (N, T, A, R), donde:
N: smbolos no terminales o categoras sintcticas del lenguaje,
definibles en funcin de otros ms simples.
T: smbolos terminales o palabras del lenguaje. No se pueden
definir en trminos de otros ms elementales.
A: Axioma, que es un smbolo no terminal.
R: Reglas de derivacin que indican cmo se combinan dichos
smbolos anteriores para construir frases o palabras correctas de
acuerdo al lenguaje generado por la gramtica.

Entre las diversas formas de expresar la gramtica de un lenguaje, las ms
utilizadas son la notacin BNF y los diagramas sintcticos de CONWAY.

Ejemplo: Identificadores en un determinado lenguaje. Un identificador
est formado por una secuencia de cualquier longitud de letras minsculas
o nmeros, pero ha de comenzar obligatoriamente por una letra minscula.
Ejemplo de identificadores vlidos: hola, a123, p5hy. Sin embargo, 457, o
4tyu no seran identificadores vlidos.
La siguiente gramtica nos permite distinguir entre los identificadores
vlidos o que pertenecen al lenguaje generado por la gramtica, y los no
vlidos o no perteneciente al lenguaje. La expresaremos primero en
notacin BNF y despus en notacin Conway:


a) Notacin BNF:
G = (N, T, A, R)
N = {<ident>, <letra>, <digito>}
T = {a,b,c,d,,z,0,1,9}
A = <ident>
R= 1.<letra> ::= a | b | c | . . . | z
2. <dgito> ::= 0 | 1 | 2 | 3 | . . . | 9
3. <ident> ::= <letra>{<letra>|<dgito>}

E.T.S. de Ingeniera Informtica Dpto. de Lenguajes y C. de la Computacin



Fundamentos de la Programacin Tema I. Introduccin a la Programacin 30

b) Notacin Conway: En esta notacin las Reglas, R, se representan de
forma grfica.
Smbolo terminal
Smbolo no terminal
Regla: conjunto de smbolos unidos por flechas. Cada camino
de izquierda. a derecha es una derivacin vlida dentro del
lenguaje
<letra>





<digito>






<ident>









I.6.2. Traductores, compiladores e intrpretes

Traductor: programa que convierte un programa escrito en un determinado
lenguaje A a su equivalente escrito en otro lenguaje B.


a b c z

0 1 9

letra
letra
dgito
E.T.S. de Ingeniera Informtica Dpto. de Lenguajes y C. de la Computacin



Fundamentos de la Programacin Tema I. Introduccin a la Programacin 31

Compilador: traductor para convertir un programa escrito en un lenguaje
de alto nivel a su equivalente escrito en lenguaje mquina. Traduce el
programa globalmente y genera un programa objeto como resultado de la
traduccin. El resultado puede ser lenguaje mquina de un computador
real (Ej. compilador de C++) o bien de una mquina virtual (Ej.
compilador de Java).

Intrprete: programa para conseguir que un programa escrito en lenguaje
de alto nivel sea ejecutado "directamente" en la mquina. En realidad ir
traduciendo y ejecutando cada instruccin del programa, sin generar
programa objeto alguno.

Esquema general de un compilador

El funcionamiento de un compilador se divide en dos fases:
Anlisis: se comprueba el lxico, la sintaxis y la semntica del
programa fuente.
Sntesis: se genera un cdigo intermedio y se optimiza, generando as
el cdigo definitivo en lenguaje mquina.

Fase de Anlisis: En esta fase se hace uso de:
Rutina de errores: que manejar los errores detectados durante la fase
de anlisis, mostrndolas al final al programador por pantalla.
Tabla de smbolos: En esta tabla es donde se almacenan los objetos
usados en el programa: variables, constantes,.. De cada uno de ellos
se almacena su tipo, nombre, valor o posicin que ocupa en
memoria.
Adems se divide en tres partes:

1) Anlisis Lexicogrfico:
-Genera una secuencia de smbolos denominados "tokens"
(unidades lxicas) que ser la entrada de la siguiente subfase.
- Elimina comentarios.
- Elimina espacios en blanco, separadores, tabuladores,...
- Avisa de los errores lexicogrficos que detecte.


E.T.S. de Ingeniera Informtica Dpto. de Lenguajes y C. de la Computacin



Fundamentos de la Programacin Tema I. Introduccin a la Programacin 32

2) Anlisis Sintctico:
- Analiza la estructura de la frase (ya formada por "tokens") y
comprueba si pertenece al lenguaje. Para ello crea un rbol
sintctico a partir de la secuencia de tokens de la fase anterior
- El rbol sintctico sirve como base para el posterior anlisis
semntico y la generacin de cdigo
- Avisa de los errores sintcticos que detecte

3) Anlisis Semntico
- Comprueba que una frase sintcticamente correcta lo es
tambin semnticamente.
- Ejemplo: asignacin de valores de distintos tipos, o
aplicacin de operadores a tipos apropiados
- Avisa de los errores semnticos que detecte

Fase de Sntesis: la fase se sntesis se divide en tres partes:

1) Generacin de cdigo intermedio:
- Cdigo independiente de la mquina para la que se hace el
compilador.
- Debe ser fcil de producir a partir del anlisis y fcil de
traducir al cdigo definitivo

e) Optimizacin de cdigo:
- Genera un cdigo ms compacto y eficiente.

f) Generacin de cdigo:
- Pasa del cdigo intermedio (posiblemente optimizado) al
cdigo mquina final.


E.T.S. de Ingeniera Informtica Dpto. de Lenguajes y C. de la Computacin



Fundamentos de la Programacin Tema I. Introduccin a la Programacin 33


Programa
Fuente
Anlisis
Lexicogrfico
Anlisis
Sintctico
Anlisis
Semntico
Programa
Objeto
Generacin
cdigo
intermedio
Optimizacin
de
cdigo
Generacin
de
cdigo
A
N
A
L
I
S
I
S
S
I
N
T
E
S
I
S
Rutinas
Errores
Tabla
Smbolos
Gestin
de
Tablas Otras
Tablas



I. 7. VISIN GENERAL DE UN SISTEMA INFORMTICO

En la siguiente figura se muestra un esquema simplificado de un
sistema informtico mediante una estructura en capas o niveles:











Software de Aplicaciones (Proc. Textos, Dibujo, Prog. C++ )...)
Software de Sistema (Eclipse, Oracle...)
Sistema Operativo (UNIX, Windows, ...)
Hardware
E.T.S. de Ingeniera Informtica Dpto. de Lenguajes y C. de la Computacin



Fundamentos de la Programacin Tema I. Introduccin a la Programacin 34



Ya que en la seccin I.4 describimos la estructura funcional de los
computadores, vamos a describir a continuacin la estructura del software:

Software de aplicacin:
Programas de usuario: son programas destinados a
resolver problemas especficos reales y que
normalmente son realizados por el propio usuario
del computador.
Programas verticales: son programas que logran
resolver problemas similares a un conjunto de
usuarios que pertenecen al mismo colectivo
profesional o sector. Ej. programas de contabilidad
general, programas de arquitectura (autocad),
Paquetes estndar: programas que pueden ser tiles
a numerosos colectivos y resuelven problemas que
se pueden tratar de forma comn. Ej. procesadores
de texto, programas de diseo grfico, ...
Software de Sistema: conjunto de programas que
proporcionan servicios para la utilizacin o desarrollo de
programas, pero que en s no resuelven el problema final
del usuario.
Lenguajes, entornos de programacin y traductores
(IDE, Entorno integrado de desarrollo).
Soporte y sistema de gestin de datos (DBMS).
Conjunto de programas que permiten organizar
grandes volmenes de informacin, y facilitan su
manipulacin y acceso.
Entornos grficos de usuario (GUI). Conjunto de
programas que permiten la comunicacin con el
usuario a travs de elementos grficos y textuales.
Sistema Operativo (OS): Conjunto de programas que
controlan y facilitan el uso del Hardware.



E.T.S. de Ingeniera Informtica Dpto. de Lenguajes y C. de la Computacin



Fundamentos de la Programacin Tema I. Introduccin a la Programacin 35


I.7.1. Entorno integrado de desarrollo

Un entorno de desarrollo integrado o IDE (acrnimo en ingls de
Integrated Development Environment), es un programa informtico
compuesto por un conjunto de herramientas de programacin.

Puede dedicarse en exclusiva a un slo lenguaje de programacin o
bien, poder utilizarse para varios. ste es el caso de Eclipse, al que
mediante plugins se le puede aadir soporte de lenguajes adicionales.
Eclipse ser el IDE que usaremos en el laboratorio para realizar
nuestras prcticas de programacin.

Componentes:
- Un editor de texto.
- Un compilador.
- Un depurador.
- ...

You might also like