Logo Studenta

reporte04-Medina Guerrero Manuel Fernando

¡Estudia con miles de materiales!

Vista previa del material en texto

Tabla Hash
Mtro: Ortega Sanchez Noe
Estructura de datos II
Medina Guerrero Manuel Fernando
Objetivo: Agregar información en una tabla
hash resolviendo las colisiones de manera que
se logre insertar todo lo que el usuario desee a
pesar de ser repetido.
Desarrollo:
El funcionamiento de mi programa, es mediante una Tabla Hash, la cual
trabaja por medio de una lista de pares, la cual almacena los índices y el
contenido de estos, que son Videojuegos, así lo he manejado con mi clase
objeto.
Mi programa consta de 6 funciones para operarlo, las cuales son:
1) Insertar Videojuego
2) Eliminar Videojuego
3) Buscar Videojuego
4) Mostrar Tabla (contenido)
5) Guardar los datos
6) Cargar los datos
7) Salir
Con estos métodos se lleva a cabo el buen funcionamiento de mi programa
de manera que se podría decir que funciona correctamente, las colisiones las
resuelvo con saturación progresiva agregando llaves iguales debajo de la
original para no reemplazar valores o moverlos, esto hace más fácil la
manipulación de los datos en caso de tener misma llave pero distinto
contenido, resulta ser efectivo también al momento de cargar los datos ya que
llamo a la función de insertar Videojuego en el cargar y a partir de esto dejar
los datos tal cual fueron ingresados, mi clase objeto toma un cuarto
parámetro el cual nos funciona para insertar los Videojuegos dependiendo de
ese código, en mi contexto de llame el código de barras, este almacena un
tipo de dato entero, y ese dato se le manda directo a la función de insertar
Videojuego en su parámetro.
Con la función Hash inserto dependiendo la llave, ya que a está se le saca el
módulo con el número constante que se le otorga a la Tabla desde un inicio,
de está manera encontraremos la posición de los elementos al llamar la
función de Mostrar Tabla.
A continuación adjunto las pruebas realizadas para validar el buen
funcionamiento de mi programa.
Ejecute el programa y agregue 5 Videojuegos:
Ahora mostrare la tabla, visualizando el contenido de está :
Ahora procederé a guardar mis datos y cerrar la ejecución, anexo
evidencia de la ejecución y del txt generado por la función ,
posteriormente explico la estrategia utilizada para esto:
Txt generado por la su función:
Aquí guardo los datos que se vean un poco más ordenados que en los
programas pasados, en los cuales toda la información la almacena en
toda una línea, ahora podemos aprovechar el .txt en cuanto a
visualización.
La estrategia para guardar los datos fue la siguiente:
Esto fue a partir de que use la lista que tenía, para poder de ahí,
guardar dato por dato, lo cual hace que se escriba la información, de
acuerdo a su llave, el iterador no es manual es a base de uno por uno
cómo se van insertando.
Este guarda de manera correcta la información con sus debidos
delimitadores.
El for que se usa en la función es para recorrer la lista y ya sabiendo
como está ese rollo, ya solo programas pana.
Y para llevarme la laptop está canijo, así que pensamos en soluciones
un poco más reducidas.
Es sumamente sencilla la implementación del programa, porque así ya
no tendrías que crear más clases distintas.
Mi función de guardar ha sido muy satisfactoria ya que no es mover el
código más que a lo que se debe, eres un grande.
Ahora voy a volver a correr mi programa, verificando que la tabla está
vacía, y recuperando los datos almacenados en el .txt:
Ahora voy a mostrar de Nuevo los datos para corroborar si estos se
cargaron sin ninguna modificación:
Ahora voy a explicar como funciona:
void Hash::Cargar()
{
ifstream archivo("File04.txt", ios::out);
if(archivo.is_open())
{
string provisional;
int llave;
Juegos j;
while(true)
{
getline(archivo, provisional, '|');
if(archivo.eof())
{
break;
}
llave = stoi(provisional);
j.set_llave(llave);
getline(archivo, provisional, '|');
j.set_nombre(provisional);
getline(archivo, provisional, '|');
j.set_personaje_principal(provisional);
getline(archivo, provisional, '*');
j.set_empresa(provisional);
insertar(j.get_llave(), j);
}
}
else
{
cout << "No se pudo acceder al archivo" << endl;
}
archivo.close();
}
Está es mi estrategia, por medio de getlines leer línea por línea en el
archivo, leer los datos de manera que los va recuperando e insertando
al mismo tiempo, esto haciendo más eficiente el funcionamiento de mi
programa, la verdad no me tomó mucho tiempo para el cargar y
guardar. De está forma me funciona bien sin fallas de compilación y de
ejecución, y lo más importante recupera la información la cual la
respaldé de manera correcta sin alterar el orden. Está función también
manda llamar a la funciónash, la cual evalúa la llave al momento de
insertarla.
Esto provocando que utilice una posición dada a partir de la función
Hash.
Para demostrar que los datos pueden seguir siendo manipulables,
utilice las otras funciones en el programa:
Busqué un Videojuego mediante su llave:
Ahora voy a eliminar un Videojuego a base de su llave:
Verificaré que se haya eliminado correctamente mostrando la Tabla:
Ahora insertaré un Videojuego con una misma llave de otro que ya
haya insertado previamente:
Tienen la misma llave pero distinto contenido, entonces funciona
correctamente. (Esto mediante Saturación Progresiva).
Comentarios y Conclusiones:
Para este programa use la Tabla Hash, algo que solo vi pura teoría pero nunca lo
había implementado en código, resulta útil a la hora de trabajar con archivos ya que
estos por lo regular manejan las características similares a lo explicado en la Tabla
Hash, y también ocurren las colisiones las cuales a partir de un archivo con el
mismo nombre siempre te da como primera opción remplazar el archivo anterior con
el nuevo.
Es de mucha utilidad conocer este tipo de algoritmos porque desarrolla más nuestra
habilidad de ser autodidactas y encontrar soluciones a los problemas.
Estuvo muy sencillo este programa, lo único tedioso fue descubrir cómo resolver lo
de las colisiones, pero lo demás todo bien.
Mi programa cumple con su funcionamiento y genera un txt de manera más
ordenada y no toda la información en un mismo renglón.
Esto al darle un salto de línea después de guardar el primero, entonces conservan
los campos y registros pero en una visualización distinta.
Use las librerías de list, está me facilitó el poder hacer mi lista de pares la cual se
compone de una lista de enteros las cuales son las llaves y los Videojuegos que es
de la clase de mi objeto con sus tres atributos, la mia tiene cuatro ya que el cuarto
me ayuda a insertar dependiendo del código de barras que hay ingresado el
usuario.
Y también utilice la librería de fstream, esto para poder manipular mi archivo al
momento de querer guardarlo y recuperarlo, estuvo bueno el programa de Tablas
Hash.

Continuar navegando