Está en la página 1de 10

En este ejercicio, se realizará programación de la estructura de datos tabla hash en lenguaje de programación java.

Referencia bibliográfica del libro del curso para realizar el ejercicio:


Capítulo 12 Tablas de dispersión, funciones hash
12.5 Realización de una Tabla Dispersa (se usó como ejemplo en clase)
12.6 Direccionamiento Enlazado
12.7 Realización de una tabla dispersa encadenada (este es el ejercicio para realizar con los datos que se piden más abajo)

Deberá realizar un programa que implemente una tabla hash con capacidad para 80 posiciones.

Deberá entregar (subir) este documento en la plataforma incluyendo la información solicitada en formato PDF. (-1 punto si se sube en otro
formato)

1. Agregar aquí los pantallazos de su ambiente de desarrollo incluyendo IDE, la información del sistema y fondo del escritorio( (Windows+D)). Si
tuvo inconvenientes para conectarse al laboratorio virtual, también adjuntar los pantallazos aquí.

Tuve un apagón de luz, tuve que usar mi maquina personal.

2. Pantallazos de programa en ejecución de cada inciso:


a. Carga de Datos (50 registros)
i. La información de cada registro se cargará desde programación, puede ser directamente desde código registro por registro o
bien desde un archivo CSV. No debe haber interacción con el usuario para cargar la información. ( -2pts si se crea menú de
interacción)
ii. Cada nodo debe tener un campo específico para almacenar cada dato de cada registro, indicado en la tabla abajo. (1pt)

1. El código está compuesto de las siglas “FX-“ + correlativo + “Y”, dónde el correlativo comienza de 100 en adelante, por ejemplo:
FX-100Y, FX-101Y, FX-102Y y así sucesivamente hasta cargar todos los empleados.
2. El nombre y la edad pueden ser aleatorios.
Edad
Código (string) Nombre (String)
(int)
FX-100Y Nombre 1 20
FX-101Y Nombre 2 32
FX-102Y Nombre 3 50
etc Nombre … ..
etc Nombre … ..

iii. El campo con valores únicos que servirá de valor para ingresar los datos al árbol de búsqueda es el Código, por lo tanto,
deberá hacer una transformación (usar la función “transformaCadena” del libro) para luego poder usar la función
“dispersión” de la página 361 del libro.
b. Al iniciar el programa, debe imprimir sus datos: Número de Carnet y Nombre completo.
c. Cargar todos los registros a la tabla hash. (2pt)
i. Por cada registro que se va agregando, debe hacer una salida a la consola mostrando los siguientes datos:
1. Índice calculado por la función Hash
2. Si hay colisión, agregar un “*” al texto de índice
3. Datos del empleado: Código, nombre, edad
4. Ejemplo:
20, FX-xxaY, Codigo, Nombre, Edad
60, FX-xxxY, Codigo, Nombre, Edad
60*, FX-xxzY, Codigo, Nombre, Edad

d. Listar todos los elementos que hay en la tabla, salida a consola mostrando el índice, código, nombre, edad. (2pt)
i. 0, FX-xxxY, Nombre Y, xx
ii. 1, FX-xxaY, Nombre X, yy
iii. Si en una posición hay más de un dato (colisión), deberá mostrar los elementos de la lista de la siguiente manera
iv. Índice, Código --> Codigo2 --> Código3
0, FX-xxxY --> FX-xxyY --> FX-xxjY
1, FX-xxaY, Codigo, Nombre, Edad (sin colisión se muestra así)
2 …..
3 ….

3. Grabar un video que muestre el IDE y el programa en ejecución (5-15 segundos aproximadamente). Publicar el video en youtube o google
drive y colocar aquí el link para visualizarlo, debe asegurarse de que habilitará los permisos necesarios para ser visualizado, de lo contrario
no podrá ser calificado. (2pt)
4. https://youtu.be/F-F9XyWZw5w
5. Código fuente (copy/paste) desde su IDE. (1pt)

HASH
package tablashash;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
*
* @author OMAR ROMERO
*/
public class TablasHash {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
tablaHash t = new tablaHash();
String vCodigo;
String p;
int x = 100;
System.out.println("OMAR STUARDO ROMERO ABAD 5390-18-9822\n");
System.out.println("Cargando Registros a la tabla Hash\n");
int c = 0;
String vPoblacion;
String vDireccion;

String line = "";


String splitBy = ",";
BufferedReader entrada = new BufferedReader(
new InputStreamReader(System.in));
try {
BufferedReader br = new BufferedReader(new FileReader("E:\\UMG\\2021\\SM1\\proga3\\Tareas\\Entraga 02-06-
2021 Tablas Hash\\Tab.csv"));
while ((line = br.readLine()) != null) //returns a Boolean value
{
String[] employee = line.split(splitBy); // use comma as separator
c = Integer.parseInt(employee[0]);
vCodigo = (c+x)+"";
//vCodigo = "FX-"+employee[0]+"YY";
vPoblacion = employee[1];
vDireccion = employee[2];
p = ""+c;
CasaRural ob = new CasaRural(vCodigo, vPoblacion, vDireccion,p);
c++;
t.insertar(ob);
}
} catch (IOException e) {
System.out.println(" Excepcion en la entrada de datos "
+ e.getMessage() + " . No se da de alta");
}
t.Listar();
}

CASA RURAL
package tablashash;

import java.io.*;

public class CasaRural {

private String codigo;


private String poblacion;
private String direccion;
private int numHabitacion = 0;
private double precio = 0.0;
String p;
boolean esAlta;
public CasaRural(String codigo, String poblacion, String direccion, String p) {
this.codigo = codigo;
this.poblacion = poblacion;
this.direccion = direccion;
this.p = p;
esAlta = true;
}

public CasaRural() {
esAlta = true;
asigna();
}

public void asigna() {


BufferedReader entrada = new BufferedReader(
new InputStreamReader(System.in));
try {
System.out.print("\n Codigo (10 caracteres): ");
codigo = entrada.readLine();
System.out.print("\n Población: ");
poblacion = entrada.readLine();
System.out.print("\n Dirección: ");
direccion = entrada.readLine();
System.out.print("\n Número de habitaciones: ");
numHabitacion = Integer.parseInt(entrada.readLine());
System.out.print("\n Precio por día de estancia: ");
precio = (new Double(entrada.readLine())).doubleValue();
} catch (IOException e) {
System.out.println(" Excepcion en la entrada de datos "
+ e.getMessage() + " . No se da de alta");
esAlta = false;
}
}

public String elCodigo() {


return codigo;
}
public String Nom(){
return poblacion;
}
public String edad(){
return direccion;
}
public String p(){
return p;
}
public void muestra() {
System.out.println("\n Casa Rural " + codigo);
System.out.println("Población: " + poblacion);
System.out.println("Dirección: " + direccion);
System.out.println("Precio por día: " + precio);
}
}

CLASE HASH
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package tablashash;

/**
*
* @author OMAR ROMERO
*/
public class tablaHash {

static final int TAMTABLA = 81;


private int numElementos;
private double factorCarga;
private CasaRural[] tabla;

public tablaHash() {
tabla = new CasaRural[TAMTABLA];
for (int j = 0; j < TAMTABLA; j++) {
tabla[j] = null;
}
numElementos = 0;
factorCarga = 0.0;
}

public int valorHash(String clave) {


int i = 0, p;
long d;
d = transformaCadena(clave);
// aplica aritmética modular para obtener dirección base
p = (int) (d % TAMTABLA);
// bucle de exploración
while (tabla[p] != null
&& !tabla[p].elCodigo().equals(clave)) {
i++;
p = p + i * i;
p = p % TAMTABLA; // considera el array como circular
}
return p;
}

long transformaCadena(String c) {
long d;
d = 0;
for (int j = 0; j < Math.min(10, c.length()); j++) {
d = d * 27 + (int) c.charAt(j);
}
if (d < 0) {
d = -d;
}
return d;
}

public void insertar(CasaRural r) {


int posicion;
posicion = valorHash(r.elCodigo());
tabla[posicion] = r;
numElementos++;
factorCarga = (double) (numElementos) / TAMTABLA;
if (factorCarga > 0.5) {
//System.out.println("\n!! Factor de carga supera el 50%.!!"
// + " Conviene aumentar el tamaño.");
}
}

public CasaRural buscar(String clave) {


CasaRural pr;
int posicion;
posicion = valorHash(clave);
pr = tabla[posicion];
if (pr != null) {
if (!pr.esAlta) {
pr = null;
}
}
return pr;
}

public void eliminar(String clave) {


int posicion;
posicion = valorHash(clave);
if (tabla[posicion] != null) {
tabla[posicion].esAlta = false;
}
}

public void Listar(){


for(int j = 0; j < TAMTABLA; j++){
if(tabla[j]==null){
System.out.println("j: " + j + " Null");
}else{
System.out.println("j: " + j + " Clave: " + tabla[j].elCodigo()+ " Nombre: " + tabla[j].Nom()+" Edad:
"+tabla[j].edad()+" P=" + tabla[j].p());
}
tabla[j] = null;
}
}
}

También podría gustarte