La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

L ENGUAJE DE E SPECIFICACIÓN Algoritmos y Estructuras de Datos I Especificación – Práctica 2 AEDI Especificación – Práctica 2 1.

Presentaciones similares


Presentación del tema: "L ENGUAJE DE E SPECIFICACIÓN Algoritmos y Estructuras de Datos I Especificación – Práctica 2 AEDI Especificación – Práctica 2 1."— Transcripción de la presentación:

1 L ENGUAJE DE E SPECIFICACIÓN Algoritmos y Estructuras de Datos I Especificación – Práctica 2 AEDI Especificación – Práctica 2 1

2 E SPECIFICACIÓN DE PROBLEMAS Expresamos formalmente qué debe cumplir una función para ser solución al problema dado. No expresamos cómo solucionarlo Puede no haber solución al problema que planteamos. O tal vez, no sabemos escribirla. Recordemos que lo que queremos especificar es el contrato que debe cumplir la función para ser considerada solución del problema planteado. AEDI 2 Especificación – Práctica 2

3 E SPECIFICACIÓN DE PROBLEMAS N OTACIÓN problema nombre(parámetros) = salida { modifica: parámetro; requiere: expresión1; asegura: expresión2; -- DEFINICIÓN DE AUX – } AEDI 3 Especificación – Práctica 2

4 E JERCICIOS Especificar el problema de, dados dos enteros, devolver cualquiera de ellos. Especificar el problema de, dados dos enteros, devolver el máximo. AEDI 4 Especificaión – Práctica 2

5 O PERACIONES CON SECUENCIAS long(a) ó |a| indice(s,i) ó s[i] ó s i cab(s) cola(s) en(e,s) ó e en s ó e  s cons(e,s) ó e:s conc(s,t) ó s++t sub(s, e, f) ó s[e..f] cambiar (s, i, e) AEDI 5 Especificación – Práctica 2

6 O PERACIONES CON SECUENCIAS alguno(s) todos(s) sum(s) ó  s prod(s) ó  s AEDI 6 Especificación – Práctica 2

7 R ECORDANDO Para todo: (  selectores, condiciones) propiedad Equivale a todos([propiedad | selectores, condiciones]) Existe: (  selectores, condiciones) propiedad Equivale a alguno([propiedad | selectores, condiciones]) Nota: cuando decimos “propiedad” nos referimos a expresiones de tipo Bool. AEDI 7 Especificación – Práctica 2

8 S ECUENCIAS POR COMPRENSIÓN Notación: [expresión | selectores, condiciones] selectores: variable  secuencia (o <- ) variable va tomando el valor de cada elemento de secuencia en orden. condiciones : expresiones de tipo Bool Resultado Secuencia el valor de la expresión calculado para los elementos seleccionados por los selectores que cumplen las condiciones AEDI 8 Especificación – Práctica 2

9 R ECORDANDO Contar cuántas veces aparece x en la secuencia a aux cuenta(x: T, a: [T]): Int = long([y | y <- a, y == x]); Determinar si dos secuencias tienen los mismos elementos (sin importar el orden) aux mismos(a, b: [T]): Bool = |a| == |b| && (  c  a) cuenta(c,a) == cuenta(c,b); AEDI 9 Especificación – Práctica 2

10 E SPECIFICACIÓN DE PROBLEMAS E JERCICIO – SOLUCIÓN Especificar el problema de, dados dos enteros, devolver el máximo. problema mayor(a, b: Int) = result: Bool{ asegura: result == (if (a > b) then a else b); } problema mayor(a, b: Int) = result: Bool{ asegura: result == Beta(a > b)*a + Beta(a<=b)*b; } AEDI 10 Especificación – Práctica 2

11 E SPECIFICACIÓN DE PROBLEMAS E JERCICIO – SOLUCIÓN Especificar el problema de, dados dos enteros, devolver cualquiera de ellos. problema dameUno(a, b: Z) = result: Z{ asegura: (result == a) || (result == b); } AEDI 11 Especificación – Práctica 2

12 U SANDO LISTAS POR COMPRENSIÓN [x | x  [5,7,4,2,8,6,4,5,8,2,7,4], x  4] = [4,2,4,2,4] [x+y | x  a, y  b, x  y], qué indica esta expresión? Por ejemplo: a = [1,2,3] y b = [1,2,3]  [3,4,3,5,4,5] Sea a una secuencia, obtener la secuencia inversa de a: aux reverso(a:[T]):[T] = [x[|a|-i-1] | i<-[0..|a|)] Sea a una secuencia y n un natural, obtener la secuencia que queda de eliminar los primeros n elementos de s: aux quitarN(n:Int, a:[T]) = [a[i] | i =n] AEDI 12 Especificación – Práctica 2

13 M ÁS EJERCICIOS CON SECUENCIAS Especificar el problema de, dadas dos listas de enteros, devolver la suma de las cabezas de cada una. problema sumaCabezas (a, b: [Z]) = result : Z { requiere : |a| > 0 && |b| > 0; asegura : result == cab(a) + cab(b); } AEDI 13 Especificaión – Práctica 2

14 M ÁS EJERCICIOS CON SECUENCIAS Especificar el problema de, dadas dos listas de enteros, devolver la suma del primer elemento par de cada una. problema sumaPrimerosPares (a, b: [Z]) = result : Z { requiere : existePar(a) && existePar(b); asegura : result == primerPar(a) + primerPar(b); aux existePar(a: [Z]) : Bool = (  x <- a) a mod 2 == 0; aux primerPar(a: [Z]) : Z = cab([ x | x <- a, a mod 2 == 0]); } AEDI 14 Especificaión – Práctica 2

15 M ÁS EJERCICIOS CON SECUENCIAS Especificar el problema de, dadas dos listas con números enteros (que posean igual longitud), devolver la suma elemento a elemento. problema sumaListas (a, b: [Z]) = result : [Z] { requiere : |a| == |b|; asegura : result == [ a[i] + b[i] | i <- [0..|a|)]; } AEDI 15 Especificaión - Práctica 2

16 M ÁS EJERCICIOS CON SECUENCIAS Variante: no requerir que sean de igual longitud y suponer que se devuelve la suma hasta que alguna se acaba. problema sumaListas (a, b: [Z]) = result : [Z] { asegura : result == [a[i] + b[i] | i <- [0..min(|a|,|b|))]; aux min(a,b: Z) : Z = if (a < b) then a else b; } AEDI 16 Especificaión - Práctica 2

17 M ÁS EJERCICIOS CON SECUENCIAS Encontrar el índice (la posición) del menor elemento en una secuencia de números reales distintos no negativos. problema indiceMenorDistintos(a:[Float])=result:[Z]{ requiere noNegativos: (  x <- a) x  0; requiere distintos: (  i <- [0..|a|), j <- [0..|a|), i ≠ j) a[i] ≠ a[j]; asegura : 0 ≤ result < |a|; asegura : (  x <- a) a[result] ≤ x; } AEDI 17 Especificaión - Práctica 2

18 M ÁS EJERCICIOS CON SECUENCIAS Especificar el problema de, dada una lista de enteros, devolver una que tenga los mismo elementos pero ordenada. problema ordenar(a:[Z])=result:[Z]{ asegura : mismos(result,a); asegura : (  i <- [0..|a|-1)) result[i] ≤ result[i+1]; } AEDI 18 Especificaión - Práctica 2


Descargar ppt "L ENGUAJE DE E SPECIFICACIÓN Algoritmos y Estructuras de Datos I Especificación – Práctica 2 AEDI Especificación – Práctica 2 1."

Presentaciones similares


Anuncios Google