Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Implementar una búsqueda lineal en C++ (en qué me equivoco??)

Estas en el tema de Implementar una búsqueda lineal en C++ (en qué me equivoco??) en el foro de C/C++ en Foros del Web. Hola! estoy tratando de implementar una búsqueda lineal simple más que nada para experimentar con el lenguaje (vengo de Java). El problema es que deseo ...
  #1 (permalink)  
Antiguo 20/04/2011, 16:08
 
Fecha de Ingreso: diciembre-2009
Ubicación: dirname(__FILE__)
Mensajes: 149
Antigüedad: 14 años, 4 meses
Puntos: 11
Implementar una búsqueda lineal en C++ (en qué me equivoco??)

Hola! estoy tratando de implementar una búsqueda lineal simple más que nada para experimentar con el lenguaje (vengo de Java).

El problema es que deseo que la plantilla busquedaLineal(T[], T) sepa automáticamente el largo del arreglo, para eso divido el espacio de memoria del arreglo con el espacio de cada uno de sus elementos "sizeof(arreglo)/sizeof(valor)", pero allí está el problema, se agradece cualquier ayuda

Código C++:
Ver original
  1. #include <cstdlib>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. template <class T> int busquedaLineal(T[], T);
  7. template <class T> int busquedaLineal(T[], T, int, int);
  8.  
  9. int main(int argc, char *argv[])
  10. {
  11.     int arreglo[15] = {25,17,13,16,41,32,12,115,95,84,54,63,78,21,10};
  12.  
  13.     cout<<"\nIndique el valor a buscar:\t";
  14.     int a;
  15.     cin>>a;
  16.    
  17.     cout<<"\nEse valor está en: "<< busquedaLineal(arreglo, a);
  18.    
  19.     system("PAUSE");
  20.     return EXIT_SUCCESS;
  21. }
  22.  
  23. template <class T> int busquedaLineal(T arreglo[], T valor, int desde, int hasta) {
  24.     for(int i = desde; i < hasta; i++)
  25.     {
  26.         if(arreglo[i] == valor) return i;
  27.     }
  28.    
  29.     return -1;
  30. }
  31.  
  32. template <class T> int busquedaLineal(T arreglo[], T valor) {
  33.          int hasta = sizeof(arreglo)/sizeof(valor);
  34.          return busquedaLineal(arreglo, valor, 0, hasta);
  35. }
__________________
Estreno blog ~ DesarrolladorWeb.cl :)
  #2 (permalink)  
Antiguo 21/04/2011, 07:41
 
Fecha de Ingreso: abril-2011
Mensajes: 88
Antigüedad: 13 años
Puntos: 24
Respuesta: Implementar una búsqueda lineal en C++ (en qué me equivoco??)

Código:
int hasta = sizeof(arreglo)/sizeof(valor);
Esto es lo que te falla. Al enviar arreglo como argumento a una función en realidad solo estás mandando la direccion de comienco del array ya que un array es como un puntero a datos consecutivos, por lo que sizeof(arreglo) te dá lo mismo que sizeof(valor) ya que ambos son de mismo tipo y por lo tanto en bucle solo se ejecuta una vez. Tienes que enviar el número de elementos del array como argumento.

Podrías hacer esto:
Código C++:
Ver original
  1. #include <cstdlib>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. template <class T> int busquedaLineal(T[], T, int, int=0);
  7.  
  8. int main(int argc, char *argv[])
  9. {
  10.     int arreglo[15] = {25,17,13,16,41,32,12,115,95,84,54,63,78,21,10};
  11.  
  12.     cout<<"Indique el valor a buscar:\t";
  13.     int a;
  14.     cin>>a;
  15.  
  16.     int pos = busquedaLineal(arreglo, a, sizeof arreglo/sizeof arreglo[0]);
  17.     if (pos!=-1)
  18.     cout<<"\nEse valor est\xA0 en: "<<pos;
  19.     else
  20.     cout<<"\nEse valor no est\xA0";
  21.     cout<<"\n";
  22.     system("PAUSE");
  23.     return EXIT_SUCCESS;
  24. }
  25.  
  26. template <class T> int busquedaLineal(T arreglo[], T valor, int hasta, int desde) {
  27.     for(int i = desde; i < hasta; i++)
  28.     {
  29.         if(arreglo[i] == valor) return i;
  30.     }
  31.  
  32.     return -1;
  33. }

He quitado una de las funciones ya que no hace falta.
El accento está arreglado.
Si no se encuentra, se dice, en vez de imprimir -1.
*alomejor es más conveniente hacer return i+1, y dar la posición en vez del índice.
__________________
Foros Desarrollo de Juegos
  #3 (permalink)  
Antiguo 21/04/2011, 12:19
 
Fecha de Ingreso: diciembre-2009
Ubicación: dirname(__FILE__)
Mensajes: 149
Antigüedad: 14 años, 4 meses
Puntos: 11
Respuesta: Implementar una búsqueda lineal en C++ (en qué me equivoco??)

Excelente, muchas gracias :)
__________________
Estreno blog ~ DesarrolladorWeb.cl :)

Etiquetas: implementar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:05.