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