sumaparantc.pas

{ ppc386 -va -vh *.pas }
{ COMIENZO DE DESCRIPCION
  Escribir una function SUMA_PAR_ANTEC (n:nodo; a:arbol):
  integer; que devuelve la suma de las etiquetas de los
  nodos tales que su etiqueta y la etiqueta de todos sus
  antecesores sea par. En forma recursiva SUMA_PAR_ANTEC
  es 0 si el arbol esta vacio o su etiqueta es impar y
  en otro caso es la suma de su etiqueta mas la
  SUMA_PAR_ANTEC de sus hijos.
  keywords: arbol orientado

  FIN DE DESCRIPCION }
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
{ $ Id: sumaparantc.pas 2002/05/10 18 mstorti Exp mstorti $ }
program  sumaparantc_p;
uses u_arborip;
type
   arbol = arborip;

{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
function SUMA_PAR_ANTEC (n : nodo; a:arbol) : integer;
var
  c : nodo;
  s : integer ;
begin
  { Si la etiqueta es impar ya no hay que seguir
    para abajo en el arbol }
  if (n = Lambda) or ( (a.ETIQUETA (n) mod 2) = 1) then
    s := 0
  else begin
    s := a.ETIQUETA (n);
    c := a.HIJO_MAS_IZQ (n);
    while (c <> Lambda) do begin
      { Aplica definicion recursiva }
      s := s + SUMA_PAR_ANTEC (c,a);
      c := a.HERMANO_DER (c);
    end; {while}
  end; {if}
  SUMA_PAR_ANTEC := s ;
end;

{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
var
   a               : arbol;
   n, n30, n1, n70 : nodo;
begin
   a.INICIALIZA;
   n   := a.AGREGA_HIJO_MAS_IZQ (10,lambda);
   n   := a.AGREGA_HIJO_MAS_IZQ (21,n);
   n   := a.AGREGA_HERM_DER     (30,n);
   n30 := n;
   n   := a.AGREGA_HIJO_MAS_IZQ (40,n);
   n1  := a.AGREGA_HERM_DER     (51,n);
   n   := a.AGREGA_HERM_DER     (80,n1);
   n   := a.AGREGA_HIJO_MAS_IZQ (60,n1);
   n   := a.AGREGA_HERM_DER     (70,n);
   n70 := n;
   a.IMPRIME_ARB ('arbol a: ');
   writeln ('suma par: ', SUMA_PAR_ANTEC (a.RAIZ,a));
end.
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}

Generated by GNU enscript 1.6.1.