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