tpu/arbbtools.pas
{ ppc386 -va -vh *.pas }
{ COMIENZO DE DESCRIPCION
Herramientas auxiliares para \'arboles binarios
por cursores. keywords: arbol binario, cursores
FIN DE DESCRIPCION }
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
{ $Id: arbbtools.pas,v 1.1 2002/04/25 15:57:09 mstorti Exp mstorti $ }
unit arbbtools;
interface
uses u_arbbii;
function SIGUIENTE_FICHA (var pos: integer;
s: string): char;
procedure DEVUELVE_FICHA (var pos: integer;
s: string);
function CREA_DE_STRING_REC ( s: string;
var bosque: bosque_arbbii ;
var pos: integer): curs_nodo ;
function CREA_DE_STRING ( s: string;
var bosque: bosque_arbbii): curs_nodo ;
procedure IMPRIME_N (n: curs_nodo; b: bosque_arbbii);
implementation
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
function SIGUIENTE_FICHA (var pos: integer; s: string): char;
begin
{ SIGUIENTE_FICHA := copy(s,pos,1);}
SIGUIENTE_FICHA := s [pos];
pos := pos + 1;
end;
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
procedure DEVUELVE_FICHA (var pos: integer; s: string);
begin
{ SIGUIENTE_FICHA := copy (s, pos, 1);}
pos := pos - 1;
end;
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
function CREA_DE_STRING_REC ( s: string;
var bosque: bosque_arbbii;
var pos: integer): curs_nodo ;
var
eti : integer;
f, aux : char;
n1, n2 : curs_nodo;
begin
f := SIGUIENTE_FICHA (pos, s);
if (f = 'L') then
CREA_DE_STRING_REC := lambda
else if (f in ['0'..'9'] ) then begin
eti := ord (f) - ord ('0');
aux := SIGUIENTE_FICHA (pos, s);
if ( aux = '{' ) then
begin
n1 := CREA_DE_STRING_REC (s, bosque, pos);
aux := siguiente_ficha (pos,s);
if (aux <> ',' ) then begin
writeln ('No puede encontrar ","');
exit;
end ; {if}
n2 := CREA_DE_STRING_REC (s, bosque, pos);
aux := SIGUIENTE_FICHA (pos, s);
if (aux <> '}' ) then begin
writeln ('No puede encontrar ","');
exit;
end ; {if}
CREA_DE_STRING_REC := BOSQUE.CREA2 (eti, n1, n2);
end
else begin
DEVUELVE_FICHA (pos, s);
CREA_DE_STRING_REC := BOSQUE.CREA2(eti,lambda,lambda);
end ; {if}
end; {if}
end;
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
function CREA_DE_STRING ( s: string;
var bosque: bosque_arbbii): curs_nodo ;
var
pos : integer;
begin
pos := 1;
CREA_DE_STRING := CREA_DE_STRING_REC (s, bosque, pos);
end; { CREA_DE_STRING }
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
procedure IMPRIME_N (n: curs_nodo; b: bosque_arbbii);
var
mi, md : curs_nodo;
begin
if (n = lambda) then begin
write ('L');
exit;
end ; {if}
write (b.ETIQUETA (n));
mi := b.HIJO_IZQ (n);
md := b.HIJO_DER (n);
if (mi <> lambda) or (md <> lambda) then begin
write ('{');
IMPRIME_N (mi, b);
write(',');
IMPRIME_N (md, b);
write('}');
end;
if b.PADRE (n) = lambda then writeln ('');
end;
end.
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
Generated by GNU enscript 1.6.1.