Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: soez en 3 Agosto 2010, 04:10 am



Título: Busqueda binaria con palabras
Publicado por: soez en 3 Agosto 2010, 04:10 am
A ver si me podeis echar una mano porque me stoy volviendo loco con esto xD, es respecto a una busqueda binaria pero con palabras. Os dejo el codigo a ver si veis algo, o algun consejo de como hacerlo. Thanks

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main()
  5. {
  6. char palabra[20][20];
  7. char busqueda[20]="";
  8. char palabra_aux[20];
  9. int i, k, h, primero=0, ultimo=19, centro=10;
  10. for(i=0;i<20;i++){
  11.           strcpy(palabra[i],"");
  12.    }// limpia el array
  13.    for(i=0;i<5;i++){
  14.          printf ("Introduce una palabra:");
  15.        scanf ("%s", &palabra[i]);                  
  16.    }// coge 5 palabras por teclado
  17.  
  18.    for(k=19;k>=0;k--)
  19.    {
  20. for(h=0;h<k;h++)
  21. {
  22. if((strcmp(palabra[h],palabra[h+1])>0) && (strcmp(palabra[h+1],"")!=0))
  23. {
  24.                        strcpy(palabra_aux,palabra[h]);
  25. strcpy(palabra[h],palabra[h+1]);
  26. strcpy(palabra[h+1],palabra_aux);
  27. }
  28. }
  29.  
  30.    }//ordena la lista
  31.  
  32. i=0;
  33. while(i<5)
  34.    {
  35.          printf ("Introduce una palabra para ver si se encuentra en la lista: ");
  36.          scanf ("%s", &busqueda);
  37.              primero=0;ultimo=19;
  38.          while ((primero<=ultimo) && (strcmp(busqueda,palabra[centro])!=0))
  39.          {
  40.                    centro=(primero+ultimo)/2;        
  41.                    if (strcmp(busqueda,palabra[centro])<0){primero=centro+1;}
  42.            if (strcmp(busqueda,palabra[centro])>0){ultimo=centro-1;}
  43.            printf("centro vale %d\n", centro);
  44.              }// busca en la lista
  45.          if (strcmp(busqueda,palabra[centro])==0) {printf ("La palabra se encuentra en la lista :)\n");}
  46.          else {printf ("La palabra no se encuentra en la lista :(\n");}
  47.              i++;
  48.    }// lo busca en 5 ocasiones
  49.  
  50. return 0;
  51. }
  52.  
  53.  

EDITO: Solucionado :) por fin, el array tiene que estar lleno o la busqueda al menos llena