elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, YreX-DwX)
| | |-+  Ayuda con ejercicio en C++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con ejercicio en C++  (Leído 122 veces)
gomezjuan

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Ayuda con ejercicio en C++
« en: 26 Abril 2020, 18:11 »

Buenas, tengo que hacer un ejercicio que haga 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.
Esto es lo que tengo hecho:
Código
  1. #include <iostream>
  2. #include <fstream>
  3. #include <vector>
  4. #include <sstream>
  5. #include <cmath>
  6.  
  7. const char sumasFich[] = "puntos.txt";
  8.  
  9. int main()
  10. {
  11. std::ifstream in(sumasFich, std::ios::in);
  12. //SI EL FICHERO NO SE PUEDE ABRIR DA ERROR Y FINALIZA
  13. if(!in){
  14. std::cout << "ERROR  " << sumasFich;
  15. return 1;
  16. }
  17.  
  18. std::vector<double> columna1,columna2;
  19. while(!in.eof()){
  20. double col1, col2;
  21. in >> col1;
  22. if(in.eof())break;
  23. if(in.fail()){
  24. std::cout << "ERROR " << sumasFich << std::endl;
  25. return 1;
  26. }
  27.  
  28. inFich >> col2;
  29.  
  30. if(in.eof()){
  31. std::cout << "ERROR " ;
  32. return 1;
  33. }
  34. if(in.fail()){
  35. std::cout << "ERROR" << std::endl;
  36. return 1;
  37. }
  38.  
  39. columna1.push_back(col1);
  40. columna2.push_back(col2);
  41. }
  42.  
  43. in.close();
  44. if(columna1.size() == 0){
  45. std::cout << "El fichero " << sumasFich << " esta vacio. ";
  46. return 1;
  47. }
  48.  
  49.       double Sumas;
  50.  
  51. for(unsigned int i = 0; i < columna1.size(); i++){
  52. Sumas = columna1[i]+columna2[i]
  53. std::cout << "El resultado mayor es " << Sumas << " se obtiene al sumar "<< columna1[i] << " y " <<
  54.                columna2[i] << std::endl;
  55. }
  56. return 0;
  57. }
  58.  


En línea

YreX-DwX
Moderador
***
Desconectado Desconectado

Mensajes: 702



Ver Perfil
Re: Ayuda con ejercicio en C++
« Respuesta #1 en: 26 Abril 2020, 18:34 »

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.
Si te piden que compruebes que todas las columnas están formadas por 2 valores y que ambos sean numéricos, yo diría que tienes que leer línea por línea del fichero con getline() por ejemplo y el resultado que obtendrás en un string tendrás que separarlo en dos partes y validar cada parte para saber que son números.
Así dicho parece mucho pero son un par de funciones simples.

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.
Si sólo te pidiesen la mayor suma bastaría con una variable que irías actualizando al encontrar una suma mayor. Si solo te pidiesen el resultado mayor y una de las filas que lo obtienen, bastaría con 3 variables que irías actualizando de igual forma que antes.
Sin embargo, como pueden ser muchas filas las que obtienen el mayor resultado, sería mejor crear un struct o una clase (ya que es C++) que contenga:
Código
  1. class Registro {
  2.  private:
  3.    double operando1;
  4.    double operando2;
  5.    double suma;
  6.  //...
  7. };

Y hacer un vector de registros.
Otra opción un poco más avanzada pero más eficiente es que como se pide no mostrar repetidos puedes usar un Set de la STL también. Defines que un registro es igual que otro cuando sus tres atributos son iguales o con que los dos operandos sean iguales es suficiente también. Y así al introducir un registro en el Set, si ya existe, se omitirá.


En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Ayuda] Ejercicio C 100
Ejercicios
Dem0ny 2 4,409 Último mensaje 19 Diciembre 2007, 22:45
por Dem0ny
Ayuda co un ejercicio de C#
.NET (C#, VB.NET, ASP)
hitori batusai 2 3,869 Último mensaje 22 Febrero 2008, 01:53
por hitori batusai
Ayuda con ejercicio de VB
Programación Visual Basic
guada_sp 5 2,130 Último mensaje 8 Marzo 2008, 02:54
por ‭‭‭‭jackl007
Ayuda con ejercicio
.NET (C#, VB.NET, ASP)
elbrunosimpson 4 1,953 Último mensaje 4 Septiembre 2008, 23:16
por Meta
Ayuda ejercicio de Pascal, cuando uno no lo ve claro pide ayuda
Programación General
manu3742 1 1,680 Último mensaje 31 Marzo 2011, 15:43
por d(-_-)b
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines