copia.pas
{ ppc386 -va -vh *.pas }
{ COMIENZO DE DESCRIPCION
Ejercicio tomado en el 2do parcial/2001, tema 1:
escribir una funci\'on COPIA (n:nodo): nodo, que devuelva
la copia del \'arbol ordenado cuya raiz es apuntada
por el cursor $n$ pasado como argumento. La funci\'on usa
un array COPIA_HIJOS de cursores a nodo. Asumir que cada
nodo tiene a lo sumo 4 hijos.
FIN DE DESCRIPCION }
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
{$Id: copia.pas v1.2 2002/04/05 11:50 jdelia Exp jdelia$}
program copia_prog;
uses u_arbori;
const max_hijos = 4; {maximo numero de hijos admisible.
Esta limitacion esta en el maximo CREAi que este definido
en la interfase.}
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
function COPIA ( n1: curs_nodo;
var B: bosque_arbori): curs_nodo;
var { copia n1 en n2 }
c1, c2 : curs_nodo;
copia_hijos : array [1..4] of curs_nodo;
n : integer;
begin
if (n1 = lambda) then begin
COPIA := lambda;
exit;
end; {if}
c1 := B.HIJO_MAS_IZQ (n1);
n := 0;
while (c1 <> lambda) do begin
n := n + 1;
if (n > 4) then begin
writeln ('Mas de ', max_hijos,' hijos!!');
halt;
end; {if}
c2 := COPIA (c1,b);
copia_hijos [n] := c2;
c1:= b.HERMANO_DER (c1);
end;
if (n = 0) then
COPIA := b.CREA0 (b.ETIQUETA (n1))
else if (n = 1) then
COPIA := b.CREA1 (b.ETIQUETA (n1), copia_hijos [1])
else if (n = 2) then
COPIA := b.CREA2 (b.ETIQUETA (n1), copia_hijos [1],
copia_hijos [2])
else if (n = 3) then
COPIA := b.CREA3 (b.ETIQUETA (n1), copia_hijos [1],
copia_hijos [2],
copia_hijos [3])
else if (n = 4) then
COPIA := b.CREA4 (b.ETIQUETA (n1), copia_hijos [1],
copia_hijos [2],
copia_hijos [3],
copia_hijos [4]);
end;
{===============================================================}
var
BB : Bosque_ArbOrI;
arbol, arb1, arb2, arb3, arb4, arb5 : curs_nodo;
arb6 , arb7, arb8, arb9, arb0, arbolb : curs_nodo;
begin
BB.INICIALIZA_NODOS;
arb1 := BB.CREA0 ( 33);
arb2 := BB.CREA0 ( 8);
arb3 := BB.CREA0 ( 7);
arb4 := BB.CREA0 ( 62);
arb5 := BB.CREA0 (130);
arb6 := BB.CREA0 ( 12);
arb7 := BB.CREA3 ( 41, arb2, arb3, arb4);
arb8 := BB.CREA2 ( 63, arb1, arb7);
arb9 := BB.CREA0 ( 48);
arb0 := BB.CREA2 (125, arb5, arb6);
arbol := BB.CREA3 (142, arb8, arb9, arb0);
writeln ('arbol: ');
bb.IMPRIME (arbol);
writeln('');
arbolb := COPIA (arbol,bb);
writeln ('copia del arbol: ');
bb.IMPRIME (arbolb);
writeln ('');
{ verificamos que la copia sigue existiendo anulando
el original y verificando que sigue existiendo }
bb.ANULA (arbol);
writeln('arbol despues de anular: ');
bb.IMPRIME (arbol);
writeln('');
writeln('copia del arbol despues de anular el original: ');
bb.IMPRIME (arbolb);
writeln ('');
end.
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
------------------------------------------------------------------------
Generated by GNU enscript 1.6.1.
Generated by GNU enscript 1.6.1.