• Viernes 8 de Noviembre de 2024, 17:40

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Temas - lambda

Páginas: [1]
1
C/C++ / [Solucionado]Problemas con tabla hash
« en: Martes 17 de Mayo de 2011, 06:54 »
Tengo el problema de que al momento de almacenar la informacion en la tabla hash , y buscarla por medio de la funcion localizar  la cual devuelve el puntero devuelve "nil" cuando se supone que hay informacion.

Código: C
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <math.h>
  6. #define R 0.618034
  7. #define M 1024
  8.  
  9. //_______Estructuras de Datos____________//
  10. struct TipoTraduccion
  11. {
  12.     char espanol[20];
  13.     char ingles[20];
  14. };
  15. typedef struct TipoTraduccion Traduccion;
  16.  
  17. struct TipoElemento
  18. {
  19.     Traduccion traduccion;
  20.     struct TipoElemento *sgte;
  21. };
  22. typedef struct TipoElemento Elemento;
  23.  
  24. struct TipoTabla
  25. {
  26.    
  27.     Elemento* tabla[M];
  28.     int numElementos;
  29. };
  30. typedef struct TipoTabla TablaDispersa;
  31. //----------------------------------------//
  32. //_______Prototipos de funciones_________//
  33. long transformaClave(const char* clave);
  34. int dispersion(long x);
  35. void crearTabla(TablaDispersa* t);
  36. Elemento* crearNodo(Traduccion t);
  37. void crearTraduccion (TablaDispersa* t,Traduccion r);
  38. Elemento* localizar(TablaDispersa t, char spanish[20]);
  39. //---------------------------------------//
  40. //______Funcion Principal(Main)__________//
  41. int main(int argc, char **argv)
  42. {
  43.     Traduccion trad ;
  44.     TablaDispersa t;
  45.     crearTabla(&t);
  46.     int k;
  47.     while( k!= 2011)
  48.     {
  49.        
  50.         printf("nt  1.-  insertar traduccion");
  51.         printf("nt  2.-  buscar palabra");
  52.         printf("nt  3.-  Eliminar ");             /*Imprime el menu de opciones*/
  53.         printf("nntEsperando entrada del usuario >>> ");
  54.         scanf("%d",&k);
  55.         switch( k )
  56.         {
  57.             case 1:
  58.                 puts("Ingresa palabra en español");
  59.                 scanf("%s",trad.espanol);
  60.                 puts("Ingresa traduccion");
  61.                 scanf("%s",trad.ingles);
  62.                 crearTraduccion(&t,trad);
  63.                 break;
  64.             case 2:
  65.                 puts("Ingresa la palabra a traducir");
  66.                 scanf("%s",trad.espanol);
  67.                 printf("%p",localizar(t,trad.espanol));
  68.                
  69.                  break;
  70.            
  71.  
  72.             default:
  73.                  printf("nntLa opcion es incorrecta. Seleccione otra opcion...");
  74.                  getchar();
  75.                  break;
  76.              }
  77.         }
  78.     return 0;
  79. }
  80. //---------------------------------------//
  81.  
  82. //__________Funciones____________________//}
  83.  
  84. long transformaClave(const char* clave)
  85. {
  86.     int j;
  87.     long d;
  88.    
  89.     d=0;
  90.     for(j=0;j<strlen(clave);j++)
  91.     {
  92.         d =  d * 27 + clave[j];
  93.     }
  94.     if (d < 0){
  95.         d=-d;
  96.     }
  97.     return d;
  98. }
  99. int dispersion (long x)
  100. {
  101.     double t;
  102.     int v;
  103.     t=R * x - floor(R * x);
  104.     v = (int)M * t;
  105.     return v;
  106. }
  107. void crearTabla(TablaDispersa* t)
  108. {
  109.     for(int i=0; i<M ;i++)
  110.         t->tabla[i] = NULL;
  111.     t-> numElementos = 0;
  112.    
  113. }
  114. Elemento* crearNodo(Traduccion t)
  115. {
  116.     Elemento* n;
  117.     n = (Elemento*)malloc(sizeof(Elemento));
  118.     n-> traduccion = t;
  119.     n-> sgte = NULL;
  120.     return n;
  121. }
  122. void crearTraduccion (TablaDispersa* t,Traduccion r)
  123. {
  124.     int posicion;
  125.     Elemento* nuevo;
  126.     posicion = dispersion(transformaClave(r.espanol));
  127.     nuevo = crearNodo(r);
  128.     nuevo -> sgte = t -> tabla[posicion];
  129.     t -> tabla[posicion] = nuevo;
  130.     t -> numElementos++;
  131. }
  132. Elemento* localizar(TablaDispersa t, char spanish[20])
  133. {
  134.    
  135.     Elemento* p = NULL;
  136.     int posicion;
  137.     posicion = dispersion(transformaClave(spanish));
  138.     if (t.tabla[posicion])
  139.     {
  140.         p = t.tabla[posicion];
  141.         while((p -> sgte != NULL ) && p -> traduccion.espanol !=spanish)
  142.             p = p -> sgte;
  143.         if(p -> traduccion.espanol != spanish)
  144.                 p = NULL;
  145.     }
  146.     return p;
  147. }
  148.  
  149.  

El código es de un traductor de idiomas que al poner la opción de buscar pide la palabra a traducir y devuelve la direccion de memoria . El problema es que no se si implemente bien la tabla y si todo esta incorrecto.

2
C/C++ / [Solucionado]Traductor de idiomas en C
« en: Domingo 15 de Mayo de 2011, 19:05 »
Buenas a todos. Resulta que tengo que entregar de proyecto para final de semestre un traductor de idiomas en C utilizando estructuras de datos dinámicas( pilas,colas,listas enlazadas,arboles o tablas hash), la verdad no tengo idea de como hacerlo, pensaba en utilizar una tabla hash pero los datos desaparecerian al terminar la ejecucion de programa y requiero que los datos permanescan. Se aceptan todo tipo de ideas siempre y cuando recurran a estructuras de datos dínamicas y que los datos permanescan.

Gracias.

3
C/C++ / [Solucionado]Problemas con el buffer de entrada
« en: Sábado 8 de Enero de 2011, 00:51 »
Hola que tal a todos mi problema es el siguiente: No puedo limpiar el buffer de entrada y debido a esto mi programa se salta una instrucción en la función "pedidos" .
Código: C
  1.  
  2.  
  3. #include <stdio.h>
  4. #include <ncurses.h>
  5. typedef struct vx {char calle[30];char tipo_cantidad[15];int cantidad;}vx;
  6. void importe_venta (void);
  7. void pedidos (void);
  8. int main(void)
  9. {
  10.    
  11.     printf("Elija una opcion : ");
  12.     printf("a) Venta t");
  13.     printf("b) Pedido t");
  14.     char opc;
  15.     scanf("%c",&opc);
  16.     //while(getchar()!='n');
  17.     switch (opc)
  18.     {
  19.         case 'a':
  20.              importe_venta();
  21.              break;
  22.         case 'b':
  23.            
  24.             pedidos();
  25.             break;
  26.     }
  27.     return 0;
  28. }
  29. void importe_venta(void)
  30. {
  31.     int cantidad=0;
  32.     int precio=0;
  33.     printf("Cantidad >>>  ");
  34.     scanf("%d",&cantidad);
  35.     printf("Precio >>>  ");
  36.     scanf("%d",&precio);
  37.     int l=cantidad*precio;
  38.     printf("Importe >>> %d ",l);
  39.    
  40. }
  41. void pedidos(void)
  42. {
  43.    
  44.     vx pedido;
  45.     //while(getchar()!='n');
  46.     printf("Domicilio >>> ");
  47.         scanf("%30[^n],pedido.calle);
  48.     printf("%sn",pedido.calle);
  49.     printf("Cantidad total >>> ");
  50.     scanf("%d",&pedido.cantidad);
  51.     //print("%dn",pedido.cantidad);
  52.     printf("Cantidad de cada tipo >>> ");
  53.     scanf("%30[^n]",pedido.tipo_cantidad);
  54.     printf("%sn",pedido.tipo_cantidad);
  55.  
  56. }
  57.  
  58.  
  59.  
  60.  

Sucede que cuando elijo la opción "b" que es para acceder a la función "pedidos" se salta el scanf que pide el domicilio,ya he probado con fflush y no me ha funcionado.

Espero que me puedan ayudar, gracias.

Páginas: [1]