Autor Tema: Ayuda con un programa de búsqueda secuencial en C++  (Leído 99 veces)

Heroic

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 5
    • Ver Perfil
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;
}
}
   

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 594
    • Ver Perfil
Re: Ayuda con un programa de búsqueda secuencial en C++
« Respuesta #1 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;
   }
« Última modificación: 27 de Marzo 2021, 00:25 por Kabuto »
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".