#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define R 0.618034
#define M 1024
//_______Estructuras de Datos____________//
struct TipoTraduccion
{
char espanol[20];
char ingles[20];
};
typedef struct TipoTraduccion Traduccion;
struct TipoElemento
{
Traduccion traduccion;
struct TipoElemento *sgte;
};
typedef struct TipoElemento Elemento;
struct TipoTabla
{
Elemento* tabla[M];
int numElementos;
};
typedef struct TipoTabla TablaDispersa;
//----------------------------------------//
//_______Prototipos de funciones_________//
long transformaClave(const char* clave);
int dispersion(long x);
void crearTabla(TablaDispersa* t);
Elemento* crearNodo(Traduccion t);
void crearTraduccion (TablaDispersa* t,Traduccion r);
Elemento* localizar(TablaDispersa t, char spanish[20]);
//---------------------------------------//
//______Funcion Principal(Main)__________//
int main(int argc, char **argv)
{
Traduccion trad ;
TablaDispersa t;
crearTabla(&t);
int k;
while( k!= 2011)
{
printf("nt 1.- insertar traduccion"); printf("nt 2.- buscar palabra"); printf("nt 3.- Eliminar "); /*Imprime el menu de opciones*/ printf("nntEsperando entrada del usuario >>> "); switch( k )
{
case 1:
puts("Ingresa palabra en español"); scanf("%s",trad.
espanol); puts("Ingresa traduccion"); crearTraduccion(&t,trad);
break;
case 2:
puts("Ingresa la palabra a traducir"); scanf("%s",trad.
espanol); printf("%p",localizar
(t
,trad.
espanol));
break;
default:
printf("nntLa opcion es incorrecta. Seleccione otra opcion..."); break;
}
}
return 0;
}
//---------------------------------------//
//__________Funciones____________________//}
long transformaClave(const char* clave)
{
int j;
long d;
d=0;
{
d = d * 27 + clave[j];
}
if (d < 0){
d=-d;
}
return d;
}
int dispersion (long x)
{
double t;
int v;
v = (int)M * t;
return v;
}
void crearTabla(TablaDispersa* t)
{
for(int i=0; i<M ;i++)
t->tabla[i] = NULL;
t-> numElementos = 0;
}
Elemento* crearNodo(Traduccion t)
{
Elemento* n;
n
= (Elemento
*)malloc(sizeof(Elemento
)); n-> traduccion = t;
n-> sgte = NULL;
return n;
}
void crearTraduccion (TablaDispersa* t,Traduccion r)
{
int posicion;
Elemento* nuevo;
posicion = dispersion(transformaClave(r.espanol));
nuevo = crearNodo(r);
nuevo -> sgte = t -> tabla[posicion];
t -> tabla[posicion] = nuevo;
t -> numElementos++;
}
Elemento* localizar(TablaDispersa t, char spanish[20])
{
Elemento* p = NULL;
int posicion;
posicion = dispersion(transformaClave(spanish));
if (t.tabla[posicion])
{
p = t.tabla[posicion];
while((p -> sgte != NULL ) && p -> traduccion.espanol !=spanish)
p = p -> sgte;
if(p -> traduccion.espanol != spanish)
p = NULL;
}
return p;
}