Cátedra: ¿Mandrafina?
Fecha: Primera Oportunidad - Primer Cuatrimestre 2001
Día: 08/05/2001
Tema: 2
Dado el siguiente procedimiento recursivo:
Procedure IMPRYPERM(X,Y,Z:char; N: integer); Begin if N > 0 then begin Write(Z); IMPRYPERM(Y,Z,X,N-1); Write(X); IMPRYPERM(Z,X,Y,N-2); Write(Y) End End;
Mostrar la salida producida para las siguientes llamadas:
Dadas las siguientes declaraciones en Pascal desarrollar las tablas como lo haría el compilador:
registro = record A: integer; B: boolean; C: real; case tipo: char of X: (D:array[1..5,1..15] of char;e:1..100;F:boolean); Y: (G: packed_array[1..20] pf char; H: integer); Z: (I: array[1..30] of char; J: integer); end; var R1,R2: registro; registros: array[1..20] of registro;
Y suponiendo que la tabla de variables del programa se carga en la posición 100 de la memoria, decir cómo resuelve en tiempo de ejecución la dirección de memoria donde se realiza la asignación:
R1.D[2,10] = 'T'
Mostrar con diagramas lo que escribe el siguiente segmento de código:
type Puntero = ^nodo; Nodo = record info: char; arriba,abajo: puntero end; var p,q,r: puntero; Begin new(p); new(q); new(r); p^.info:='B'; p^.abajo:=q; q^.abajo:=r; q^.info:='C'; r^.info:='D'; r^.abajo:=p; r^.arriba:=q; q^.arriba:=p; p^.arriba:=r; p^.abajo^.abajo:=p; q^.info:=q^.abajo^.info; p:=q; p^.arriba^.info:='A'; writeln(p^.info;q^.info;r^.info); End.