HASH_1.c



// HASH VERSION 1.0
// tabla de tamanio 10

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define TAM 15
#define true 1

struct datos
{
	char *Nombre;
	int Edad;
};
struct datos Tabla[TAM];

void LimpiarTabla()
{
	int x = 0;
	while( x < TAM )
	{
		Tabla[x].Nombre = (char*)malloc(sizeof(char)*80);
		Tabla[x].Edad = 0;
		x++;
	}
}

void PideNombre(char *Var) { printf("Introduce el Nombre: "); scanf("%s", Var); }
void PideEdad(int *Var) { printf("Introduce la edad: "); scanf("%d", Var); }

int Hash(char *Nom)
{
	int x=0, Suma = 0;
	
	while(x < strlen(Nom) )
	{
		Suma += Nom[x]*x + strlen(Nom);
		Nom++;
		x++;
	}
	return Suma%TAM;
}

void Guarda(char *Nom, int Edad)
{
	int Index=0;

	Index = Hash(Nom);
	while( Tabla[Index].Edad )	// si la edad=0, estA disponible el espacio
	{
		Index++;
		if (Index > 14) Index=0;
	}
	strcpy(Tabla[Index].Nombre, Nom);
	Tabla[Index].Edad = Edad;
}

void Guarda(char *Nom, int Edad)
{
	
}

void MuestraTabla()
{
	int x =0;
	char *CAD=(char*)malloc(sizeof(char)*100);
	
	system("clear");
	printf("IDX\tNOMBRE\t\tEDAD\n");
	while( x<TAM )
	{
		strcpy(CAD, "");
		sprintf(CAD, "%i.-\t\t%s\t%i", x, Tabla[x].Nombre, Tabla[x].Edad);
		printf("%s\n", CAD);
		x++;
	}
}

int Comando()
{
	int Com = 0;
	printf("Que operaciOn deseas? [0|1] "); scanf("%d", &Com);
	return Com;
}


void Ciclo()
{
	char *Nombre = (char*)malloc(sizeof(char)*80);
	int Idx=0, Edad = 0;

	while(true)
	{
		if ( Comando() )	// 1=guardar	0=consultar
		{
			PideNombre(Nombre);
			PideEdad(&Edad);
			Guarda(Nombre, Edad);
			MuestraTabla();
		}
		else
		{
			// PREVER EN CASO DE COLISION
			PideNombre(Nombre);
			Idx = Hash(Nombre);
			printf("La edad de %s es de %i\n", Nombre, Tabla[Idx].Edad);
		}
	}
}

int main(int N, char **A)
{
	LimpiarTabla();
	Ciclo();
}