• Viernes 8 de Noviembre de 2024, 17:55

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.


Mensajes - lambda

Páginas: [1]
1
C/C++ / Re: Problemas con tabla hash
« en: Miércoles 18 de Mayo de 2011, 20:07 »
Muchas gracias alexg88, de hecho ya habia corregido el problema, en si la función original es de tipo "Elemento*", y devuelve el apuntador de la traducción en la tabla. La volví void, para que en vez de devolver el apuntador, diera directamente la traduccion con un printf.
Muchisimas gracias por tu ayuda,en unos dias mas subire el codigo del proyecto y el proyecto entero, optimizado y con la capacidad de traducir en 3 idiomas. Espero algun dia ser un miembro activo de este grandioso foro.

2
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.

3
C/C++ / Re: Traductor de idiomas en C
« en: Lunes 16 de Mayo de 2011, 07:04 »
gracias nagitarami creo que con el arbol de busqueda me hare menos lios, yo planeaba hacerlo con una tabla hash porque segun esto son buenas para implementar el tipo diccionario. Aunque tengo un par de dudas ¿El arbol tiene que ser binario? ¿puedo usar cualquier tipo de recorrido, ya sea inorden,postorden y preorden o van todos de jalon?. Es que la verdad ando muy verde en esta materia ya que por cuestiones de salud falte demasiado a esa clase

4
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.

5
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]