PR´ACTICA DE LABORATORIO 5: Programación imperativa

Anuncio
ANÁLISIS DE LENGUAJES DE PROGRAMACIÓN I
PRÁCTICA DE LABORATORIO 5:
Programación imperativa
Mauricio Notti
-
Pablo Monetti
-
Ignacio Colautti
-
Cecilia Manzino
1. Completar el código de los siguientes procedimientos de manera que sean correctos. Notar
que para ello el invariante debe ser cierto durante la ejecución del bucle.
a) procedure hayAlgunCuadrado ( n ,m : Integer ) ;
var
i : integer ;
encontreUno : Boolean ;
begin
encontreUno := . . .
i := . . .
// {invariante: n ≤ i ≤ m + 1 ∧ encontreU no = (∃ k : n ≤ k < i : escuadrado.k)}
While ( ( i <= m) And ( encontreUno=f a l s e ) ) do
begin
...
end ;
//{encontreU no = (∃ k : n ≤ k ≤ m : escuadrado.k)}
writeln ( encontreUno ) ;
end ;
b) procedure menorMultiplo ( n : integer ) ;
var i , j : integer ;
begin
i := n ;
j := 1 ;
// {invariante: j ≤ n ∧ (∀ k : 1 ≤ k < j : i mod k = 0)}
While ( j <n ) do
begin
...
end ;
end ;
// {i = (min x : (∀ k : 1 ≤ k ≤ 20 : n mod k = 0) : x)}
c) procedure mayorFactorPrimo ( n : integer ) ;
var nextPrime , maxfp : integer ;
1
ANÁLISIS DE LENGUAJES DE PROGRAMACIÓN I
begin
nextPrime := 2 ;
maxfp:= 1 ;
// e l menor primo n a t u r a l
// e l menor f a c t o r de n
// {maxfp = (max x : n mod x = 0 ∧ x < nextP rime : i) ∧ prime.nextP rime}
while ( nextPrime < n ) do
begin
...
end ;
end ;
// {maxfp = (max x : n mod x = 0 ∧ prime.x : i)}
¿Cuál es el mayor factor primo de 13195? ¿y de 600851475143?
2. Obtener programas que satisfagan las siguientes especificaciones:
|[ var r : integer;
{true}
r :=?
a)
{r = (+ i : 0 ≤ i < 1000000 ∧ prime.i : i)}
]|
|[ var a, b, c : integer;
{true}
a, b, c :=?
b)
{a2 + b2 = c2 ∧ a + b + c = 1000}
]|
2
Descargar