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#include <cstdlib>
#include <iostream>
using namespace std;
template <class T> int busquedaLineal(T[], T, int, int=0);
int main(int argc, char *argv[])
{
int arreglo[15] = {25,17,13,16,41,32,12,115,95,84,54,63,78,21,10};
cout<<"Indique el valor a buscar:\t";
int a;
cin>>a;
int pos = busquedaLineal(arreglo, a, sizeof arreglo/sizeof arreglo[0]);
if (pos!=-1)
cout<<"\nEse valor est\xA0 en: "<<pos;
else
cout<<"\nEse valor no est\xA0";
cout<<"\n";
return EXIT_SUCCESS;
}
template <class T> int busquedaLineal(T arreglo[], T valor, int hasta, int desde) {
for(int i = desde; i < hasta; i++)
{
if(arreglo[i] == valor) return i;
}
return -1;
}
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.