PR´ACTICA DE LABORATORIO 4: Programación imperativa

Anuncio
ANÁLISIS DE LENGUAJES DE PROGRAMACIÓN I
PRÁCTICA DE LABORATORIO 4:
Programación imperativa
Mauricio Notti
-
Pablo Monetti
-
Ignacio Colautti
-
Cecilia Manzino
1. Obtener programas que satisfagan las siguientes especificaciones:
|[ var a : integer;
{a = A} a :=? {a = signo(A)}
a)
]|
donde signo devuelve 0, −1 o 1, como conocemos.
b)
|[ var x, y, z : integer;
{y ≥ 0} x :=? {x = z × y}
]|
sin usar el operador producto.
c)
|[ const n = 10;
var
b : array[0 . . . n] of integer;
z : integer;
Q
{n ≥ 0} z :=? {z = ( i : 0 ≤ i ≤ n : b[i])}
]|
d)
|[ const n = 10;
var
b : array[0 . . . n] of integer;
ceros : integer;
{n ≥ 0} ceros :=? {ceros = (N i : 0 ≤ i ≤ n : b[i] = 0)}
]|
2. Obtener programas que satisfagan las especificaciones de los ejercicios 13.1 b), e) y f).
3. Obtener un programa que satisfaga la siguiente especificación:
|[ const n = 20;
var
b : array[0 . . . n] of integer;
mediana : integer;
{(∀ i : 0 ≤ i < n : (∀ j : i < j ≤ n : b[i] 6= b[j])) ∧ impar.(n + 1)}
mediana :=?
{(N i : 0 ≤ i ≤ n : b[i] > mediana) = (N i : 0 ≤ i ≤ n : b[i] < mediana)}
]|
Adaptar la especificación anterior para un programa que calcule la mediana de un arreglo de
elementos distintos de cualquier longitud (valor tal que la mitad de los elemtos son menores
y la mitad mayores a éste). Obtener un programa que cumpla con tal especificación.
1
ANÁLISIS DE LENGUAJES DE PROGRAMACIÓN I
4. Obtener programas que satisfagan las siguientes especificaciones:
a)
|[ var n, m : integer;
{n > 0}
m :=?
{m = (max j : j ≤ n ∧ (∃ i : Z :: j = 2i ) : j)}
]|
b)
|[ const n = 10;
var b : array[0 . . . n] of integer;
{n ≥ 0 ∧ b = B}
b :=?
{perm(b, B) ∧ (∀ i : 0 ≤ i ≤ n : b[i] ≤ b[i + 1])}
]|
2
Descargar