====== Examen Parcial - 75.41. Algoritmos y Programación II ======
**Cátedra:** ¿Mandrafina?\\
**Fecha:** Primera Oportunidad - Primer Cuatrimestre 2001\\
**Día:** 08/05/2001\\
**Tema:** 2
Esta página está incompleta; podés ayudar completando el material.
===== Enunciado =====
==== Punto I ====
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:
- IMPRYPERM('A','B','C',2);
- IMPRYPERM('A','B','C',4);
==== Punto II ====
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'
==== Punto III ====
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.
===== Resolución =====
===== Discusión =====
Si ves algo que te parece incorrecto en la resolución y no te animás a cambiarlo, dejá tu comentario acá.