Práctica 4: Especificación de Problemas (Algoritmos I)

De Cuba-Wiki

Ejercicio 1

Las siguientes especificaciones no son correctas. Indicar por qué y corregirlas para que describan correctamente el problema.

I) problema arcoSeno(x, ε : R) = res : R{

     requiere : ε > 0; 
asegura : | sin(res) − x| ≤ ε;

}
II)
III)
IV)
V)
VI)

Ejercicio 2

La siguiente no es una especificación válida, ya que para ciertos valores de entrada que cumplen la precondición, no existe una salida que cumpla con la postcondición

problema subListaQueSume(lista : [Z], suma : Z) = sublista : [Z]{

     asegura Incluida: (∀x ← sublista)cant(sublista, x) ≤ cant(lista, x); 
asegura SumaJusta: sublista == suma;
aux cant(l : [Z], n : Z) : Z = |[x|x ← l, x == n]|;

}

Ejercicio 3

Para los siguientes problemas, dar todas las soluciones posibles a las entradas dadas.

 i) problema raizCuadrada(x : R) = res : R{
requiere : x ≥ 0;
asegura : res2 == x;
}
a) x = 0
b) x = 1
c) x = 27
ii) problema indiceDelMaximo(l : [R]) = res : Z{
requiere : |l| > 0;
asegura : 0 ≤ res < |l|;
asegura : (∀i ← [0.. |l|))li ≤ lres ;
}
a) l = [1, 2, 3, 4]
b) l = [15.5, −18, 4.215, 15.5, −1]
c) l = [0, 0, 0, 0, 0, 0]

iii) problema indiceDelPrimerMaximo(l : [R]) = res : Z{

          requiere : |l| > 0;
asegura : 0 ≤ res < |l|;
asegura : (∀i ← [0.. |l|))(li < lres ∨ (li == lres ∧ i ≥ res));
}
a) l = [1, 2, 3, 4]
b) l = [15.5, −18, 4.215, 15.5, −1]
c) l = [0, 0, 0, 0, 0, 0]