Bloque 1. Conceptos y técnicas básicas en programación UNIVERSIDAD DE CANTABRIA 1. Introducción 2. Datos y expresiones. Especificación de algoritmos 3. Estructuras algorítmicas básicas 4. Iteración y recursión 5. Iteración y recursión sobre secuencias 6. Iteración y recursión sobre tablas DEPARTAMENTO DE MATEMÁTICAS, ESTADÍSTICA Y COMPUTACIÓN 4 © Michael González Harbour y José Luis Montaña 28/oct/09 Notas: 1 UNIVERSIDAD DE CANTABRIA 1. Introducción 2. Datos y expresiones. Especificación de algoritmos 3. Estructuras algorítmicas básicas • La asignación. Composición secuencial de instrucciones. La instrucción alternativa simple y múltiple. Alternativa exclusiva y general. 4. Iteración y recursión 5. Iteración y recursión sobre secuencias 6. Iteración y recursión sobre tablas DEPARTAMENTO DE MATEMÁTICAS, ESTADÍSTICA Y COMPUTACIÓN © Michael González Harbour y José Luis Montaña 28/oct/09 2 3.1. La asignación UNIVERSIDAD DE CANTABRIA La instrucción de asignación consiste en dar valor a una variable Sintaxis: Variable:=expresión • primero se evalúa la expresión • después el resultado se guarda en la variable • el valor anterior de la variable se pierde - aunque se puede usar en la expresión El tipo de la expresión debe ser compatible con el tipo de la variable DEPARTAMENTO DE MATEMÁTICAS, ESTADÍSTICA Y COMPUTACIÓN © Michael González Harbour y José Luis Montaña 28/oct/09 Corrección de la asignación: Ejemplo 3 UNIVERSIDAD DE CANTABRIA Podemos averiguar la corrección de un algoritmo que dispone de una asignación, comprobando la precondición y postcondición algoritmo ejemplo // debemos encontrar la expresión E que hace // correcto el algoritmo var entero x,y; fvar {Pre: x+y=X, y=Y} x:=E; {Post: x=X, y=Y} falgoritmo DEPARTAMENTO DE MATEMÁTICAS, ESTADÍSTICA Y COMPUTACIÓN © Michael González Harbour y José Luis Montaña 28/oct/09 4 Corrección de la asignación: solución al ejemplo UNIVERSIDAD DE CANTABRIA E es la expresión x+y Explicación: • la postcondición es {x=X, y=Y} • si sustituimos x por x+y en la postcondición obtenemos {x+y=X, y=Y} - que es justamente la precondición x X-Y valor inicial y Y x:=x+y x X valor final DEPARTAMENTO DE MATEMÁTICAS, ESTADÍSTICA Y COMPUTACIÓN y Y © Michael González Harbour y José Luis Montaña 28/oct/09 Corrección de la asignación 5 UNIVERSIDAD DE CANTABRIA x Llamamos R E a la sustitución en el predicado R de toda aparición de la variable x por la expresión E Axioma de la asignación • para toda variable x y toda expresión válida E del mismo tipo y todo predicado R, la especificación siguiente es correcta x { RE } x:=E; {R } DEPARTAMENTO DE MATEMÁTICAS, ESTADÍSTICA Y COMPUTACIÓN © Michael González Harbour y José Luis Montaña 28/oct/09 6 Regla de inferencia de la asignación UNIVERSIDAD DE CANTABRIA Combinando el axioma de la asignación con la primera regla de consecuencia de una especificación (ver capítulo 2), se obtiene • Para que esta especificación sea correcta {P } x:=E; {Q} • se debe cumplir que DEPARTAMENTO DE MATEMÁTICAS, ESTADÍSTICA Y COMPUTACIÓN P ⇒ QE x © Michael González Harbour y José Luis Montaña 28/oct/09 3.2. Composición secuencial de instrucciones 7 UNIVERSIDAD DE CANTABRIA Una de las estructuras algorítmicas básicas es la composición secuencial • ejecutar un algoritmo a continuación de otro • el orden en que se ejecutan influye en el resultado Sintaxis algoritmo 1; algoritmo 2 o algoritmo 1; DEPARTAMENTO DE MATEMÁTICAS, ESTADÍSTICA Y COMPUTACIÓN algoritmo 2 © Michael González Harbour y José Luis Montaña 28/oct/09 8 Composición secuencial de asignaciones UNIVERSIDAD DE CANTABRIA Una composición de dos asignaciones var tipo1 x1; tipo2 x2; fvar {Pre:P} x1:=E1; x2:=E2; {Post:Q} x2 x1 Es correcta si P ⇒ Q E2 ) E1 xn xn – 1 Si son n expresiones, P ⇒ Q En ) En – 1 DEPARTAMENTO DE MATEMÁTICAS, ESTADÍSTICA Y COMPUTACIÓN x1 … ) E1 © Michael González Harbour y José Luis Montaña 28/oct/09 Ejemplos 9 UNIVERSIDAD DE CANTABRIA algoritmo intercambiar // debemos intercambiar los valores de x y de y var entero x,y; fvar {Pre: x=X, y=Y} var entero temp; fvar temp:=x; x:=y; y:=temp; {Post: x=Y, y=X} falgoritmo DEPARTAMENTO DE MATEMÁTICAS, ESTADÍSTICA Y COMPUTACIÓN © Michael González Harbour y José Luis Montaña 28/oct/09 10 Traza de intercambiar valor inicial x X y Y UNIVERSIDAD DE CANTABRIA temp ? temp:=x valor inter. x X y Y temp X y Y temp X x:=y valor inter. x Y y:=temp valor final DEPARTAMENTO DE MATEMÁTICAS, ESTADÍSTICA Y COMPUTACIÓN x Y y X temp X © Michael González Harbour y José Luis Montaña 28/oct/09 11 Corrección de intercambiar postcondición x=Y, y=X UNIVERSIDAD DE CANTABRIA sustituir y por temp x=Y, temp=X x por y y=Y, temp=X temp por x precondición DEPARTAMENTO DE MATEMÁTICAS, ESTADÍSTICA Y COMPUTACIÓN y=Y, x=X © Michael González Harbour y José Luis Montaña 28/oct/09 12 Ejemplo: clase Circulo UNIVERSIDAD DE CANTABRIA Circulo real centroX real centroY real radio Circulo(real x, real y, real r) real centroX() real centroY() real radio() real area() dibuja() DEPARTAMENTO DE MATEMÁTICAS, ESTADÍSTICA Y COMPUTACIÓN © Michael González Harbour y José Luis Montaña 28/oct/09 Especificación de los métodos 13 UNIVERSIDAD DE CANTABRIA método Circulo(real x, real y, real r) {Pre: x=X, y=Y, r=R, r>=0} constructor {Post: centroX=X & centroY=Y & radio=R} fmétodo método centroX() retorna real {Pre:} obtener la coordenada x del centro {Post: valor retornado=centroX} fmétodo // centroY y radio son similares DEPARTAMENTO DE MATEMÁTICAS, ESTADÍSTICA Y COMPUTACIÓN © Michael González Harbour y José Luis Montaña 28/oct/09 14 Especificación de los métodos (cont.) UNIVERSIDAD DE CANTABRIA método area() retorna real {Pre:} cálculo del área {Post: valor retornado=π⋅radio2} fmétodo método dibuja( {Pre:} dibuja el círculo en la pantalla {Post: el círculo se ha dibujado en la pantalla} fmétodo DEPARTAMENTO DE MATEMÁTICAS, ESTADÍSTICA Y COMPUTACIÓN © Michael González Harbour y José Luis Montaña 28/oct/09 Diseño de los métodos 15 UNIVERSIDAD DE CANTABRIA método Circulo(real x, real y, real r) {Pre: x=X, y=Y, r=R, R>=0} centroX:=x; centroY:=y; radio:=r; {Post: centroX=X & centroY=Y & radio=R} fmétodo método centroX() retorna real {Pre:} retorna centroX; {Post: valor retornado=centroX} fmétodo // centroY y radio son similares DEPARTAMENTO DE MATEMÁTICAS, ESTADÍSTICA Y COMPUTACIÓN © Michael González Harbour y José Luis Montaña 28/oct/09 16 Diseño de los métodos (cont.) UNIVERSIDAD DE CANTABRIA método area() retorna real {Pre:} retorna π⋅radio2; {Post: valor retornado=π⋅radio2} fmétodo // el método dibuja es complejo y requiere // instrucciones que aún no conocemos DEPARTAMENTO DE MATEMÁTICAS, ESTADÍSTICA Y COMPUTACIÓN © Michael González Harbour y José Luis Montaña 28/oct/09 3.3. La instrucción alternativa 17 UNIVERSIDAD DE CANTABRIA La instrucción alternativa, o condicional, nos permite ejecutar unas instrucciones u otras en función de: • una condición booleana: alternativa simple • múltiples condiciones booleanas: alternativa múltiple - alternativa exclusiva: las condiciones son disjuntas (es decir, sólo una puede ser cierta) - alternativa general: pueden cumplirse varias de las condiciones DEPARTAMENTO DE MATEMÁTICAS, ESTADÍSTICA Y COMPUTACIÓN © Michael González Harbour y José Luis Montaña 28/oct/09 18 Sintaxis de la alternativa simple UNIVERSIDAD DE CANTABRIA Ejecución condicional de instrucciones si condición entonces instrucciones fsi Ejecución condicional de una de entre dos alternativas si condición entonces instrucciones si no instrucciones fsi DEPARTAMENTO DE MATEMÁTICAS, ESTADÍSTICA Y COMPUTACIÓN © Michael González Harbour y José Luis Montaña 28/oct/09 Ejemplo 1: valor absoluto 19 UNIVERSIDAD DE CANTABRIA método valorAbsoluto(real x) retorna real {Pre:} si x>=0 entonces retorna x; si no retorna -x; fsi {Post: valor retornado=|x|} fmétodo DEPARTAMENTO DE MATEMÁTICAS, ESTADÍSTICA Y COMPUTACIÓN © Michael González Harbour y José Luis Montaña 28/oct/09 20 Ejemplo 2: máximo de dos enteros UNIVERSIDAD DE CANTABRIA método maximo(real x,y) retorna real {Pre:} si x>=y entonces retorna x; si no retorna y; fsi {Post: valor retornado=máximo(x,y)} fmétodo DEPARTAMENTO DE MATEMÁTICAS, ESTADÍSTICA Y COMPUTACIÓN © Michael González Harbour y José Luis Montaña 28/oct/09 Sintaxis de la alternativa múltiple 21 UNIVERSIDAD DE CANTABRIA La condición depende de múltiples predicados booleanos si condicion1 -> instrucciones; condicion2 -> instrucciones; condicion3 -> instrucciones; fsi Las condiciones se evalúan en el orden en que aparecen • cuando una es cierta, se ejecutan sus instrucciones y se termina la instrucción condicional Cada conjunto de instrucciones debe conducir a la postcondición Recomendación: Deben cubrirse todos los casos (al menos una de las condiciones debe ser cierta) DEPARTAMENTO DE MATEMÁTICAS, ESTADÍSTICA Y COMPUTACIÓN © Michael González Harbour y José Luis Montaña 28/oct/09 22 3.4. Alternativa exclusiva y general UNIVERSIDAD DE CANTABRIA Alternativa exclusiva • Las condiciones son disjuntas (es decir si una es cierta, ninguna de las otras puede ser cierta) Alternativa general • Las condiciones no tienen por qué ser disjuntas • el orden en que se escriben influye en el resultado La alternativa simple es siempre exclusiva DEPARTAMENTO DE MATEMÁTICAS, ESTADÍSTICA Y COMPUTACIÓN © Michael González Harbour y José Luis Montaña 28/oct/09 Ejemplo: ordenación de tres números 23 UNIVERSIDAD DE CANTABRIA Especificación: var p,q,s : real fvar método ordenar3Numeros (real x,y,z) {Pre:} ordenar {Post: p<=q<=s, (p,q,s) es permutación de (x,y,z)} fmétodo DEPARTAMENTO DE MATEMÁTICAS, ESTADÍSTICA Y COMPUTACIÓN © Michael González Harbour y José Luis Montaña 28/oct/09 24 Ejemplo: alternativa general UNIVERSIDAD DE CANTABRIA método ordenar3Numeros (real x,y,z) {Pre:} si (x<=y)&(y<=z) -> p:=x; q:=y; s:=z; (x<=z)&(z<=y) -> p:=x; q:=z; s:=y; (y<=x)&(x<=z) -> p:=y; q:=x; s:=z; (y<=z)&(z<=x) -> p:=y; q:=z; s:=x; (z<=x)&(x<=y) -> p:=z; q:=x; s:=y; (z<=y)&(y<=x) -> p:=z; q:=y; s:=x; fsi {Post: p<=q<=s, (p,q,s) es permutación de (x,y,z)} fmétodo Observar que, por ejemplo, si x=y=z, se cumplen todas las condiciones DEPARTAMENTO DE MATEMÁTICAS, ESTADÍSTICA Y COMPUTACIÓN © Michael González Harbour y José Luis Montaña 28/oct/09 Ejemplo: alternativa exclusiva 25 UNIVERSIDAD DE CANTABRIA método ordenar3Numeros (real x,y,z) {Pre:} si (x<y)&(z<x) -> p:=z; q:=x; s:=y; (x<y)&(x<=z)&(z<y) -> p:=x; q:=z; s:=y; (x<y)&(y<=z) -> p:=x; q:=y; s:=z; (y<=x)&(z<y) -> p:=z; q:=y; s:=x; (y<=x)&(y<=z)&(z<x)-> p:=y; q:=z; s:=x; (y<=x)&(x<=z) -> p:=y; q:=x; s:=z; fsi {Post: p<=q<=s, (p,q,s) es permutación de (x,y,z)} fmétodo DEPARTAMENTO DE MATEMÁTICAS, ESTADÍSTICA Y COMPUTACIÓN © Michael González Harbour y José Luis Montaña 28/oct/09 26 Ejemplo: dos alternativas exclusivas método ordenar3Numeros (real x,y,z) si x<y entonces si (z<x) -> p:=z; q:=x; (x<=z)&(z<y) -> p:=x; q:=z; (y<=z) -> p:=x; q:=y; fsi si no si (z<y) -> p:=z; q:=y; (y<=z)&(z<x) -> p:=y; q:=z; (x<=z) -> p:=y; q:=x; fsi fsi fmétodo DEPARTAMENTO DE MATEMÁTICAS, ESTADÍSTICA Y COMPUTACIÓN © Michael González Harbour y José Luis Montaña 28/oct/09 Ejemplo: tres alternativas UNIVERSIDAD DE CANTABRIA s:=y; s:=y; s:=z; s:=x; s:=x; s:=z; 27 UNIVERSIDAD DE CANTABRIA Método de la burbuja método ordenar3Numeros (real x,y,z) {Pre:} p:=x; q:=y; s:=z; si (p>q) entonces intercambiar p y q; fsi si (p>s) entonces intercambiar p y s; fsi si (q>s) entonces intercambiar q y s; fsi {Post: p<=q<=s, (p,q,s) es permutación de (x,y,z)} fmétodo DEPARTAMENTO DE MATEMÁTICAS, ESTADÍSTICA Y COMPUTACIÓN © Michael González Harbour y José Luis Montaña 28/oct/09 28