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.