Ver Mensaje Individual
  #2 (permalink)  
Antiguo 21/04/2011, 07:41
ssaammuu
 
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