Sunteți pe pagina 1din 26

Laboratorio de Programacin

Diseo de algoritmos
Julio Villena Romn
jvillena@it.uc3m.es
Transparencias de Jos Jess Garca Rueda Adaptado de El algoritmo, una iniciacin a la programacin (http://www.desarrolloweb.com/manuales/67/) y Diseo estructurado de algoritmos (http://www.itver.edu.mx/comunidad/material/algoritmos/)

Qu es un algoritmo?
Para un ingeniero, el ordenador es una herramienta con la que desarrolla su trabajo, con lo que debe saber cmo utilizarla, esto es, cmo programarla La principal razn para saber programar es poder utilizar el ordenador para resolver problemas Un algoritmo es una serie de pasos organizados que describe el proceso a seguir para solucionar un problema especfico La palabra algoritmo deriva de la traduccin al latn de la palabra rabe alkhowarizmi, nombre del matemtico rabe que enunci reglas paso a paso para sumar, restar, multiplicar y dividir nmeros decimales

Un algoritmo cotidiano
Algoritmo para leer las pginas de un libro:
1. 2. 3. 4. Inicio. Abrir el libro en la 1 pgina Leer la pgina Es la ltima que deseo leer?
S: Ve al paso 7 No: Ve al paso 5

5. 6. 7. 8.

Pasar a la siguiente pgina Ve al paso 3 Cerrar el libro Fin


3

Otro algoritmo cotidiano


Algoritmo para ensear a tu hermano pequeo a ir por primera vez a una fiesta

Las Torres de Hanoi


Las Torres de Hanoi es un juego matemtico que consiste en tres varillas verticales y un nmero indeterminado de discos que determinarn la complejidad de la solucin No hay dos discos iguales, estn colocados de mayor a menor en la primera varilla ascendentemente, y no se puede colocar ningn disco mayor sobre uno menor a l en ningn momento El juego consiste en pasar todos los discos a la tercera varilla colocados de mayor a menor ascendentemente

Leyenda
La leyenda cuenta que Dios al crear el mundo, coloc tres varillas de diamante con 64 discos en la primera. Tambin cre un monasterio con monjes y les asign la tarea de resolver esta Torre de Hanoi divina. El da que estos monjes consigan terminar el juego, se acabar el mundo Esta leyenda result ser un invento publicitario del creador del juego, un matemtico de fortuna del siglo XVIII
En aquella poca, era muy comn encontrar matemticos ganndose la vida de forma itinerante con juegos de su invencin

Pero, si la leyenda fuera cierta, cundo ser el fin del mundo?


El mnimo nmero de movimientos que se necesita para resolver este problema es de 264-1 Si los monjes hicieran un movimiento por segundo, los 64 discos estaran en la tercera varilla en poco menos de 585 mil millones de aos

http://www.psicoactiva.com/juegos/hanoi/jg_hanoi.htm
6

Resolucin iterativa
Para obtener la solucin ms corta, es necesario mover el disco ms pequeo en todos los pasos impares, mientras que en los pasos pares slo existe un movimiento posible que no lo incluye. El problema se reduce a decidir en cada paso impar a cul de las dos pilas posibles se desplazar el disco pequeo El algoritmo en cuestin depende del nmero de discos del problema Si inicialmente se tiene un nmero impar de discos:
El 1er movimiento es colocar el disco ms pequeo en la pila destino En cada paso impar se le mueve a la siguiente pila a su izquierda (o a la pila destino, si est en la pila origen) La secuencia ser DES, AUX, ORI, DES, AUX, ORI, etc.

Si se tiene inicialmente un nmero par de discos:


El 1er movimiento es colocar el disco ms pequeo en la pila auxiliar En cada paso impar se le mueve a la siguiente pila a su derecha (o a la pila origen, si est en la pila destino) La secuencia ser AUX, DES, ORI, AUX, DES, ORI, etc.
7

Creacin de algoritmos
Proceso de programacin tpico (deseable):
Dado un determinado problema el programador idea una solucin y la expresa mediante un algoritmo Codificacin del algoritmo Ejecucin del programa

Creacin de algoritmos (2)


Metodologa para la solucin de problemas por medio de un ordenador:
1. Definicin del problema: clara y precisa. Es casi la mitad del trabajo 2. Anlisis del problema: colocarse en el lugar del ordenador y analizar qu requeriramos para realizar la tarea
Datos de entrada Informacin a producir (salida) Mtodos y frmulas para procesar los datos

3. Diseo del algoritmo 4. Codificacin


9

Caractersticas de un buen algoritmo


Debe tener un punto particular de inicio No debe ser ambiguo Debe ser general Debe ser finito en tamao y en tiempo de ejecucin Prueba de escritorio: se toman datos especficos como entrada y se sigue el algoritmo hasta obtener un resultado
10

Tcnicas de diseo
Top Down: se descompone sucesivamente el problema inicial en subproblemas
Con cada descomposicin, se simplifican los subproblemas Las diferentes partes del problema pueden ser programadas de forma independiente El programa final queda estructurado en forma de bloques o mdulos

Bottom Up: se programa cada proceso segn vaya apareciendo


Difcil llegar a una integracin tal que el rendimiento global sea fluido Proclive a la duplicacin de esfuerzos Pueden no satisfacerse los requisitos globales de la aplicacin

La creacin de algoritmos se basa en la tcnica descendente


11

Lenguajes algortmicos
Un lenguaje algortmico es un conjunto de smbolos y reglas que permiten describir de manera explcita un proceso Es independiente de cualquier lenguaje de programacin Debe permitir una traduccin clara del algoritmo al programa Dos tipos de lenguajes algortmicos:
Grficos (por ej., los diagramas de flujo) No grficos (por ej., el pseudocdigo)

INICIO Edad: Entero ESCRIBE Cul es tu edad? LEE Edad SI Edad >= 18 ENTONCES ESCRIBE Eres mayor de edad FINSI FIN
12

Diagramas de flujo
Es una forma de representar grficamente un algoritmo Cada paso se escribe dentro de un smbolo Los pasos se conectan unos con otros mediante lneas de flujo Son fciles de disear, pero difciles de actualizar Los smbolos que utiliza estn normalizados
Inicio/Final Entrada/ Salida Proceso Salida por impresora Conector dentro pgina Conector fuera pgina Salida por pantalla

13

Diagramas de flujo (2)


Decisin

Seleccin mltiple

Mientras

14

Diagramas de flujo (3)


Para

Repite hasta

Lneas de flujo
15

Ejemplo de diagrama de flujo


Disea un algoritmo que lea 3 nmeros, los sume e imprima el resultado por impresora

16

Recomendaciones
Emplear solamente lneas de flujo horizontales y/o verticales Evitar el cruce de lneas (usando los conectores) Usar los conectores slo cuando sea necesario No dejar lneas de flujo sin conectar Se deber poder leer de arriba a abajo y de izquierda a derecha Ser escuetos y claros con lo que se escriba dentro de los smbolos

17

Pseudocdigo
Mezcla de lenguaje de programacin y de lenguaje natural Representacin narrativa de los pasos que debe seguir un algoritmo Utiliza palabras, no grficos Ventajas:
Ocupa menos espacio Permite representar fcilmente operaciones repetitivas complejas Es muy fcil pasar del pseudocdigo al lenguaje de programacin Quedan claros los niveles que tiene cada operacin
18

Principales caractersticas de los pseudocdigos


Utilizan operadores aritmticos y lgicos Se pueden incluir comentarios Se debe respetar una indentacin en los bloques de instrucciones Usan ciertas palabras clave:
PSEUDOCDIGO, VARIABLES, INICIO, FIN, LEE, ESCRIBE, IMPRIME, IF_THEN_ELSE, CASE OF, FOR DO, WHILE DO, REPEAT UNTIL, ARRAY

Comienzan con el nombre, seguido de la declaracin de variables y luego el cuerpo

19

Ejemplo de pseudocdigo
Algoritmo que lee 3 nmeros, los suma e imprime su resultado.
PSEUDOCDIGO sumatorio VARIABLES eN1, eN2, 3N3, eSuma: Entero INICIO ESCRIBE Dame tres nmeros: LEE eN1, eN2, eN3 eSuma = eN1 + eN2 + eN3 ESCRIBE El resultado de la suma es: , eSuma FIN

20

Diagramas estructurados (Nassi-Schneiderman)


Como un diagrama de flujo en el que se omiten las flechas de unin, y las cajas son contiguas Son fciles de disear y difciles de actualizar Las acciones sucesivas se escriben en cajas sucesivas
21

Ejercicio
Disear un algoritmo que, dada una operacin aritmtica expresada en el formato habitual (y String), vaya leyndola carcter a carcter, para as calcular su resultado Respetar las reglas tpicas de precedencia entre operaciones aritmticas (+ y - < * y /)

22

Paso 1: Anlisis
Datos de entrada: una cadena de caracteres representando una operacin aritmtica Datos de salida: Un nmero, resultado de realizar la operacin aritmtica Forma de operar:
Emplearemos dos pilas, una de operadores y otra de operandos En la primera guardaremos los operadores que vayamos leyendo, siempre que su precedencia sea mayor que los operadores ya en la pila. De no ser as, se extraen los operadores de precedencia mayor y se realiza la operacin En la segunda iremos guardando los operandos que vayamos leyendo, as como los resultados de las operaciones parciales
23

Paso 2: Diseo del algoritmo


Desarrollo del algoritmo en pseudocdigo

24

Paso 3: Prueba de escritorio


Qu tal funciona el algoritmo para 1+2*3 - 4 ? Y para 1*2*3+4*5*6+7*8 - 9 ?

25

Codificacin y depuracin
Es imposible que el programa funcione a la primera Depuracin: aplicar "sentido comn"
Cmo trazar la ejecucin del programa Cmo decidir si hay que trazar la ejecucin interna de un mtodo o sirve con comprobar el resultado de dicha ejecucin La tcnica de comentarlo todo e ir descomentando poco a poco.

El objetivo es "cazar" el error, deducir, indagar, buscar...


(sin desesperarse)

26