0% encontró este documento útil (0 votos)
20 vistas

Programa ABB

Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
20 vistas

Programa ABB

Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 25

MAN

UAL
TECNIC
O PROGRAMA

Programa ABB

Versión 1.0
Índice

1. Descripción del problema............................................ 3

1.1 Requerimientos básicos .……………………….. 3

1.2 Restricciones básicas…………………………… 3

2. Propuesta de solución...................................................3

2.1 Planteamiento de la solución……………………….3

2.2 Limitantes………………………………………………4

3. Representación de la solución (Pseudocódigo).........5

4. Requerimientos mínimos de HW Y SW para el desarrollo y


mantenimiento....................................................................24

6. Recomendaciones…………………………………………24
1. Descripción del problema.

1.1 Requerimientos básicos

-El usuario podrá ingresar cualquier término y su definición.

-El usuario podrá modificar la definición de cualquier término.

-El usuario podrá eliminar cualquier término y su definición.

-El usuario podrá consultar una definición con base en el término.

-El usuario podrá consultar todos los términos y sus definiciones en orden
alfabético.

1.2 Restricciones básicas

-En la definición no se podrán ingresar números.

2. Propuesta de Solución.

2.1 Planteamiento de la solución

-En el módulo InicializaA , inicializa a A, Term y Def antes de usarlos por


primera vez.

-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 VacioA, verifica si el apuntador A apunta a una dirección nula, si


es así la función regresa un true, en caso contrario regresa un false.

-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.

-En el módulo EliminaABB, realiza la búsqueda de un nodo a través del valor


de la variable Término y lo elimina del árbol, ordenando el resto de nodos, el
nodo buscado habrá sido eliminado del árbol.

-En el módulo MenuABB, muestra en pantalla el Menú del programa en forma


de texto y pide un número de opción el cual regresa al programa principal para
realizar las operaciones correspondientes, se regresa el valor ingresado por el
usuario al programa.

-En el módulo ValidacionSN, valida si el valor ingresado por el usuario en las


preguntas cuya respuesta esperada es S o N es correcto así sea minúscula o
mayúscula, en caso de ser correcto regresa el valor S o N, en caso contrario se
muestra el mensaje "La letra que ingresaste no es válida" y pide de nuevo la
respuesta.

2.2 Limitantes

- Limite de caracteres 225.


3. Representación de la solución.

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;

PROCEDURE InicializaA (VAR A:tArbol; VAR Term,Def: telem);

{Utilidad: Inicializa a A, Term y Def antes de usarlos por primera


vez}

{Pre: Ninguna}
{post: Se inicializan con valor un nulo a A, Term y Def}

BEGIN

A:=nil;

Term:='';

Def:='';

END;

PROCEDURE CreaArbolV (VAR A:tArbol);

{Utilidad: Se crea un nodo para raiz principal del árbol por primera
vez con nodos izquierdo y derecho nulos}

{Pre: Ninguna}

{post: Se crea la raiz del árbol. Nodos izquierdo y derecho }

BEGIN

NEW(A);

A^.Termino:='xxxxx';

A^.izq:= nil;

A^.der:= nil;

END;

FUNCTION VacioA( A:tArbol):boolean;

{Utilidad: Verifica si el apuntador A apunta a una dirección nula, si


es asi la funcin regresa un true, en caso conrario regresa un false}

{Pre: Ninguna}

{post: Se regresa un valor booleano true o false}

BEGIN

if ( A = nil) then

BEGIN

VacioA:= true;

END

else

BEGIN
VacioA:= false;

END;

END;

PROCEDURE InOrden ( A: tArbol);

{Utilidad: Imprime los valores de las variables de los nodos del árbol
en Orden alfabético}

{Pre: Ninguna}

{post: Se muestra en pantalla el valor de las variables Termino y


Definicion de cada nodo}

BEGIN

If VacioA (A) = false then

BEGIN

InOrden (A^.izq);{Punto de retorno B para Procedimiento:


InOrden}

writeln ('T'#130'rmino: ', A^.Termino);

writeln ();

writeln ('Definici'#162'n: ', A^.Definicion);

writeln ();

InOrden (A^.der);{Punto de retorno C para Procedimiento:


InOrden}

END;

END;

FUNCTION InsertaABB (A:tArbol ; Term, Def:telem ; VAR


S:integer):boolean;

{Utilidad: Estructura el árbol con los nodos ingresados por el usuario


guardándolos

en orden de menores izquierda, mayores derecha, respecto de cada nodo}

{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

ELSE IF (Term < A^.Termino) THEN

BEGIN

IF (A^.izq = nil) THEN

BEGIN

new (nodo);

nodo^.izq := nil;

nodo^.der:= nil;

nodo^.Termino:= Term;

nodo^.Definicion:=Def;

A^.izq:= nodo;

InsertaABB:= true; {Se agregó el termino}

END

ELSE

BEGIN

InsertaABB (A^.izq, Term, Def, S);

END;

END

ELSE IF (Term > A^.Termino) THEN

BEGIN
IF (A^.der = nil) THEN

BEGIN

new (nodo);

nodo^.izq := nil;

nodo^.der:= nil;

nodo^.Termino:= Term;

nodo^.Definicion:=Def;

A^.der:= nodo;

InsertaABB:= true; {Se agregó el término}

END

ELSE

BEGIN

InsertaABB (A^.der, Term, Def, S);

END;

END

ELSE

BEGIN

InsertaABB:= false; {El término ya se encuentra en el


arbol}

END;

END;

PROCEDURE BusquedaABB (A: tArbol ; Term:telem ; opc:integer);

{Utilidad: 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}

{Pre: Ninguna}

{post: Se muestra en pantalla el valor de las variables Termino y


Definicion, 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}


BEGIN

IF (Term < A^.Termino) THEN

BEGIN

IF (A^.izq = nil) THEN

BEGIN

WRITELN ();

WRITELN ('El t'#130'rmino no se encuentra


registrado');

END

ELSE

BEGIN

BusquedaABB (A^.izq,Term,opc);

END;

END

ELSE IF (Term > A^.Termino) THEN

BEGIN

IF (A^.der = nil) THEN

BEGIN

WRITELN ();

WRITELN ('El t'#130'rmino no se encuentra


registrado');

END

ELSE

BEGIN

BusquedaABB (A^.der,Term,opc);

END;

END

ELSE

BEGIN

WRITELN ();

WRITELN ('T'#130'rmino encontrado!');


WRITELN ();

IF opc = 1 THEN {La opción 1 muestra a los términos


junto a su definición }

BEGIN

WRITELN();

WRITELN('T'#130'rmino: ',A^.Termino);

WRITELN();

WRITELN('Definici'#162'n: ',A^.Definicion);

WRITELN();

END;

IF opc = 2 THEN {La opción 2 permite la modificación de la


definición de un término específico}

BEGIN

WRITELN();

WRITELN('Definici'#162'n Actual: ',


A^.Definicion);

WRITELN();

WRITELN('Escribe la nueva definici'#162'n:');

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;

{Utilidad: Realiza la búsqueda de un nodo a través del valor de la


variable Término

* y lo elimina del arbol, ordenando el resto de nodos }

{Pre: Ninguna}

{post: El nodo buscado habrá sido eliminado del árbol}

VAR

aux,aux1,otroNodo:tArbol;

band: boolean;

BandHoja:integer;

BEGIN

IF (A <> nil) THEN

BEGIN

IF (term < A^.Termino) THEN

BEGIN

hoja:=1;

Padre:=A;

EliminaABB (A^.izq,Padre,term,S,hoja);

END

ELSE IF (term > A^.Termino) THEN

BEGIN

hoja:=2;

Padre:=A;

EliminaABB (A^.der,Padre,term,S,hoja);

END

ELSE IF (term = A^.Termino) THEN

BEGIN
otroNodo:=A;

BandHoja:=3;

IF (otroNodo^.der = nil) THEN

BEGIN

otroNodo:=otroNodo^.izq;

BandHoja:= 1;

IF (otroNodo <> nil ) THEN

BEGIN

A^.Termino:=
otroNodo^.Termino;

A^.Definicion:=
otroNodo^.Definicion;

A^.Der:=
otroNodo^.Der;

A^.izq:=
otroNodo^.izq;

dispose
(otroNodo);

BandHoja:=2;

END;

END

ELSE IF (otroNodo^.izq = nil) THEN

BEGIN

otroNodo:=otroNodo^.der;

BandHoja:= 1;

IF (otroNodo <> nil ) THEN

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

ELSE IF Hoja = 1 THEN

BEGIN

Padre^.izq:=nil;

dispose
(otroNodo);

EliminaABB:=
true;

END

ELSE IF Hoja = 2 THEN

BEGIN
Padre^.der:=nil;

dispose
(otroNodo);

EliminaABB:=
true;

END;

END

ELSE IF (BandHoja = 3) THEN

BEGIN

Aux:= A^.izq;

Band:=false;

WHILE (Aux^.der <> nil) DO

BEGIN

aux1:=aux;

aux:=aux^.der;

band:=true;

END;

A^.Termino:= Aux^.Termino;

A^.Definicion:=
Aux^.Definicion;

otroNodo:=aux;

IF (band = true) THEN

BEGIN

aux1^.der:= nil;

dispose
(otroNodo);

EliminaABB:=
true;

END

ELSE IF (band = false) THEN

BEGIN
A^.izq:= nil;

dispose
(otroNodo);

EliminaABB:=
true;

END;

END;

END

ELSE

BEGIN

EliminaABB:=false;

END;

END;

END;

FUNCTION MenuABB (): integer;

{Utilidad: Muestra en pantalla el Menu del programa en forma de texto


y pide un numero de opción el

* cual regresa al programa principal para realizar las operaciones


correspondientes}

{Pre: Ninguna}

{post: Se regresa el valor ingresado por el usuario al programa "}

VAR

resp:integer;

valido:boolean;

BEGIN

repeat

BEGIN

valido := false;

WRITELN();
WRITELN ('-----Diccionario Electr'#162'nico de T'#130'rminos
Computacionales -----');

WRITELN();

WRITELN ('Seleccione una opci'#162'n:');

WRITELN ();

WRITELN ('1.- Ingresar un nuevo t'#130'rmino y su


definici'#162'n al diccionario');

WRITELN ('2.- Buscar un t'#130'rmino en el diccionario');

WRITELN ('3.- Modificar la definici'#162'n de un t'#130'rmino');

WRITELN ('4.- Eliminar un t'#130'rmino del diccionario');

WRITELN ('5.- Mostrar diccionario completo');

WRITELN ('6.- Salir del programa');

READLN (resp);

WRITELN();

IF resp < 7 THEN

BEGIN

valido := true;

MenuABB := resp;

END;

END;

until (valido = true);

END;

FUNCTION ValidacionSN (resp:char):char;

{Utilidad: Valida si el valor ingresado por el usuario en las


preguntas cuya respuesta esperada

* es S o N es correcto asi sea minúscula o mayúscula, en caso de ser


correcto regresa el valor

* S o N, en caso contreario se muestra el mensaje "La letra que


ingresaste no es válida"

* y pide de nuevo la respuesta}

{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

if resp = 's' then

begin

ValidacionSN:= 'S';

end

else if resp = 'n' then

begin

ValidacionSN:= 'N';

end

else if resp = 'S' then

begin

ValidacionSN:= 'S';

end

else if resp = 'N' then

begin

ValidacionSN:= 'N';

end

else

begin

writeln('La letra que ingresaste no es v'#160'lida');

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();

WRITELN ('Escribe el t'#130'rmino a


guardar:');

READLN(Term);

WRITELN();

WRITELN ('Escribe la definici'#162'n del


t'#130'rmino:');

READLN(Def);

agregado:= InsertaABB (A, Term, Def, S);

IF agregado = true THEN

BEGIN

WRITELN();

WRITELN ('T'#130'rmino
Agregado!');

END

ELSE IF agregado = false THEN

BEGIN

WRITELN();
WRITELN ('Este t'#130'rmino
ya se encuentra registrado!');

END;

WHILE repite = 'A' DO

BEGIN

WRITELN();

WRITELN('Desea agregar otro


t'#130'rmino? (S/N)');

READLN (repite);

repite:=
ValidacionSN(repite);

END;

END;

UNTIL repite = 'N';

END;

2: BEGIN

IF A^.Termino = 'xxxxx' THEN {Valida si hay nodos en el


arbol}

BEGIN

WRITELN();

WRITELN('No hay nodos en el '#160'rbol');

WRITELN();

END

ELSE

BEGIN

REPEAT

BEGIN

repite:='A';

opc:=1;

WRITELN('Escribe el
t'#130'rmino que quieres buscar');

READLN(Term);

BusquedaABB (A, Term, opc);


WHILE repite = 'A' DO

BEGIN

WRITELN('Desea
buscar otro t'#130'rmino? (S/N)');

READLN (repite);

repite:=
ValidacionSN(repite);

END;

END;

UNTIL repite = 'N';

END;

END;

3: BEGIN

IF A^.Termino = 'xxxxx' THEN {Valida si hay nodos en


el arbol}

BEGIN

WRITELN('No hay nodos en el '#160'rbol');

END

ELSE

BEGIN

REPEAT

BEGIN

repite:='A';

opc:=2;

WRITELN('Escribe el
t'#130'rmino cuya definici'#162'n quieres modificar');

READLN(Term);

BusquedaABB (A, Term,opc);

WHILE repite = 'A' DO

BEGIN

WRITELN('Desea
modificar otro t'#130'rmino? (S/N)');

READLN (repite);
repite:=
ValidacionSN(repite);

END;

END;

UNTIL repite = 'N';

END;

END;

4:BEGIN

IF A^.Termino = 'xxxxx' THEN {Valida si hay nodos en


el arbol}

BEGIN

WRITELN('No hay nodos en el '#160'rbol');

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;

IF Eliminado = true THEN

BEGIN

WRITELN();

WRITELN('T'#130'rmino
eliminado!');
WRITELN();

IF A^.Termino = 'xxxxx'
THEN

BEGIN

repite:=
'N';

END;

END

ELSE IF Eliminado = false


THEN

BEGIN

WRITELN();

WRITELN('El
t'#130'rmino no se encuentra en el diccionario');

END;

WHILE repite = 'A' DO

BEGIN

WRITELN('Desea eliminar otro t'#130'rmino? (S/N)');

READLN
(repite);

repite:=
ValidacionSN(repite);

END;

END;

UNTIL repite = 'N';

END;

END;

5:BEGIN

IF A^.Termino = 'xxxxx' THEN {Valida si hay nodos en


el arbol}

BEGIN

WRITELN('No hay nodos en el '#160'rbol');


END

ELSE

BEGIN

InOrden(A);

END;

END;

6:

salir:=true;

END;

END;

UNTIL salir = true ;

END.

4. Requerimientos hardware y software.

-Procesador Intel Pentium,233 MHz o superior

- 64 MB RAM (se recomiendan 128 MB)

-400 MB de espacio disponible en disco duro

-Windows 7/8

-Mouse u otro dispositivo señalador.

5. Recomendaciones.

-No habría ya que el programa se ejecuta automáticamente

También podría gustarte