l enguaje de e specificaciÓn algoritmos y estructuras de datos i especificación – práctica 2...
TRANSCRIPT
![Page 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](https://reader033.vdocuments.pub/reader033/viewer/2022051014/551cedc25503463a7a8b51bf/html5/thumbnails/1.jpg)
LENGUAJE DE ESPECIFICACIÓNAlgoritmos y Estructuras de Datos I
Especificación – Práctica 2
AE
DI
Esp
ecifica
ción
– P
ráctica
2
1
![Page 2: L ENGUAJE DE E SPECIFICACIÓN Algoritmos y Estructuras de Datos I Especificación – Práctica 2 AEDI Especificación – Práctica 2 1](https://reader033.vdocuments.pub/reader033/viewer/2022051014/551cedc25503463a7a8b51bf/html5/thumbnails/2.jpg)
ESPECIFICACIÓN DE PROBLEMAS
Expresamos formalmente qué debe cumplir una función para ser solución al problema dado.
No expresamos cómo solucionarloPuede 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.
AE
DI
2
Esp
ecifica
ción
– P
ráctica
2
![Page 3: L ENGUAJE DE E SPECIFICACIÓN Algoritmos y Estructuras de Datos I Especificación – Práctica 2 AEDI Especificación – Práctica 2 1](https://reader033.vdocuments.pub/reader033/viewer/2022051014/551cedc25503463a7a8b51bf/html5/thumbnails/3.jpg)
ESPECIFICACIÓN DE PROBLEMAS NOTACIÓN
problema nombre(parámetros) = salida {
modifica: parámetro;
requiere: expresión1;
asegura: expresión2;
-- DEFINICIÓN DE AUX –
}
AE
DI
3
Esp
ecifica
ción
– P
ráctica
2
![Page 4: L ENGUAJE DE E SPECIFICACIÓN Algoritmos y Estructuras de Datos I Especificación – Práctica 2 AEDI Especificación – Práctica 2 1](https://reader033.vdocuments.pub/reader033/viewer/2022051014/551cedc25503463a7a8b51bf/html5/thumbnails/4.jpg)
EJERCICIOS
Especificar el problema de, dados dos enteros, devolver cualquiera de ellos.
Especificar el problema de, dados dos enteros, devolver el máximo.
AE
DI
4
Esp
ecifica
ión
– P
ráctica
2
![Page 5: L ENGUAJE DE E SPECIFICACIÓN Algoritmos y Estructuras de Datos I Especificación – Práctica 2 AEDI Especificación – Práctica 2 1](https://reader033.vdocuments.pub/reader033/viewer/2022051014/551cedc25503463a7a8b51bf/html5/thumbnails/5.jpg)
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)
AE
DI
5
Esp
ecifica
ción
– P
ráctica
2
![Page 6: L ENGUAJE DE E SPECIFICACIÓN Algoritmos y Estructuras de Datos I Especificación – Práctica 2 AEDI Especificación – Práctica 2 1](https://reader033.vdocuments.pub/reader033/viewer/2022051014/551cedc25503463a7a8b51bf/html5/thumbnails/6.jpg)
OPERACIONES CON SECUENCIAS
alguno(s) todos(s) sum(s) ó s prod(s) ó s
AE
DI
6
Esp
ecifica
ción
– P
ráctica
2
![Page 7: L ENGUAJE DE E SPECIFICACIÓN Algoritmos y Estructuras de Datos I Especificación – Práctica 2 AEDI Especificación – Práctica 2 1](https://reader033.vdocuments.pub/reader033/viewer/2022051014/551cedc25503463a7a8b51bf/html5/thumbnails/7.jpg)
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.
AE
DI
7
Esp
ecifica
ción
– P
ráctica
2
![Page 8: L ENGUAJE DE E SPECIFICACIÓN Algoritmos y Estructuras de Datos I Especificación – Práctica 2 AEDI Especificación – Práctica 2 1](https://reader033.vdocuments.pub/reader033/viewer/2022051014/551cedc25503463a7a8b51bf/html5/thumbnails/8.jpg)
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
AE
DI
8
Esp
ecifica
ción
– P
ráctica
2
![Page 9: L ENGUAJE DE E SPECIFICACIÓN Algoritmos y Estructuras de Datos I Especificación – Práctica 2 AEDI Especificación – Práctica 2 1](https://reader033.vdocuments.pub/reader033/viewer/2022051014/551cedc25503463a7a8b51bf/html5/thumbnails/9.jpg)
RECORDANDO
Contar cuántas veces aparece x en la secuencia aaux 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);
AE
DI
9
Esp
ecifica
ción
– P
ráctica
2
![Page 10: L ENGUAJE DE E SPECIFICACIÓN Algoritmos y Estructuras de Datos I Especificación – Práctica 2 AEDI Especificación – Práctica 2 1](https://reader033.vdocuments.pub/reader033/viewer/2022051014/551cedc25503463a7a8b51bf/html5/thumbnails/10.jpg)
ESPECIFICACIÓN DE PROBLEMAS EJERCICIO – 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; }
AE
DI
10
Esp
ecifica
ción
– P
ráctica
2
![Page 11: L ENGUAJE DE E SPECIFICACIÓN Algoritmos y Estructuras de Datos I Especificación – Práctica 2 AEDI Especificación – Práctica 2 1](https://reader033.vdocuments.pub/reader033/viewer/2022051014/551cedc25503463a7a8b51bf/html5/thumbnails/11.jpg)
ESPECIFICACIÓN DE PROBLEMAS EJERCICIO – 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); }
AE
DI
11
Esp
ecifica
ción
– P
ráctica
2
![Page 12: L ENGUAJE DE E SPECIFICACIÓN Algoritmos y Estructuras de Datos I Especificación – Práctica 2 AEDI Especificación – Práctica 2 1](https://reader033.vdocuments.pub/reader033/viewer/2022051014/551cedc25503463a7a8b51bf/html5/thumbnails/12.jpg)
USANDO LISTAS POR COMPRENSIÓN
[x | x [5,7,4,2,8,6,4,5,8,2,7,4], x4] = [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]
AE
DI
12
Esp
ecifica
ción
– P
ráctica
2
![Page 13: L ENGUAJE DE E SPECIFICACIÓN Algoritmos y Estructuras de Datos I Especificación – Práctica 2 AEDI Especificación – Práctica 2 1](https://reader033.vdocuments.pub/reader033/viewer/2022051014/551cedc25503463a7a8b51bf/html5/thumbnails/13.jpg)
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);
}
AE
DI
13
Esp
ecifica
ión
– P
ráctica
2
![Page 14: L ENGUAJE DE E SPECIFICACIÓN Algoritmos y Estructuras de Datos I Especificación – Práctica 2 AEDI Especificación – Práctica 2 1](https://reader033.vdocuments.pub/reader033/viewer/2022051014/551cedc25503463a7a8b51bf/html5/thumbnails/14.jpg)
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]);
}
AE
DI
14
Esp
ecifica
ión
– P
ráctica
2
![Page 15: L ENGUAJE DE E SPECIFICACIÓN Algoritmos y Estructuras de Datos I Especificación – Práctica 2 AEDI Especificación – Práctica 2 1](https://reader033.vdocuments.pub/reader033/viewer/2022051014/551cedc25503463a7a8b51bf/html5/thumbnails/15.jpg)
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|)];
}
AE
DI
15
Esp
ecifica
ión
- Prá
ctica 2
![Page 16: L ENGUAJE DE E SPECIFICACIÓN Algoritmos y Estructuras de Datos I Especificación – Práctica 2 AEDI Especificación – Práctica 2 1](https://reader033.vdocuments.pub/reader033/viewer/2022051014/551cedc25503463a7a8b51bf/html5/thumbnails/16.jpg)
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;
}
AE
DI
16
Esp
ecifica
ión
- Prá
ctica 2
![Page 17: L ENGUAJE DE E SPECIFICACIÓN Algoritmos y Estructuras de Datos I Especificación – Práctica 2 AEDI Especificación – Práctica 2 1](https://reader033.vdocuments.pub/reader033/viewer/2022051014/551cedc25503463a7a8b51bf/html5/thumbnails/17.jpg)
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;}
AE
DI
17
Esp
ecifica
ión
- Prá
ctica 2
![Page 18: L ENGUAJE DE E SPECIFICACIÓN Algoritmos y Estructuras de Datos I Especificación – Práctica 2 AEDI Especificación – Práctica 2 1](https://reader033.vdocuments.pub/reader033/viewer/2022051014/551cedc25503463a7a8b51bf/html5/thumbnails/18.jpg)
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];}
AE
DI
18
Esp
ecifica
ión
- Prá
ctica 2