Dev - C++ - Ayuda para sumar los números de dos filas en un archivo

 
Vista:
sin imagen de perfil
Val: 22
Ha disminuido su posición en 2 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Ayuda para sumar los números de dos filas en un archivo

Publicado por juan (13 intervenciones) el 16/04/2020 00:52:50
Buenas,
como podria hacer lo siguiente:
1º Leer un fichero que esta formado por dos columnas (desconocemos el numero de filas), asegurarse de que los datos del fichero son numeros reales y de que en la columna 1 y en la 2 hay la misma cantidad de numeros.
2º Sumar los elementos de las filas, por ejemplo:
2 3 --> 2+3=5
1 2 --> 1+2=3
4 1 --> 4 +1 = 5
2 3 -->2 + 3 =5
3º Mostrar por consola el numero mas grande que se obtiene al sumar las columnas y los numeros que se han sumado para alcanzar ese numero, pero si en el fichero hay una fila con los mismos numeros solo debe salir una vez por consola.
Segun el ejemplo anterior en la consola deberia aparecer:
"El número mayor que se obtiene es 5 que se obtiene al sumar: 2 y 3, 4 y 1.

Yo he pensado ir añadiendo a un vector los resultados de las sumas y luego imprimir por consola el mayor, pero no se como puedo hacer esto

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <iostream>
#include <fstream>
#include <vector>
#include <sstream>
#include <cmath>
 
const char sumasFich[] = "puntos.txt";
 
int main()
{
	std::ifstream in(sumasFich, std::ios::in);
	//SI EL FICHERO NO SE PUEDE ABRIR DA ERROR Y FINALIZA
	if(!in){
		std::cout << "ERROR al abrir el fichero. " << sumasFich;
		return 1;
	}
 
	std::vector<double> columna1,columna2;
	while(!in.eof()){
		double col1, col2;
		in >> col1;
		if(in.eof())break;
		if(in.fail()){
			std::cout << "Dato no valido en el fichero " << sumasFich << std::endl;
			return 1;
		}
 
		inFich >> col2;
 
		if(in.eof()){
			std::cout << "FICHERO " << sumasFich << " INCOMPLETO. " ;
			return 1;
		}
		if(in.fail()){
			std::cout << "Dato no valido en el fichero " << sumasFich << std::endl;
			return 1;
		}
 
		columna1.push_back(co1);
		columna2.push_back(col2);
	}
 
	in.close();
	if(columna1.size() == 0){
		std::cout << "El fichero " << sumasFich << " esta vacio. ";
		return 1;
	}
 
       double Sumas;
 
	for(unsigned int i = 0; i < columna1.size(); i++){
		Sumas = columna1[i]+columna2[i]
		std::cout << "El resultado mayor es " << Sumas << " se obtiene al sumar "<< columna1[i] << " y " <<
                columna2[i] << std::endl;
	}
return 0;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Rodrigo
Val: 1.755
Plata
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Ayuda para sumar los números de dos filas en un archivo

Publicado por Rodrigo (539 intervenciones) el 16/04/2020 16:22:49
Cuando lees los datos puedes aprovechar de sumarlos y ver cual es el valor mayor. No necesitas esperar a tenerlos todos para tener ese numero.

Luego de haberlos leidos todos ellos, puedes iterar sobre ellos y ver cual de ellos son iguales al maximo que calculaste antes.

El problema de no repetir los pares ya mostrados se podria resolver guardando los que ya mostraste. Dado esto, podrias guardar al momento de leer los datos, o sea hacer todo en el momento de la lectura.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int maxsum = INT_MIN;
 
while(!in.eof()) {
   // leer datos en col1 y col2
   suma = col1 + col2;
   // es un nuevo maximo?
   if( suma > maxsum ) {
       maxsum = suma;
       // empezar todo desde cero, guardar estos datos
       columna1.clear();  columna2.clear();
       columna1.push_back(col1);
       columna2.push_back(col2);
   } else if( suma == maxsum ) {
       // otra posible pareja de elementos igual al maximo
       // ignorar repetidos
       if( !contiene( columna1, col1) && !contiene( columna2, col1 )) {
           columna1.push_back(col1);
           columna2.push_back(col2);
       }
   }
}

luego los datos a mostrar sin logica alguna son maxsum y el contenido de columna1 y columna2
tienes que implementar contiene(). usa la funcion find() y compara contra end() para implementarla.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar