Laboratorio Programación Imperativa Práctica 2

Anuncio
Laboratorio Programación II
2010
Laboratorio Programación Imperativa
Práctica 2
Prof. Responsables: Federico Severino Guimpel, Natalia Colussi
Auxiliares: Pablo Rodriguez Monetti, Santiago Beltramone
Arreglos.
Tipos Subrango. Definición de nuevos tipos.
Estructura de Repetición: Ciclos while-do.
1. Dado el siguiente programa en PASCAL responda a las preguntas que se indican mas a bajo. Para
cada una de ellas deberá transcribir el programa compilarlo y observar el comportamiento.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Program LeerPalabra ;
(* El siguiente programa realiza .... *)
uses
crt ;
const
fin = ’* ’; (* fin del ingreso *)
var
cch : Char ; (* caracter leido *)
icount : Integer ; (* contador de caracteres *)
begin
clrscr ;
(* inicialización de variables *)
icount :=0;
(* lectura del primer caracter *)
write ( ’ Ingrese una palabra (* para finalizar ) : ’) ;
read ( cch ) ;
(* ciclo de lectura *)
while cch <> fin do
begin
icount := icount +1;
read ( cch ) ;
end ;
(* muestra la cantidad de caracteres leidos *)
writeln ( ’ La cantidad de caracteres de su palabra es : ’ , icount ) ;
readkey ;
end .
a) Analice el código y complete el comentario inicial indicando lo que realiza. Transcriba y ejecute
el programa.
b) ¿Qué modificaciones deberı́a realizar si la condición para dar fin a la palabra ingresada fuera #?
¿y si fuera espacio en blanco?. Modifique el programa anterior para que satisfaga este cambio en
el requerimiento.
c) Modifique el programa para que ahora lea frases (String) y finalice cuando el usuario haya
ingresado la frase vacı́a, indicando la cantidad de frases ingresadas.
2. Crea un programa que pida números positivos al usuario calcule la suma de todos ellos. El programa
terminará cuando se teclea un número negativo o cero. El programa mostrará la suma de todos los
números.
1
Laboratorio Programación II
2010
3. Crea un programa que pida al usuario su nik y su contraseña dándole tres oportunidades para ingresar
el nombre y la contraseña esperadas. Defina el nik y la contraseña válidas como constantes asociándoles
los valores: mafalda, mUnD0 respectivamente.
4. Dado la siguiente especificación y su correspondiente programa en PASCAL responda a las preguntas
que se indican más a bajo.
|[
var x, y, q, r : Integer
{Q: x ≥ 0 ∧ y > 0}
q, r := 0, x
{Inv P: r ≥ 0 ∧ y > 0 ∧ q × y + r = x}
{Cota T: r}
do r ≥ y →
r, q := r − y, q + 1
od
{R: 0 ≤ r < y ∧ q × y + r = x}
]|
1
2
3
4
5
6
7
8
Program DivisionEntera ;
(* Este programa realiza la división entera de dos valores ingresados *)
(* indicando el cociente y el resto de tal operación *)
uses
crt ;
type
PosInt = 1 .. maxint ;
(* Tipo Enteros Positivos *)
NoNegInt = 0 .. maxint ; (* Tipo Enteros No Negativos *)
9
10
11
12
13
14
15
var
ivalorY : PosInt ;
ivalorX ,
iresto ,
icociente
: NoNegInt ;
(* alamcenará
(* alamcenará
(* alamcenará
(* alamcenará
el
el
el
el
valor
valor
valor
valor
del
del
del
del
divisor *)
dividendo *)
dividendo *)
divisor *)
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
begin
clrscr ;
(* Lectura de los valores X e Y *)
write ( ’x = ’) ; readln ( ivalorX ) ; writeln ;
write ( ’y = ’) ; readln ( ivalorY ) ; writeln ;
{ x >=0 /\ y >0 }
(* Inicialización de variables *)
icociente := 0;
iresto := ivalorX ;
{ inv P : 0= < r /\ 0 < y /\ q * y + r = x }
{ cota T : r }
while iresto >= ivalorY do
begin
iresto := iresto - ivalorY ;
icociente := icociente +1;
end ;
{ R : 0= <r < y /\ 0 < y /\ q * y + r = x }
34
35
36
37
38
(* Muestro el resultado de la operación *)
writeln ( ivalorX :1 , ’ dividido por ’ , ivalorY :1 , ’ es igual a ’ , icociente :1 ,
’ con resto ’ , iresto :1) ;
readkey ;
end .
2
Laboratorio Programación II
2010
a) Analice la especificación y el código asociado. Transcriba y ejecute el programa.
b) ¿Qué modificaciones deberı́a realizar si en lugar de usar tipos subrango para las variables el
mismo utilizará tipo Integer. Modifique el programa anterior para que cumpla este cambio que
el programador desea realizar y siga satisfaciendo la especificación.
5. Diseñe un programa en PASCAL correspondiente a las siguientes especificaciones ya verificadas en la
practica.
b) |[
a) |[
var x, y, n : Integer
{Q: n ≥ 0}
x, y := 0, 1
{Inv P:x ≤ n ∧ y = 2x }
{Cota T:n − x}
do x 6= n → x, y := x + 1, y + y od
{R: y = 2n }
]|
c) |[
var x, y, n : Integer
{Q: n ≥ 0}
x, y := 0, 0
{Inv P:x ≥ 0 ∧ y ≤ n}
{Cota T:x + 2 × (n − y)}
do x 6= 0 → x := x − 1
[] y 6= n → x, y := x + 1, y + 1
od
{R: x = 0 ∧ y = n}
]|
var k, b, c : Integer;
{Q: n > 0}
k, b, c := 1, 0, 1
{Inv P:P : 1 ≤ k ≤ n ∧ b = f ib.(k − 1) ∧ c = f ib.k}
{Cota T:n − k}
do k 6= n → k, b, c := k + 1, c, b + c od
{R: c = f ib.n}
]|
6. Dada la siguiente especificación de un ciclo,
a) |[
var x, suma, i : Integer
{Q: x ≥ 0}
suma, i := 0, 0
{Inv P:0 ≤ i ≤ x ∧ suma = (Σj : 0 ≤ j ≤ i : j)}
{Cota T:x − i}
do i < x →
i := i + 1;
suma := suma + i;
od
{R: suma = (Σj : 0 ≤ j ≤ x : j) ∧ i = x}
]|
se pide:
verifique que la misma es correcta y codifique dicho ciclo en PASCAL.
modifique la especificación y el ciclo anterior para que ahora verifique la siguiente especificación
parcial de un ciclo que realiza la multiplicación de los números comprendidos entre 1 . . . x en lugar
de la suma. Verifique su diseño y transcriba su ciclo en programa PASCAL.
3
Laboratorio Programación II
b) |[
2010
var x, prod, i : Integer
{Q: x ≥ 1}
prod, i := 1, 1
{Inv P:1 ≤ i ≤ x + 1 ∧ prod =?}
{Cota T:(x − 1) − i}
do i < x →
i := i + 1;
prod :=?;
od
{R: prod = (Πj : 1 ≤ j ≤ x : j) ∧ i = x}
]|
7. Dado el siguiente programa en anotado en PASCAL responda a las preguntas que se indican mas a
bajo.
1
2
3
4
Program SumaArreglo ;
(* El siguiente suma los valores de un arreglo de 5 elementos *)
uses
crt ;
5
6
7
8
9
10
var
bs : array [1..5] of Integer ; (* lista de 5 elementos *)
i , (* contador de los ciclos *)
isuma (* suma de los elementos del arreglo *)
: Integer ;
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
begin
clrscr ;
writeln ( ’ Ingrese los 5 valores del arreglo ’) ;
(* Inicialización de variables *)
i :=1;
(* Lectura de los valores del arreglo *)
while i <= 5 do
begin
write ( ’ bs [ ’ ,i , ’ ]: ’) ; readln ( bs [ i ]) ;
i := i +1;
end ;
isuma := 0; i :=1;
{ inv P : 1= <i <=6 /\ isuma = (+ j : 1 <= j <i : bs [ i ]) }
{ cota T : 5 - i }
while i <= 5 do
begin
isuma := isuma + bs [ i ];
i := i +1;
end ;
{ R : isuma = (+ j : 1 <= j <6 : bs [ i ]) /\ i = 6) }
32
33
34
35
36
(* Muestro el resultado de la operación *)
writeln ( ’ La suma de todos los elementos del arreglo es : ’ , isuma :1) ;
readkey ;
end .
a) Transcriba y ejecute el programa. Analice el código en relación a las anotaciones que lo acompañan.
b) Modifique el programa anterior y las anotaciones correspondientes para que:
1) Sume un arreglo de cinco reales.
4
Laboratorio Programación II
2010
2) Sume la longitud de cinco palabras.
3) Sume un arreglo de cinco enteros cuyos elementos son pares.
4) Sume un arreglo de cinco enteros cuyos elementos son todos positivos. En este caso realice
dos versiones, una donde defina un tipo nuevo y otra donde no sea necesario.
8. Dadas las siguientes especificaciones de ciclos ya verificadas en la practica obtener los programas en
PASCAL correspondientes.
a) |[
const n : Integer;
var i, x : Integer;
b : array[0 . . . n] of Integer;
{Q: n ≥ 0}
i := 0
{Inv P: 0 ≤ i ≤ n + 1 ∧ ¬(∃ j : 0 ≤ j < i : x = b[j])}
{Cota T: n − i}
do i ≤ n ∧ x 6= b[i] → i := i + 1 od
{R: (0 ≤ i ≤ n ∧ x = b[i]) ∨ (i = n + 1 ∧ ¬(∃ j : 0 ≤ j ≤ n : x = b[j]))}
]|
b) |[
var i, s : Integer;
b : array[0 . . . 10] of Integer;
{Q: (∀i : 0 ≤ i < 10 : b[i] >= 0)}
i, s := 10, 0
{Inv P: 0 ≤ i ≤ 10 ∧ s = (+k : i + 1 ≤ k ≤ 10 : b[k])}
{Cota T: i}
do i > 0 → i, s := i − 1, s + b[i] od
{R:s = (+k : 0 ≤ i ≤ 10 : b[i])}
]|
9. Especifique, verifique y codifique un programa que realice las siguientes tareas:
a) calcula el promedio de los elementos.
b) suma los elementos impares de un arreglo de siete elementos.
c) suma los elementos impares de un arreglo de siete elementos y le reste los pares.
d ) suma los elementos en las posiciones impares.
e) suma los elementos en las posiciones impares y le reste los elementos en las posiciones impares.
5
Descargar