Documente Academic
Documente Profesional
Documente Cultură
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.
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
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.
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
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
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
Seleccin mltiple
Mientras
14
Repite hasta
Lneas de flujo
15
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
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
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
24
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.
26