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