1 / 18

Lenguaje de Especificación

Lenguaje de Especificación. Algoritmos y Estructuras de Datos I Especificación – Práctica 2. Especificación de problemas. Expresamos formalmente qué debe cumplir una función para ser solución al problema dado. No expresamos cómo solucionarlo

keitha
Download Presentation

Lenguaje de Especificación

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Lenguaje de Especificación Especificación – Práctica 2 Algoritmos y Estructuras de Datos I Especificación – Práctica 2

  2. Especificació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. Especificación – Práctica 2

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

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

  5. Operaciones con secuencias • long(a) ó |a| • indice(s,i) ó s[i] ó si • 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) Especificación – Práctica 2

  6. Operaciones con secuencias • alguno(s) • todos(s) • sum(s) ó s • prod(s) ó s Especificación – Práctica 2

  7. Recordando • 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. Especificación – Práctica 2

  8. Secuencias 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 Especificación – Práctica 2

  9. Recordando • 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); Especificación – Práctica 2

  10. Especificación de problemasEjercicio – 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; } Especificación – Práctica 2

  11. Especificación de problemasEjercicio – 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); } Especificación – Práctica 2

  12. Usando 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<-[0...|a|), i>=n] 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); } 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]); } 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|)]; } 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; } 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; } 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]; } Especificaión - Práctica 2

More Related