UTNianos

Versión completa: Archivos c++ (if dentro del while) buscar
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Páginas: 1 2
Buenas tardes tengo una consulta con un algoritmo que estoy desarrollando escribo el algoritmo y abajo la pregunta:


#include <cstdlib>
#include <iostream>
#include <fstream>
using namespace std;
int opcion, canpares, canimpares, ambos, opcion2;
char get[1000];
int main(int argc, char *argv[])
{
cout << "1. Numeros Pares" << endl;
cout << "2. Numeros impares" << endl;
cout << "3. Numeros mixtos" << endl;
cout << "4. Buscar Numeros" << endl;
cin >> opcion;


if (opcion == 1)
{
ofstream Numpares;
Numpares.open("pares.xls", ios::app);
cout << "Ingrese la cantidad de numeros pares a cargar" << endl;
cin >> canpares;
cout << "Ingrese los numeros pares" << endl;
int pares[canpares];
for (int i=0; i<=canpares-1; i++)
{
cin >> pares[i];
}
for (int i=0; i<=canpares-1; i++)
{
Numpares << "Numero par: " << pares[i] << ',' << endl;
}
Numpares.close();
}

if (opcion == 2)
{
ofstream Numimpares;
Numimpares.open("Impares.xls", ios::app);
cout << "Ingrese la cantidad de numeros impares" << endl;
cin >> canimpares;
cout << "Ingrese los numeros impares" << endl;
int impares[canimpares];
for (int j=0; j<=canimpares-1; j++)
{
cin >> impares[j];
}
for (int j=0; j<=canimpares-1; j++)
{
Numimpares << impares[j] << '-' << endl;
}
Numimpares.close();
}

if (opcion == 3)
{
ofstream Mixtos;
Mixtos.open("mixtos.xls", ios::app);
cout << "Ingrese la cantidad de numeros impares a cargar" << endl;
cin >> ambos;
cout << "Ingrese los numeros" << endl;
int mix[ambos];
for (int a=0; a<=ambos-1; a++)
{
cin >> mix[a];
}
for (int a=0; a<=ambos-1; a++)
{
Mixtos << mix[a] << '.' << endl;
}
Mixtos.close();
}

if (opcion == 4)
{
cout << "1. Numeros Pares" << endl;
cout << "2. Numeros impares" << endl;
cout << "3. Numeros Mixtos" << endl;
cin >> opcion2;
}
if (opcion2 == 1)
{
ifstream SalidaPares;
SalidaPares.open("pares.xls", ios::in);
while (! SalidaPares.eof())
{
SalidaPares.getline(get, 1000, ',');
cout << get << endl;
}
SalidaPares.close();
}
if (opcion2 == 2)
{
ifstream SalidaImpares;
SalidaImpares.open("Impares.xls", ios::in);
while (! SalidaImpares.eof())
{
SalidaImpares.getline(get, 1000, '-');
cout << get << endl;
}

SalidaImpares.close();
}
if (opcion2 ==3)
{

ifstream SalidaMixtos;
SalidaMixtos.open("mixtos,xls", ios::in);
while (! SalidaMixtos.eof())
{
SalidaMixtos.getline(get, 1000, '.');
cout << get << endl;
}
SalidaMixtos.close();
}



system("PAUSE");
return EXIT_SUCCESS;
}


Bien la pregunta es si necesito buscar si tal numero se encuentra dentro de los pares y que me diga si esta o no (sin que me de toda la lista como en el algoritmo de arriba) tengo que poner un if dentro del while pero como seria? desde ya muchas gracias.
si te entendi bien es asi:


int numeroBuscado;
cin >> numeroBuscado;
bool encontrado = false;
for (int i=0;i<canpares;i++)
{
if (pares[i] == numeroBuscado)
{
encontrado=true;
break; //como lo encontro termina el bucle
}
}


el break si queres no lo pongas, es para optimizar pero creo que en algoritmos no se ve.
Eso va dentro del while y el cin numerobuscado fuera del while? Muchas gracias

Osea seria en vez del salida.getline() y el cout get eso?
claro, es como esta ahi.
Declaras "numeroBuscado", lo ingresan por consola, despues declaras una variable de tipo bool y la inicializas en false (si no encuentra el numero nunca cambia), entra al bucle y empieza a recorrer los numeros pares, si encuentra alguno que coincida con el "numeroBuscado" setea "encontrado" en true y termina el bucle, si no encuentra ninguno "encontrado" queda en false.
Perdona te vuelvo a insistir porque soy re nuevo en esto y no entiendo casi nada va nada.
Declare numeroBuscado como int y bool encontrado = false; y puse afuera del while. Cout << "ingrese el numero a buscar" << endl;
Cin >> numeroBuscado;
While (! Salidapares.eof())
{
For (int i=0; i<=canpares-1; i++)
{
If (pares[i] == numeroBuscado)
{
Encontrado == true;
}
}
Salidapares.getline(get, 1000, '.');
Cout << get << endl;


}


Y no me lo toma que estoy haciendo mal? Perdon por las molestiaa
No se mucho de c, pero por lo que entiendo estas en la opción 4.1
El archivo lo generas con datos numero par: 4,numero par: 8, etc.
Y después estas buscando y comparando con variables no asignadas, en este punto, pares [] y canpares no tienen datos validos
Lo que podrías hacer es leer cada linea hasta la coma y comparar con un char formado por "numero par: "numerobuscado


Esto según lo que entendí que hiciste
Claro yo lo que hice fue hacer cada linea hasta la , y despues un get que me muestra todo pero sigo sin entender como compararlo con el numero que el usuario pida sin que me tire toda la lista de los numeros
Entiendo que queres usar el algoritmo que ya tenes...pero sino lo haces para cualquier numero usando el operador modulo %

numero % 2 == 0

te da el resto de un numero en la division por 2...si no hay resto es par...
Lo primero seria armar stringbuscado[] como una cadena numerobuscado como un char (no un int)
Y haces
Stringbuscado = "numero par :" + numerobuscado + ",'
Después entras al while mientras no fin de archivo y no encontrado
Lees un registro del archivo
Después comparas, el registro leído con stringbuscado


(Nuevamente, quizá no sea esa la sintaxis de c, pero es la idea)
Si gracias, igual el problema no es que detecte si es par o no eso esta, el tema es lo del buscar jaja
osea, despues de esto:



for (int i=0; i<=canpares-1; i++)
{
cin >> pares[i];
}



tenes que pegar el codigo que te pase, te quedaria asi:



for (int i=0; i<=canpares-1; i++)
{
cin >> pares[i];
}

int numeroBuscado;
cin >> numeroBuscado;
bool encontrado = false;
for (int i=0;i<canpares;i++)
{
if (pares[i] == numeroBuscado)
{
encontrado=true;
break; //como lo encontro termina el bucle
}
}



si no te funciona decime el error que te tira

y si queres mostrar el resultado por pantalla tenes que agregar esto:



if (encontrado=false)
{
cout << El numero buscado no se encuentra en la lista de pares<< endl;
}
else
{
cout << El numero buscado se encuentra en la lista de pares<< endl;
}

Con eso estas buscando en un vector, no en el archivo, ese vector podría estar vacío, o tener datos inválidos, si no se uso la opción 1, porque el programa te permite ir a la opción 4 y buscar en un archivo ya existente, así que no sería correcto
(Según entendí, debe buscar en el archivo)

(11-12-2014 12:15)DobleR escribió: [ -> ]osea, despues de esto:



for (int i=0; i<=canpares-1; i++)
{
cin >> pares[i];
}



tenes que pegar el codigo que te pase, te quedaria asi:



for (int i=0; i<=canpares-1; i++)
{
cin >> pares[i];
}

int numeroBuscado;
cin >> numeroBuscado;
bool encontrado = false;
for (int i=0;i<canpares;i++)
{
if (pares[i] == numeroBuscado)
{
encontrado=true;
break; //como lo encontro termina el bucle
}
}



si no te funciona decime el error que te tira

y si queres mostrar el resultado por pantalla tenes que agregar esto:



if (encontrado=false)
{
cout << El numero buscado no se encuentra en la lista de pares<< endl;
}
else
{
cout << El numero buscado se encuentra en la lista de pares<< endl;
}

ah, lo de la opcion 4 no lo vi, bueno lo mio funciona solo para la opcion 1, y como de c++ se lo basico no te puedo ayudar con lo de los archivos.
Con respecto a lo de que el vector puede estar vacio o tener daots invalidos, es discutbile, depende para que tipo de usuario programes.
Muchisimas gracias, el tema esta en la opcion 4 porque como estoy guardando los numeros en el archivo los tengo que traer y comparar. Igual muchas gracias
(10-12-2014 16:02)maximiliano_forlenza escribió: [ -> ]ofstream Numpares;
Numpares.open("pares.xls", ios::app);

ya que estamos pregunto, esa manera de abrir archivos no la vi nunca, y el ios::app que hace? maximiliano_forlenza
Páginas: 1 2
URLs de referencia