Programa ABB
Programa ABB
UAL
TECNIC
O PROGRAMA
Programa ABB
Versión 1.0
Índice
2. Propuesta de solución...................................................3
2.2 Limitantes………………………………………………4
6. Recomendaciones…………………………………………24
1. Descripción del problema.
-El usuario podrá consultar todos los términos y sus definiciones en orden
alfabético.
2. Propuesta de Solución.
-En el módulo CreaArbolV , se crea un nodo para raíz principal del árbol por
primera vez con nodos izquierdo y derecho nulos.
-En el módulo InOrden, imprime los valores de las variables de los nodos del
árbol en Orden alfabético.
-En el módulo InsertaABB, estructura el árbol con los nodos ingresados por el
usuario guardándolos en orden de menor izquierda, mayor derecha, respecto
de cada nodo.
-En el módulo BusquedaABB, realiza la búsqueda de un nodo a través del valor
de la variable Término eh imprime su valor al igual que el de la variable
definición si es que este se encuentra registrado, se muestra en pantalla el
valor de las variables Termino y Definición, si el término no se encuentra se
muestra el mensaje "El término no se encuentra registrado" en caso de usarse
para modificación de habrá modificado la definición del árbol buscado.
2.2 Limitantes
program ABB;
{EQUIPO: BattyClub}
TYPE
telem=string;
tArbol= ^nodoA;
nodoA= record
Termino:telem;
Definicion:telem;
izq, der:tArbol;
end;
var
A,Padre:tArbol;
Term,Def:telem;
salir,agregado,eliminado:boolean;
repite: char;
S,opc,hoja: integer;
{Pre: Ninguna}
{post: Se inicializan con valor un nulo a A, Term y Def}
BEGIN
A:=nil;
Term:='';
Def:='';
END;
{Utilidad: Se crea un nodo para raiz principal del árbol por primera
vez con nodos izquierdo y derecho nulos}
{Pre: Ninguna}
BEGIN
NEW(A);
A^.Termino:='xxxxx';
A^.izq:= nil;
A^.der:= nil;
END;
{Pre: Ninguna}
BEGIN
if ( A = nil) then
BEGIN
VacioA:= true;
END
else
BEGIN
VacioA:= false;
END;
END;
{Utilidad: Imprime los valores de las variables de los nodos del árbol
en Orden alfabético}
{Pre: Ninguna}
BEGIN
BEGIN
writeln ();
writeln ();
END;
END;
{Pre: Ninguna}
{post: Se ingresa un nodo con sus variables en el orden
correspondiente}
VAR
Nodo:tArbol;
BEGIN
IF (S = 1) THEN
BEGIN
A^.Termino:=Term;
A^.Definicion:=Def;
S := 2;
END
BEGIN
BEGIN
new (nodo);
nodo^.izq := nil;
nodo^.der:= nil;
nodo^.Termino:= Term;
nodo^.Definicion:=Def;
A^.izq:= nodo;
END
ELSE
BEGIN
END;
END
BEGIN
IF (A^.der = nil) THEN
BEGIN
new (nodo);
nodo^.izq := nil;
nodo^.der:= nil;
nodo^.Termino:= Term;
nodo^.Definicion:=Def;
A^.der:= nodo;
END
ELSE
BEGIN
END;
END
ELSE
BEGIN
END;
END;
{Pre: Ninguna}
BEGIN
BEGIN
WRITELN ();
END
ELSE
BEGIN
BusquedaABB (A^.izq,Term,opc);
END;
END
BEGIN
BEGIN
WRITELN ();
END
ELSE
BEGIN
BusquedaABB (A^.der,Term,opc);
END;
END
ELSE
BEGIN
WRITELN ();
BEGIN
WRITELN();
WRITELN('T'#130'rmino: ',A^.Termino);
WRITELN();
WRITELN('Definici'#162'n: ',A^.Definicion);
WRITELN();
END;
BEGIN
WRITELN();
WRITELN();
READLN(Def);
A^.Definicion:= def;
WRITELN();
WRITELN('Resultado de la modificaci'#162'n:');
WRITELN();
WRITELN('T'#130'rmino: ',A^.Termino);
WRITELN();
WRITELN('Definici'#162'n: ',A^.Definicion);
WRITELN();
END;
END;
END;
FUNCTION EliminaABB (VAR A,Padre:tArbol; term:telem; VAR
S,hoja:integer):boolean;
{Pre: Ninguna}
VAR
aux,aux1,otroNodo:tArbol;
band: boolean;
BandHoja:integer;
BEGIN
BEGIN
BEGIN
hoja:=1;
Padre:=A;
EliminaABB (A^.izq,Padre,term,S,hoja);
END
BEGIN
hoja:=2;
Padre:=A;
EliminaABB (A^.der,Padre,term,S,hoja);
END
BEGIN
otroNodo:=A;
BandHoja:=3;
BEGIN
otroNodo:=otroNodo^.izq;
BandHoja:= 1;
BEGIN
A^.Termino:=
otroNodo^.Termino;
A^.Definicion:=
otroNodo^.Definicion;
A^.Der:=
otroNodo^.Der;
A^.izq:=
otroNodo^.izq;
dispose
(otroNodo);
BandHoja:=2;
END;
END
BEGIN
otroNodo:=otroNodo^.der;
BandHoja:= 1;
BEGIN
A^.Termino:=
otroNodo^.Termino;
A^.Definicion:=
otroNodo^.Definicion;
A^.Der:=
otroNodo^.Der;
A^.izq:=
otroNodo^.izq;
dispose
(otroNodo);
BandHoja:=2;
END;
END;
IF (BandHoja = 1) THEN
BEGIN
IF Hoja = 0 THEN
BEGIN
dispose
(otroNodo);
InicializaA
(A,Term,Def);
CreaArbolV(A);
S:= 1;
WRITELN();
WRITELN ('----Se
borr'#162' el '#163'ltimo t'#130'rmino----');
END
BEGIN
Padre^.izq:=nil;
dispose
(otroNodo);
EliminaABB:=
true;
END
BEGIN
Padre^.der:=nil;
dispose
(otroNodo);
EliminaABB:=
true;
END;
END
BEGIN
Aux:= A^.izq;
Band:=false;
BEGIN
aux1:=aux;
aux:=aux^.der;
band:=true;
END;
A^.Termino:= Aux^.Termino;
A^.Definicion:=
Aux^.Definicion;
otroNodo:=aux;
BEGIN
aux1^.der:= nil;
dispose
(otroNodo);
EliminaABB:=
true;
END
BEGIN
A^.izq:= nil;
dispose
(otroNodo);
EliminaABB:=
true;
END;
END;
END
ELSE
BEGIN
EliminaABB:=false;
END;
END;
END;
{Pre: Ninguna}
VAR
resp:integer;
valido:boolean;
BEGIN
repeat
BEGIN
valido := false;
WRITELN();
WRITELN ('-----Diccionario Electr'#162'nico de T'#130'rminos
Computacionales -----');
WRITELN();
WRITELN ();
READLN (resp);
WRITELN();
BEGIN
valido := true;
MenuABB := resp;
END;
END;
END;
{Pre: Ninguna}
{post: Se regresa al programa el valor S o N si la letra es correcta,
en caso contrario un mensaje de error"}
BEGIN
begin
ValidacionSN:= 'S';
end
begin
ValidacionSN:= 'N';
end
begin
ValidacionSN:= 'S';
end
begin
ValidacionSN:= 'N';
end
else
begin
ValidacionSN:= 'A';
end;
END;
BEGIN
InicializaA (A,Term,Def);
CreaArbolV(A);
salir := false;
S:=1;
hoja:=0;
Padre:=nil;
Eliminado:=false;
REPEAT
BEGIN
Term:='';
Def:='';
repite:='A';
CASE (MenuABB()) OF
1: BEGIN
REPEAT
BEGIN
repite:='A';
WRITELN();
READLN(Term);
WRITELN();
READLN(Def);
BEGIN
WRITELN();
WRITELN ('T'#130'rmino
Agregado!');
END
BEGIN
WRITELN();
WRITELN ('Este t'#130'rmino
ya se encuentra registrado!');
END;
BEGIN
WRITELN();
READLN (repite);
repite:=
ValidacionSN(repite);
END;
END;
END;
2: BEGIN
BEGIN
WRITELN();
WRITELN();
END
ELSE
BEGIN
REPEAT
BEGIN
repite:='A';
opc:=1;
WRITELN('Escribe el
t'#130'rmino que quieres buscar');
READLN(Term);
BEGIN
WRITELN('Desea
buscar otro t'#130'rmino? (S/N)');
READLN (repite);
repite:=
ValidacionSN(repite);
END;
END;
END;
END;
3: BEGIN
BEGIN
END
ELSE
BEGIN
REPEAT
BEGIN
repite:='A';
opc:=2;
WRITELN('Escribe el
t'#130'rmino cuya definici'#162'n quieres modificar');
READLN(Term);
BEGIN
WRITELN('Desea
modificar otro t'#130'rmino? (S/N)');
READLN (repite);
repite:=
ValidacionSN(repite);
END;
END;
END;
END;
4:BEGIN
BEGIN
END
ELSE
BEGIN
REPEAT
BEGIN
repite:='A';
WRITELN();
WRITELN('Escriba el
t'#130'rmino a eliminar');
READLN (term);
WRITELN();
Eliminado:= EliminaABB
(A,Padre,term,S,hoja);
hoja:=0;
BEGIN
WRITELN();
WRITELN('T'#130'rmino
eliminado!');
WRITELN();
IF A^.Termino = 'xxxxx'
THEN
BEGIN
repite:=
'N';
END;
END
BEGIN
WRITELN();
WRITELN('El
t'#130'rmino no se encuentra en el diccionario');
END;
BEGIN
READLN
(repite);
repite:=
ValidacionSN(repite);
END;
END;
END;
END;
5:BEGIN
BEGIN
ELSE
BEGIN
InOrden(A);
END;
END;
6:
salir:=true;
END;
END;
END.
-Windows 7/8
5. Recomendaciones.