Problema con loop while

Iniciado por miketru, 11 Septiembre 2010, 02:34 AM

0 Miembros y 2 Visitantes están viendo este tema.

miketru

Ok, tengo un codigo, necesito encontrar los numeros mas grandes y mas chicos de un 2 .txt (un numero por linea y un espacio entre cada linea) ej:
1

2

3

Asi estaría el txt, el problema es que en mi codigo siempre muestra el ultimo numero no el mas grande... alguien me puede ayudar?

Aqui está el codigo:
#include "stdafx.h"
#include <fstream>
#include <iostream>

using namespace System;
using namespace std;

int main(){

ifstream archivo1;
ifstream archivo2;

archivo1.open("texto1.txt");
archivo2.open("texto2.txt");

int max1, max2, min1, min2, var1, var2, n1;

cout << "Se encontrara el numero mas grande de la lista" << endl;

while(!archivo1.eof()){
archivo1>>var1;
if(var1>max1);
max1=n1;}
cout << "El valor maximo es: " << max1 << endl;

while(archivo2>>var1){
archivo2>>var2;
if(var2>max2);
max2=var2;}
cout << "El valor maximo es: " << max2<< endl;


system ("PAUSE");



Shell Root

#1
No se nada de C++, pero por lo menos lo intente... :p
Código (cpp) [Seleccionar]
#include <iostream>
#include <fstream>

using namespace std;
int main(){
 ifstream archivo2;

 archivo2.open("Archivo2.txt");
 
  int max2 = 0; int var2 = 0;

 cout << "Se encontrara el numero mas grande de la lista" << endl;

 while(!archivo2.eof()){
   archivo2>>var2;
   if(var2 >= max2){
     max2 = var2;
   }
 }
 cout << "El valor maximo es: " << max2 << endl;
 system ("pause");
}

Archivo2.txt
Código (PoC) [Seleccionar]
7

8

9

10

20

12

Salida:
Código (PoC) [Seleccionar]
Se encontrara el numero mas grande de la lista
El valor maximo es: 20
Presione una tecla para continuar . . .
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

miketru

Copie tu código en el Vc++ y le agregue #include stdafx.h que es la que te pide a fuerza... y lo ejecuto y se queda en el primer cout... y ahí se atora... y si dices que a ti si te funcionó... entonces está haciendo algo mal el programa? :S porque según yo, mi código también está bien...

Shell Root

mmm fijate bien en la linea, si es el nombre del archivo?
Código (cpp,8) [Seleccionar]
#include <iostream>
#include <fstream>

using namespace std;
int main(){
 ifstream archivo2;

 archivo2.open("Archivo2.txt");

 int max2 = 0; int var2 = 0;

 cout << "Se encontrara el numero mas grande de la lista" << endl;

 while(!archivo2.eof()){
   archivo2>>var2;
   if(var2 >= max2){
     max2 = var2;
   }
 }
 cout << "El valor maximo es: " << max2 << endl;
 system ("pause");
}
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

miketru

No me habia dado cuenta de que no pusiste el mismo nombre que yo. Gracias.

Y una ultima preugnta, para obtener el numero mas chico, siempre me da cero sabes porque?

Shell Root

Asi,
Código (cpp) [Seleccionar]
#include <iostream>
#include <fstream>

using namespace std;
int main(){
 ifstream archivo2;

 archivo2.open("Archivo2.txt");
 
 int min1 = 0; int var1 = 0;

 cout << "Se encontrara el numero mas grande de la lista" << endl;

 archivo2>>min1;
 while(!archivo2.eof()){
   archivo2>>var1;
   if(var1 < min1){
     min1 = var1;
   }
 }
 
 cout << "El valor maximo es: " << min1 << endl;
 system ("pause");
}

Archivo2.txt
Código (PoC) [Seleccionar]
7

8

9

1

10

20

12

Resultado:
Código (PoC) [Seleccionar]
Se encontrara el numero mas grande de la lista
El valor maximo es: 1
Presione una tecla para continuar . . .
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

miketru

Ya vi el problema. es que tengo 4 whiles... y siempre los ultimos 2 me marcan 0... pero por separado los 4 funcionan... saben porque es esto?

Shell Root

jajaja mostrad el codigo, y creo que se podria reducir a 2 bucles.
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

miketru

Ya decía yo que lo estaba haciendo bien ¬¬ jajajaja

#include "stdafx.h"
#include <iostream>
#include <fstream>

using namespace std;
int main(){
 ifstream archivo2;
 ifstream archivo1;

 archivo2.open("texto2.txt");
 archivo1.open("texto1.txt");

 int min2 = 0; int var2 = 0;


 archivo2>>min2;
 while(!archivo2.eof()){
   archivo2>>var2;
   if(var2 < min2){
     min2 = var2;
   }
 }



  int min1 = 0; int var1 = 0;

 

 archivo1>>min1;
 while(!archivo1.eof()){
   archivo1>>var1;
   if(var1 < min1){
     min1 = var1;
   }
 }


 if(min1<min2)
 cout << "El numero mas chico de los dos archivos es: " << min1 << endl;
 else
 cout << "El numero mas chico de los dos archivos es: " << min2 << endl;




 int max2 = 0; int var3 = 0;
  while(!archivo2.eof()){
   archivo2>>var3;
   if(var3 >= max2){
     max2 = var3;
   }
 }
 
 int max1 = 0; int var4 = 0;

  while(!archivo1.eof()){
   archivo1>>var4;
   if(var4 >= max1){
     max1 = var4;
   }
 }

  if(max1>max2)
 cout << "El numero mas grande de los dos archivos es: " << max1 << endl;
 else
 cout << "El numero mas grande de los dos archivos es: " << max2 << endl;



 system ("pause");
}

Shell Root

Ahora no tengo cabeza para pensar en como reducir los bucles, pero, puedo decirte esto, estas usando mas variables de las que necesitas. Por ejemplo,
Código (cpp) [Seleccionar]
  if(min1<min2)
      cout << "El numero mas chico de los dos archivos es: " << min1 << endl;
  else
      cout << "El numero mas chico de los dos archivos es: " << min2 << endl;

Podrias usar la misma variable para los 2 archivos. Y en este caso, que pasaria si las variables fueran iguales?

Ponedle nombres nemotecnicos a las variables, porque asi como las tienes, es dificil de interpretar a cual bloque de codigo pertenece.
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.