JOSÉ ÁNGEL ACOSTA RODRÍGUEZ INFORMÁTICA CURSO 2009/10 0101010100010101011101010101010100101001010100010010 1010101001100101011111010101010101001010100101010101 0011110101010101011110101010100110100101010100101010 1010010101010100111101010101010111101010101001101001 0101010010101010100101010101001111010101010101111010 1010100110100101010100101010101001010101010011110101 0101010111101010101001101001010101001010101010010101 0101001111010101010101111010101010011010010101010010 1010101001010101010011110101010101011110101010100110 1001010101001010101010010101010100111101010101010111 1010101010011010010101010010101010100101010101001111 0101010101011110101010100110100101010100101010101001 0101010100111101010101010111101010101001101001010101 TEORÍA DE ALGORITMOS 0010101010100101010101001111010101010101111011110101 0101001101001010101001010101010010101010100111100101 0101010111101111010101010011010010101010010101010100 1010101010011110101010101011110111101010101001101001 0101010010101010100101010101001111010101010101111011 PROGRAMACIÓN ESTRUCTURADA 0101010100010101011101010101010100101001010100010010 1010101001100101011111010101010101001010100101010101 0011110101010101011110101010100110100101010100101010 1010010101010100111101010101010111101010101001101001 0101010010101010100101010101001111010101010101111010 • C. Böhm (IT 1923) & G. Jacopini (IT) 1010100110100101010100101010101001010101010011110101 – Structure Program Theorem: “Flow Diagrams, Turing Machines and Languages with Only Two Formation Rules”, 1966: 0101010111101010101001101001010101001010101010010101 – Programación estructurada ⇔ cumple 3 condiciones 0101001111010101010101111010101010011010010101010010 • E. W. Dijkstra físico (NL, 1930/2002) 1010101001010101010011110101010101011110101010100110 – “Algoritmo de caminos mínimos”, 1959, Premio Turing 1972 1001010101001010101010010101010100111101010101010111 – “A Case against the GO TO Statement”, 1968, Editor cambió el 1010101010011010010101010010101010100101010101001111 título a “Go To Statement Considered Harmful” 0101010101011110101010100110100101010100101010101001 EWD215: http://www.cs.utexas.edu/users/EWD/ 0101010100111101010101010111101010101001101001010101 – Programación estructurada ⇔ no tiene GOTO 0010101010100101010101001111010101010101111011110101 – GOTO ⇔ código espagueti 0101001101001010101001010101010010101010100111100101 • Jackson y Warnier, 1974. Técnicas de programación 0101010111101111010101010011010010101010010101010100 estructurada. Metodologías 1010101010011110101010101011110111101010101001101001 PROGRAMACIÓN ESTRUCTURADA 0101010010101010100101010101001111010101010101111011 Historia 0101010100010101011101010101010100101001010100010010 1010101001100101011111010101010101001010100101010101 0011110101010101011110101010100110100101010100101010 1010010101010100111101010101010111101010101001101001 0101010010101010100101010101001111010101010101111010 UNIVERSALIDAD ALGORITMO 1010100110100101010100101010101001010101010011110101 0101010111101010101001101001010101001010101010010101 ELEMENTOS 0101001111010101010101111010101010011010010101010010 Y PROBLEMA N 1010101001010101010011110101010101011110101010100110 UCIÓ OPERACIONES SOL E R 1001010101001010101010010101010100111101010101010111 ? OBJETOS 1010101010011010010101010010101010100101010101001111 ¿Quien? 0101010101011110101010100110100101010100101010101001 ¿ Dónde estamos ? 0101010100111101010101010111101010101001101001010101 VARIABLES PROGRAMA N 0010101010100101010101001111010101010101111011110101 ACIÓ CONSTANTES IC IF … COD 0101001101001010101001010101010010101010100111100101 0101010111101111010101010011010010101010010101010100 1010101010011110101010101011110111101010101001101001 PROGRAMACIÓN ESTRUCTURADA 0101010010101010100101010101001111010101010101111011 INGENIERÍA AERONÁUTICA 1 JOSÉ ÁNGEL ACOSTA RODRÍGUEZ INFORMÁTICA CURSO 2009/10 0101010100010101011101010101010100101001010100010010 1010101001100101011111010101010101001010100101010101 0011110101010101011110101010100110100101010100101010 1010010101010100111101010101010111101010101001101001 0101010010101010100101010101001111010101010101111010 / Cambios, localización, funcionamiento, … 1010100110100101010100101010101001010101010011110101 0101010111101010101001101001010101001010101010010101 GOTOs 0101001111010101010101111010101010011010010101010010 1010101001010101010011110101010101011110101010100110 1001010101001010101010010101010100111101010101010111 1010101010011010010101010010101010100101010101001111 0101010101011110101010100110100101010100101010101001 0101010100111101010101010111101010101001101001010101 0010101010100101010101001111010101010101111011110101 0101001101001010101001010101010010101010100111100101 0101010111101111010101010011010010101010010101010100 No estructurado Estructurado 1010101010011110101010101011110111101010101001101001 PROGRAMACIÓN ESTRUCTURADA 0101010010101010100101010101001111010101010101111011 Motivación 0101010100010101011101010101010100101001010100010010 1010101001100101011111010101010101001010100101010101 0011110101010101011110101010100110100101010100101010 1010010101010100111101010101010111101010101001101001 0101010010101010100101010101001111010101010101111010 • Programas propios: 1010100110100101010100101010101001010101010011110101 – 1 sólo punto de entrada y 0101010111101010101001101001010101001010101010010101 salida 0101001111010101010101111010101010011010010101010010 – Al menos 1 camino va 1010101001010101010011110101010101011110101010100110 desde principio a fin 1001010101001010101010010101010100111101010101010111 – No posee bucles infinitos 1010101010011010010101010010101010100101010101001111 0101010101011110101010100110100101010100101010101001 • Análisis descendente 0101010100111101010101010111101010101001101001010101 • Th. Böhm & Jacopini: 0010101010100101010101001111010101010101111011110101 Secuencial 0101001101001010101001010101010010101010100111100101 Programa propio ⇔ Estructuras Selectiva 0101010111101111010101010011010010101010010101010100 Repetitiva 1010101010011110101010101011110111101010101001101001 PROGRAMACIÓN ESTRUCTURADA 0101010010101010100101010101001111010101010101111011 Programación estructurada 0101010100010101011101010101010100101001010100010010 1010101001100101011111010101010101001010100101010101 0011110101010101011110101010100110100101010100101010 1010010101010100111101010101010111101010101001101001 0101010010101010100101010101001111010101010101111010 • Acciones consecutivas 1010100110100101010100101010101001010101010011110101 0101010111101010101001101001010101001010101010010101 0101001111010101010101111010101010011010010101010010 1010101001010101010011110101010101011110101010100110 1001010101001010101010010101010100111101010101010111 1010101010011010010101010010101010100101010101001111 0101010101011110101010100110100101010100101010101001 • Ejemplo: suma 0101010100111101010101010111101010101001101001010101 – Lectura 0010101010100101010101001111010101010101111011110101 – Cálculo 0101001101001010101001010101010010101010100111100101 – Escritura 0101010111101111010101010011010010101010010101010100 1010101010011110101010101011110111101010101001101001 PROGRAMACIÓN ESTRUCTURADA 0101010010101010100101010101001111010101010101111011 Estructura Secuencial INGENIERÍA AERONÁUTICA 2 JOSÉ ÁNGEL ACOSTA RODRÍGUEZ INFORMÁTICA CURSO 2009/10 0101010100010101011101010101010100101001010100010010 1010101001100101011111010101010101001010100101010101 0011110101010101011110101010100110100101010100101010 1010010101010100111101010101010111101010101001101001 0101010010101010100101010101001111010101010101111010 • Se evalúa condición 1010100110100101010100101010101001010101010011110101 0101010111101010101001101001010101001010101010010101 0101001111010101010101111010101010011010010101010010 1010101001010101010011110101010101011110101010100110 1001010101001010101010010101010100111101010101010111 1010101010011010010101010010101010100101010101001111 0101010101011110101010100110100101010100101010101001 0101010100111101010101010111101010101001101001010101 • Tipos: 0010101010100101010101001111010101010101111011110101 – Simple 0101001101001010101001010101010010101010100111100101 0101010111101111010101010011010010101010010101010100 – Múltiple 1010101010011110101010101011110111101010101001101001 PROGRAMACIÓN ESTRUCTURADA 0101010010101010100101010101001111010101010101111011 Estructura Selectiva 0101010100010101011101010101010100101001010100010010 1010101001100101011111010101010101001010100101010101 0011110101010101011110101010100110100101010100101010 1010010101010100111101010101010111101010101001101001 0101010010101010100101010101001111010101010101111010 • Múltiple: 1010100110100101010100101010101001010101010011110101 0101010111101010101001101001010101001010101010010101 0101001111010101010101111010101010011010010101010010 1010101001010101010011110101010101011110101010100110 1001010101001010101010010101010100111101010101010111 1010101010011010010101010010101010100101010101001111 0101010101011110101010100110100101010100101010101001 0101010100111101010101010111101010101001101001010101 0010101010100101010101001111010101010101111011110101 0101001101001010101001010101010010101010100111100101 0101010111101111010101010011010010101010010101010100 1010101010011110101010101011110111101010101001101001 PROGRAMACIÓN ESTRUCTURADA 0101010010101010100101010101001111010101010101111011 Estructura Selectiva 0101010100010101011101010101010100101001010100010010 1010101001100101011111010101010101001010100101010101 0011110101010101011110101010100110100101010100101010 1010010101010100111101010101010111101010101001101001 0101010010101010100101010101001111010101010101111010 • Condición + iteración: 1010100110100101010100101010101001010101010011110101 0101010111101010101001101001010101001010101010010101 0101001111010101010101111010101010011010010101010010 1010101001010101010011110101010101011110101010100110 1001010101001010101010010101010100111101010101010111 1010101010011010010101010010101010100101010101001111 0101010101011110101010100110100101010100101010101001 0101010100111101010101010111101010101001101001010101 REPETIR … HASTA MIENTRAS … HACER 0010101010100101010101001111010101010101111011110101 • Ejemplo: vector 0101001101001010101001010101010010101010100111100101 0101010111101111010101010011010010101010010101010100 1010101010011110101010101011110111101010101001101001 PROGRAMACIÓN ESTRUCTURADA 0101010010101010100101010101001111010101010101111011 Estructura Repetitiva INGENIERÍA AERONÁUTICA 3 JOSÉ ÁNGEL ACOSTA RODRÍGUEZ INFORMÁTICA CURSO 2009/10 0101010100010101011101010101010100101001010100010010 1010101001100101011111010101010101001010100101010101 0011110101010101011110101010100110100101010100101010 1010010101010100111101010101010111101010101001101001 0101010010101010100101010101001111010101010101111010 • Concepto de Iteración: 1010100110100101010100101010101001010101010011110101 – N ← 3, ⇒ N = 3 0101010111101010101001101001010101001010101010010101 – i ← 1, ⇒ i = 1 0101001111010101010101111010101010011010010101010010 – Bucle: 1010101001010101010011110101010101011110101010100110 1) Proceso: 1001010101001010101010010101010100111101010101010111 • i = 1, ⇒ v1 = 12, v = [ 1, ? ,?] 1010101010011010010101010010101010100101010101001111 2) Actualización: 0101010101011110101010100110100101010100101010101001 • i ←i+1 ⇒i =2 3) Condición 0101010100111101010101010111101010101001101001010101 • NO: i ≯ 3 ⇒ IR a 1) 0010101010100101010101001111010101010101111011110101 • SI: i > 3 ⇒ IR a 4) 0101001101001010101001010101010010101010100111100101 4) FIN 0101010111101111010101010011010010101010010101010100 1010101010011110101010101011110111101010101001101001 PROGRAMACIÓN ESTRUCTURADA 0101010010101010100101010101001111010101010101111011 Estructura Repetitiva 0101010100010101011101010101010100101001010100010010 1010101001100101011111010101010101001010100101010101 0011110101010101011110101010100110100101010100101010 1010010101010100111101010101010111101010101001101001 0101010010101010100101010101001111010101010101111010 • Concepto de Iteración: 1010100110100101010100101010101001010101010011110101 – N ← 3, ⇒ N = 3 0101010111101010101001101001010101001010101010010101 – i ← 1, ⇒ i = 1 0101001111010101010101111010101010011010010101010010 – Bucle: 1010101001010101010011110101010101011110101010100110 1) Proceso: 1001010101001010101010010101010100111101010101010111 • i = 2, ⇒ v2 = 22, v = [ 1, 4 ,?] 1010101010011010010101010010101010100101010101001111 2) Actualización: 0101010101011110101010100110100101010100101010101001 • i ←i+1 ⇒i =3 3) Condición 0101010100111101010101010111101010101001101001010101 • NO: i ≯ 3 ⇒ IR a 1) 0010101010100101010101001111010101010101111011110101 • SI: i > 3 ⇒ IR a 4) 0101001101001010101001010101010010101010100111100101 4) FIN 0101010111101111010101010011010010101010010101010100 1010101010011110101010101011110111101010101001101001 PROGRAMACIÓN ESTRUCTURADA 0101010010101010100101010101001111010101010101111011 Estructura Repetitiva 0101010100010101011101010101010100101001010100010010 1010101001100101011111010101010101001010100101010101 0011110101010101011110101010100110100101010100101010 1010010101010100111101010101010111101010101001101001 0101010010101010100101010101001111010101010101111010 • Concepto de Iteración: 1010100110100101010100101010101001010101010011110101 – N ← 3, ⇒ N = 3 0101010111101010101001101001010101001010101010010101 – i ← 1, ⇒ i = 1 0101001111010101010101111010101010011010010101010010 – Bucle: 1010101001010101010011110101010101011110101010100110 1) Proceso: 1001010101001010101010010101010100111101010101010111 • i = 3, ⇒ v3 = 32, v = [ 1, 4 ,9] 1010101010011010010101010010101010100101010101001111 2) Actualización: 0101010101011110101010100110100101010100101010101001 • i ←i+1 ⇒i =4 3) Condición 0101010100111101010101010111101010101001101001010101 • NO: i ≯ 3 ⇒ IR a 1) 0010101010100101010101001111010101010101111011110101 • SI: i > 3 ⇒ IR a 4) 0101001101001010101001010101010010101010100111100101 4) FIN 0101010111101111010101010011010010101010010101010100 1010101010011110101010101011110111101010101001101001 PROGRAMACIÓN ESTRUCTURADA 0101010010101010100101010101001111010101010101111011 Estructura Repetitiva INGENIERÍA AERONÁUTICA 4