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 U SANDO LISTAS POR COMPRENSIÓN [x | x  [5,7,4,2,8,6,4,5,8,2,7,4], x  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]  ? Sea a una secuencia, obtener la secuencia inversa de a. Sea a una secuencia y n un natural, obtener la secuencia que queda de eliminar los primeros n elementos de a. AEDI 9 Especificación – Práctica 2

10 M ÁS EJERCICIOS CON SECUENCIAS Especificar el problema de, dadas dos listas de enteros, devolver la suma de las cabezas de cada una. Por ejemplo: a = [1,2,3] y b = [4,5,6]  1 + 4 = 5 Especificar el problema de, dadas dos listas de enteros, devolver la suma del primer elemento par de cada una. Por ejemplo: a = [1,2,3] y b = [4,5,6]  2 + 4 = 6 Especificar el problema de, dadas dos listas con números enteros (que posean igual longitud), devolver la suma elemento a elemento. Por ejemplo: a = [1,2,3] y b = [4,5,6]  [5,7,9] Variante: no requerir que sean de igual longitud y suponer que se devuelve la suma hasta que alguna se acaba. AEDI 10 Especificaión – Práctica 2

11 M ÁS EJERCICIOS CON SECUENCIAS Encontrar el índice (la posición) del menor elemento en una secuencia de números reales distintos no negativos. Especificar el problema de, dada una lista de enteros, devolver una que tenga los mismo elementos pero ordenada. AEDI 11 Especificaión - Práctica 2

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

13 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: Int{ asegura: result == (if (a > b) then a else b); } problema mayor(a, b: Int) = result: Int{ asegura: result == Beta(a > b)*a + Beta(a<=b)*b; } AEDI 13 Especificación – Práctica 2

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

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

16 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 16 Especificaión – Práctica 2

17 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 17 Especificaión – Práctica 2

18 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 18 Especificaión - Práctica 2

19 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 19 Especificaión - Práctica 2

20 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 a ≠ []; 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 20 Especificaión - Práctica 2

21 M ÁS EJERCICIOS CON SECUENCIAS Especificar el problema de, dada una lista de enteros, devolver una que tenga los mismos elementos pero ordenada. problema ordenar(a:[Z])=result:[Z]{ asegura : mismos(result,a); asegura : (  i <- [0..|a|-1)) result[i] ≤ result[i+1]; } AEDI 21 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