Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Heroic en 26 de Marzo 2021, 22:56

Título: Programa de búsqueda secuencial C++ generar vector de tamaño variable rellenarlo
Publicado por: Heroic en 26 de Marzo 2021, 22:56
Hola necesito ayuda en el siguiente programa.

Generar un programa que genere un vector de tamaño variable, el vector se llenara con valores aleatorios de entre 1 y 100, el programa pedirá un valor que se desee encontrar, en caso de encontrarlo imprimir en que posición del vector se encuentra y en caso contrario imprimir que el elemento no se encontró en el vector.

La parte de generar el vector ya la tengo pero la búsqueda me da error, agradecería mucho su ayuda, adjunto el código.

Código: [Seleccionar]
#include "iostream"
#include <time.h>
#include <cstdlib>
#include <stdbool.h>
using namespace std;

main(){
int tam, num;
bool band = false;
cout<<"Tamano del vector: ";
cin>>tam;
int vector[tam];
srand(time(NULL));

for (int i=0;i<tam;i++){
vector [i]=rand()%(100-1);
}
for (int j=0;j<tam;j++){
cout<<"\n  Vector ["<<j<<"] = "<<vector[j];
}
cout<<"\nIngrese el numero que quieres buscar: ";
cin>>num;
while(band==false){
if(vector[i]==num){ //Al compilarlo aquí me marca el error
band = true;
}
i++;
}
if (band==false){
cout<<"\nEl numero a buscar no existe en el Vectro";
}
else if(band==true){
cout<<"\nEl numero a sido encontadro en la posicion: "<<i-1;
}
}
   
Título: Re: Ayuda con un programa de búsqueda secuencial en C++
Publicado por: Kabuto en 27 de Marzo 2021, 00:22
Citar
while(band==false){
      if(vector[ i]==num){ //Al compilarlo aquí me marca el error
         band = true;
      }
      i++;
   }

Te dará error porque la variable i, en ese punto del programa, ya no existe.

Tú la has declarado previamente en el bucle for

Citar
   for (int i=0;i<tam;i++){
      vector [ i]=rand()%(100-1);
   }

Pero eso implica que su "ámbito" se reduce a lo que ocurre DENTRO de ese bucle for.
Fuera de ese bucle, la variable i no existe.

Entonces, para poder usarla de nuevo, has de declararla nuevamente y mejor si lo haces en el cuerpo del programa principal, para que su "ámbito" abarque todo el código en adelante.
Además de declararla, conviene inicializarla a valor 0, para que la búsqueda comience desde el principio del vector.

Por cierto, durante la búsqueda solo debería incrementarse cuando no se encuentra coincidencia.
Si encuentra coincidencia y también se incrementa, luego no informará correctamente de la posición donde ha encontrado el número que se busca.

Además, el bucle while ha de detenerse en el caso de que ya se haya recorrido TODO el vector, es decir, cuando i sea igual a tam.
No podemos dejarlo solo en manos de la variable "bandera", porque si nos piden buscar un número que no existe, bandera NUNCA será true y el bucle podría resultar infinito.
Citar
   cout<<"\nIngrese el numero que quieres buscar: ";
   cin>>num;
   int i = 0;
   while(band==false && i < tam){
      if(vector[ i]==num){ //Al compilarlo aquí me marca el error
         band = true;
      }
      else
         i++;

   }
   if (band==false){
      cout<<"\nEl numero a buscar no existe en el Vectro";
   }
   else if(band==true){
         cout<<"\nEl numero a sido encontadro en la posicion: "<<i-1;
   }