AEDI
Especificación – Práctica 4
LENGUAJE DE ESPECIFICACIÓN
1
Algoritmos y Estructuras de Datos I
Especificación – Práctica 4
MÁS EJERCICIOS CON SECUENCIAS
Especificar el problema de, dada una lista de
enteros, devolverla ordenada.
AEDI

Especificaión - Práctica 4
problema ordenar(a:[Z]) {
modifica : a;
asegura : mismos(pre(a),a);
asegura :
(i <- [0..|pre(a)|-1)) a[i] ≤ a[i+1];
}
2
MÁS EJERCICIOS CON SECUENCIAS
Dadas dos listas de enteros s y t y un entero z,
devolver la lista de pares que sumen z.
Ejemplo: z = 6, s = [1,0,3] y t = [5,6,3] ->
res = [(1,5),(0,6),(3,3)]
Especificaión - Práctica 4

AEDI

problema paresQueSuman(s,t:[Z],z:Z) = res:[(Z,Z)] {
asegura :
mismos(res, [(x,y)|x <- s , y <- t, x+y == z]);
}
3
MÁS EJERCICIOS CON SECUENCIAS
Especificar un problema que, dada una lista,
devuelva una lista con todas sus sublistas.

Ejemplo: s = [1,0,3],
res = [[],[1],[0],[3],[1,0],[0,3],[1,0,3]]
Especificaión - Práctica 4

AEDI

problema sublistas(a:[Z]) = res:[[Z]] {
asegura : mismos(res,
[] ++ [a[i..j]| i<-[0..|a|), j<-[i.. |a|) ]);
}
4
MÁS EJERCICIOS CON SECUENCIAS
Especificar el auxiliar que, dada una lista de
enteros, devuelva el bool que determina si la lista
es una escalera.
AEDI

Especificaión - Práctica 4
Ejemplo1: a = [1,2,3] -> true
Ejemplo2: a = [1,2,4] -> false
aux esEscalera(a:[Z]):Bool =
(i <- [0..|a|-1)) a[i+1] == a[i] + 1;
5
MÁS EJERCICIOS CON SECUENCIAS
Especificar el problema de, dada una lista de
enteros, devolver un par de enteros con la posición
de la escalera mas larga como primer elemento, y la
longitud de la misma como segundo elemento.
AEDI

Especificaión - Práctica 4
problema escaleraMásLarga(a:[Z]) = res:(Z,Z) {
requiere: |a|>0
asegura: 0 < prm(res) < prm(res) + snd(res) ≤ |a|
asegura: esEscalera(a[prm(res)..prm(res)+snd(res)))
asegura: ( i<-[0..|a|), j<-[i..|a|),
esEscalera(a[i..j])) |a[i..j]| ≤ snd(res)
}
6
MÁS EJERCICIOS CON SECUENCIAS
Especificar el problema de, dada una lista de enteros,
devolver en otra los mismos elementos que en la original
pero se les suma a los de las posiciones impares 5.
Adicionalmente en la original solo quedan los de las
posiciones pares multiplicados por 3.
Especificaión - Práctica 4

AEDI

Ejemplo: a=[1,2,3] -> a=[1*3,3*3] y res=[1,2+5,3]
problema ejercicioRaro(a:[Z]) = res : [Z] {
modifica : a;
asegura : |res| == |a|;
asegura :
mismos(a,[pre(a)[i]*3|i<-[0…|pre(a)|),i mod 2==0]);
asegura :
(i <- [0..|res|))
(i mod 2==0 -> res[i] == pre(a)[i]) &&
(i mod 2!=0 -> res[i] == pre(a)[i] + 5)
}
7
Descargar

asegura