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.