Práctica 5 - UTN

Anuncio
Sintaxis y Semántica del Lenguaje
Práctica Nº 5
PILAS DE EJECUCION CON PARAMETROS
Esta práctica deberá resolverse en la semana del 30/05/2016
1- Resolver las pilas de ejecución siguiendo las reglas de alcance estático y
dinámico.
a) Program Main;
var i,j:integer;
Procedure B;
begin
i:= i - 4;
end {B};
Function y (j:integer):integer;
begin
y:= j + i;
end {y};
Procedure C (var a:integer; b:integer);
var z:integer;
begin
z:= y ( b );
a:= a – 2;
B;
end {C};
Procedure A (var x:integer; k:integer);
var i,j:integer;
Procedure B;
begin
i:= i + 7;
end;
begin
i:=19; j:= x + 5; k:= k + 3;
C (x ,k );
writeln( i ,j ,x , k );
end {A};
begin
i:=30; j:=15; A(i , j);
writeln(i , j);
end. {Main}
b) Suponiendo que s se pasa por nombre y suponiendo que s se pasa por
referencia.
¿Da lo mismo en todos los casos?
Sintaxis y Semántica del Lenguaje – 2016
1
Program Main;
var i, j, z:integer;
a:array[1..4] of integer;
Procedure Dos (s:integer);
Procedure Tres;
begin
i:= i + 1; j:= j + 4;
end;
begin
Tres; s:= s + 2; writeln(s);
end {Dos};
Procedure Uno (var j:integer);
var i:integer;
begin
i:=1;
Dos(a[i]); j:= j + 2;
end {Uno};
begin
for i:=1 to 4 do a[i]:=i;
i:=2; j:=15; z:=7;
Uno(z);
for i:=1 to 4 do writeln (a[i]);
end {Main}.
c) Program Main;
var i,j,z:integer;
a:array[1..4] of integer;
Procedure Uno (a:integer; var b:integer);
begin
a:= a + 15; b:= b + 1; z:= z + 3;
a[i]:= a[i] + 8; writeln(a,b);
end {Uno};
Procedure Dos (var i:integer; nombre v:integer; k:integer);
var z:integer;
begin
z:= 5;
i:= i + 1;
v:= v + 7;
if a[i] = 0 then Uno(v , i);
end {Dos};
begin
i:=1; j:=1;
for z:=1 to 4 do a[z]:=0;
z:=9;
Dos( j, a[i] , z );
writeln(z);
for z:=1 to 4 do writeln (a[z]);
end {Main}.
Sintaxis y Semántica del Lenguaje – 2016
2
2- Resolver las pilas de ejecución del siguiente programa recursivo (Cadenas de
Plutonio)
Program A;
Procedure Cadenas(n:integer; cad:string);
begin
if n=0 then writeln(cad)
else
if n=1 then
begin
writeln(cad + ’Plo’);
writeln(cad + ‘Plu’);
end
else
begin
Cadenas(n-1,cad + ‘Plo’);
Cadenas(n-2,cad + ‘PluPlo’);
end;
end;
begin
Cadenas(3,’’);
end.
3- Procedure A
var x : array [1..5] of integer;
i: integer;
Procedure B( p: integer);
begin
p:= p + 1; i:= i + 1; p:= p + 1;
end;
begin
for i:=1 to 5 do x[i]:=0;
i:= 1; B(x[i]);
end.
a) Hacer la pila de ejecución para todos los tipos de pasajes de parámetros.
b) Agregar la definición de i en B (var i:integer dentro del proc B)
4- Procedure A;
var x,y;
Procedure B (a, b : integer);
begin
a:=10; b:=5;
end;
begin
x:=2; y:=4; B(x,x);
end;
Analice qué sucede si a y b están pasados por referencia, por valor-resultado,
por valor y por resultado.
Sintaxis y Semántica del Lenguaje – 2016
3
5-a)
Procedure A
var x
Procedure B
var x
......
end
Acá quiero utilizar la
variable x de A
.......
end.
b)
Procedure A
var x
Procedure B
var y
..... end
Procedure C
var y
.....
end
begin
C
........
end.
Acá quiero utilizar la var y de C
6- Explique y ejemplifique en Pascal cómo simula el pasaje por valor-resultado.
7- Dado un lenguaje XX que sólo provee uno de los tipos de pasaje de
parámetros estudiados, escriba un programa (con sintaxis Pascal) que me
permita saber (al ejecutarlo) cuál es el tipo de pasaje provisto.
8-
Procedure Main;
Procedure A;
var y;
....
end;
Procedure B( routine X);
var u,v,y;
Procedure C;
* y:=...........
end;
begin
X;
B( C );
end;
begin
B(A);
end.
a) Haga la pila con el alcance estático haciendo las activaciones
correspondientes.
b) Cuando se produce la asignación * ¿qué variable y se modifica?
Sintaxis y Semántica del Lenguaje – 2016
4
Descargar