Sei sulla pagina 1di 8

TAREA 4

Obed Azbel Ulloa Miranda


Algoritmos y Estructuras de Datos

Gua Telefnica

Profesor Nelson Baloian

Problema
El problema consiste en implementar un diccionario a modo gua telefnica,
donde las palabras clave son los nombres y lo buscado es el nmero
telefnico asociado; el problema se basa en elaborar una interfaz capaz de
cargar una base de datos para crear el diccionario, agregar entradas al
diccionario, consultar el diccionario y tambin poder guardar el diccionario en
un archivo como una nueva base de datos o bien actualizando la misma base
de datos inicial.

Idea
La idea consisti en construir una clase diccionario con diversos mtodos pero
que pudiese llevar a cabo lo siguiente:
1. Construir un rbol con la informacin entregada por el usuario cargando
una base de datos de un archivo.
2. Actualizar la informacin del rbol typeando los datos uno por uno por el
usuario.
3. Consultar algn dato en el rbol (si est mostrarlo, si no est, decir que
no est).
4. Leer el rbol y poder guardarlo nuevamente como una nueva base de
datos.
Esta idea se ve traducida en el diseo de diversas funciones que son: main,
rotar, buscar, insertar, leer, agregar, guardar, cargar y telfono (donde las
ltimas 4 funciones son las solicitadas en el enunciado de la tarea); las cuales
se encargan de resolver el problema del cdigo por partes para luego en
conjunto, poder implementarlas en el main y mediante el uso de paneles de
opcin, dar las opciones al usuario para cargar una base de datos y luego en
base el diccionario construido con la misma poder agregar, buscar o guardar la
base de datos.

Implementacin
La implementacin fue en estructura como indican los pseudo-cdigos de las
funciones:
Public static void main(){
Crear cuadro para la entrada del nombre de archivo
While (el usuario no oprima cancelar y siga eligiendo opciones){
Nuevo panel con 3 opciones, agregar, buscar o guardar.
If agregar
Cuadro de dialogo para agregar, el cual si ya est entrega
mensaje de alerta y si no, entrega un mensaje informando que
fue agregado
Else if buscar
Cuadro para buscar el telfono con un nombre, si est entrega
el nmero, si no, dice que el nmero no se halla en sistema.
Else if guardar
Cuadro de dialogo para ingresar el nombre del archivo, que
entrega un mensaje si el archivo se crea correctamente (se
asume que el usuario usa el formato archivo.txt).
}
}
Private static Diccionario rotar(Diccionario){
If (el padre no es null){
If (prioridad padre menor que prioridad hijo)
Evaluar si es rotacin izquierda o derecha y llevar a cabo
la rotacin simple cuidando el orden en que se redefinen
los punteros y cuidando redefinir todos los punteros que
deban modificarse.
Si el padre es null, retornar el nodo que se est
evaluando, pues es raz.
Si el padre no es null, rotar(nodo)
}
Else {Rotar(padre)}
return nodo
}

Private static Diccionario buscar(string, Diccionario){


recorrer el diccionario por bsqueda binaria (aprovechando la
construccin del mismo) hasta encontrar el nodo con el string
buscado y retornarlo, o hasta llegar a un null y retornar null

}
Private static Diccionario insertar(String x, String y, Diccionario){
Llevar a cabo un algoritmo de bsqueda de string x en diccionario, si lo
halla retornar null, si llega a un null sin hallarlo, lo agrega al Diccionario,
dndole una prioridad aleatoria.
}
Private static String leer(Diccionario){
Recursivamente desde la raz se comienza a leer el contenido del arbol
}
Public static boolean agregar(string nombre, int tel){
Revisar lo retornado por insertar(), si es null retornar falso, si no, se
aplica rotar al nodo agregado y se retorna true.
}
Public static void guardar(String){
Se crea un archivo con el nombre string, y se aplica leer() a la raz del
diccionario y se comenzan a leer las lneas e ingresarlas en el archivo
}
Public static void cargar(String){
Se abre el archivo indicado en string y se procede a leer cada lnea e ir
creando el diccionario con la informacin contenida en cada lnea.
}
Public static int telefono(String){
Usar buscar(string) y obtener el nodo con la informacin buscada (si
existe) y entregarla al usuario, si no, entregar -1.
}

Resultados
Primeramente se obtuvieron muchos y variados errores producto del manejo
inapropiado de punteros o por el uso insuficiente de punteros. Por ejemplo, se
cambiaban los punteros en un orden equivocado, de modo que quedaban
referencias circulares, o se olvidada cambiar algunos punteros y algunos
quedaban apuntando a un nodo hijo con mayor prioridad.
Para obtener un manejo simple del cdigo y de los archivos, se supone que el
usuario ingresar nmeros que no comiencen con ceros, pues al trabajarlos
como int, estos ceros se perdern; ni nmeros demasiado extensos pues
nuevamente, por ser int, no se podr manejar un nmero muy largo. Adems el
formato asumido como base de datos dada por el usuario es el mismo que se
pide para la base de datos que se puede guardar una vez iniciado el programa,
es decir el siguiente:
Nmero1 Nombre1
Nmero2 Nombre2
Luego con esto se pudo trabajar ms holgada y confiadamente.
La interfaz obtenida es la siguiente, en que primero se solicita al usuario el
nombre del archivo que ser nuestra base de datos o gua telefnica:

Una vez ingresado el nombre de archivo que se supone el usuario ingresa un


archivo existente y leble (si no, la lectura implementa un try/catch por lo que
arrojar un mensaje indicando un error), se le presenta al usuario el siguiente
cuadro con 3 opciones:

Al elegir la primera opcin aparece el siguiente cuadro:

Si se ingresa un nombre an no existente en el diccionario, aparecer este


mensaje:

De lo contrario, el mensaje ser este:

Donde Oped es el nombre ingresado por el usuario.


Luego, independiente del caso, se oprime aceptar y vuelve a aprecer el cuadro
para ingresar otro nombre; lo cual se puede seguir haciendo, u oprimir
cancelar, volver al cuadro con 3 opciones y oprimir la segunda para buscar un
nombre en el diccionario:

Y en este cuadro de dilogo se ingresa un nombre para buscar el nmero de


telfono asociado al mismo, si el nombre existe en el diccionario se informa:

De lo contrario el mensaje es:

Donde Stolon es el nombre buscado que no est en el diccionario.


Luego del mismo modo que antes, volvemos al cuadro de 3 opciones y ahora
elegimos la tercera, tras lo cual aparece el siguiente dilogo:

El cual al ingresar un nombre y oprimir aceptar entrega el siguiente mensaje de


confirmacin:

Finalmente se puede volver al cuadro de tres opciones, volver a elegir


cualquiera o cerrarlo y volver al cuadro para ingresar el nombre del archivo de

la base de datos y trabajar con otro diccionario; o darle a cancelar y salir de la


interfaz.

Conclusin
Como conclusin de puede decir que:
1. El implementar un rbol de bsqueda binario como estructura base
facilita la bsqueda e insercin de elementos del diccionario.
2. Agregar una prioridad aleatoria, hace que el peor caso de un ABB
(elementos ordenados) sea menos probable de lo que es en la prctica,
o ms bien, corrige este peor caso.
3. Aplicar rotaciones nos da un mtodo simple de preservar ambos
invariantes, el orden de un ABB y el que la prioridad de un padre debe
ser mayor que la del hijo.
4. Usar variables del tipo int tiene sus ventajas, como la facilidad para
manejarlos; pero al mismo tiempo tiene limitaciones, como el tamao de
los valores permitidos.
5. Un cdigo que recibe muchas entradas del usuario (como este cdigo) es
en esencia muy sensible a la correctitud de los parmetros ingresados
por el usuario.

Potrebbero piacerti anche