Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: M-Stewart612 en 8 Noviembre 2018, 06:56 am



Título: Programa de divisas
Publicado por: M-Stewart612 en 8 Noviembre 2018, 06:56 am
Sucede que estoy realizando un programa de Divisas, el cual recibe la información de la cantidad a convertir, de diferentes monedas. Después debe imprimir el reporte total que obtuvo por cada moneda; pero sucede que el reporte final no lo imprime, solo da el pantallaso y regresa a la primera parte

¿Qué debo hacer para qué se imprima la información?
Código
  1. [/#include <iostream>
  2. #include<stdlib.h>
  3. #include<stdio.h>
  4. #include <windows.h>
  5. using namespace std;
  6.  
  7. /*USD= 7.72, EUR= 8.80, CAD= 5.89, GBP= 10.03, CHF= 7.71, AUD=5.58 , NZD= 5.13*/  
  8.  
  9. int main(){
  10. string reporte,x;
  11. int opcion, monto, i;
  12.  
  13. string mon[7];
  14. double moneda[7],total;
  15. total=0;
  16. mon [0]="Dolar";
  17. mon [1]="Euro";
  18. mon [2]="Dolar Canadiense";
  19. mon [3]="Libra";
  20. mon [4]="Franco Suizo";
  21. mon [5]="Dolar Australiano";
  22. mon [6]="Dolar Neozelandes";
  23. for(i=0;i<7;i++){
  24.   moneda[i]=0;
  25.   }
  26. x="si";
  27.   do{
  28.   system("cls");
  29.   total=0;
  30.   cout<<endl<<"|------------------------------------------------------------------------------------------------|"; cout<<"\n";
  31. cout<<"\t \t \t  HAS INGRESADO AL REGISTRO DE DIVISAS";
  32. cout<<endl<<"|------------------------------------------------------------------------------------------------|"; cout<<"\n"; cout<<"\n";
  33.   cout<<"Opciones: \n  \t 1. Dolar \n \t 2. Euro \n \t 3. Dolar Canadiense \n  \t 4. Libra \n \t 5. Franco Suizo \n \t 6. Dolar Australiano \n \t 7. Dolar Neozelandes"<<endl;
  34.   cout<<"Ingrese el numero de la opcion que desea: "<<endl; cin>>opcion;
  35.   switch (opcion){
  36.   case 1:
  37.   cout<<endl<<"|------------------------------------------------------------------------------------------------|"; cout<<"\n";
  38.   cout<<"Opcion selecionada: DOLAR"<<endl;
  39.   cout<<"Ingrese el monto que desea convertir: "; cin>>monto;
  40.   moneda[0]=moneda[0]+monto;
  41.   break;
  42. cout<<endl<<"|------------------------------------------------------------------------------------------------|"; cout<<"\n";  
  43.   case 2:
  44.   cout<<endl<<"|------------------------------------------------------------------------------------------------|"; cout<<"\n";
  45.   cout<<"Opcion selecionada: EURO"<<endl;
  46.   cout<<"Ingrese el monto que desea convertir: "; cin>>monto;
  47.   moneda[1]=moneda[1]+monto;
  48.   break;
  49.   cout<<endl<<"|------------------------------------------------------------------------------------------------|"; cout<<"\n";
  50.   case 3:
  51.   cout<<endl<<"|------------------------------------------------------------------------------------------------|"; cout<<"\n";
  52.   cout<<"Opcion selecionada: DOLAR CANADIENSE"<<endl;
  53.   cout<<"Ingrese el monto que desea convertir: "; cin>>monto;
  54.   moneda[2]=moneda[2]+monto;
  55.   break;
  56.   cout<<endl<<"|------------------------------------------------------------------------------------------------|"; cout<<"\n";
  57.   case 4:
  58.   cout<<endl<<"|------------------------------------------------------------------------------------------------|"; cout<<"\n";
  59.   cout<<"Opcion selecionada: LIBRA"<<endl;
  60.   cout<<"Ingrese el monto que desea convertir: "; cin>>monto;
  61.   moneda[3]=moneda[3]+monto;
  62.   break;
  63.   cout<<endl<<"|------------------------------------------------------------------------------------------------|"; cout<<"\n";
  64.   case 5:
  65.   cout<<endl<<"|------------------------------------------------------------------------------------------------|"; cout<<"\n";
  66.   cout<<"Opcion selecionada: FRANCO SUIZO"<<endl;
  67.   cout<<"Ingrese el monto que desea convertir: "; cin>>monto;
  68.   moneda[4]=moneda[4]+monto;
  69.   break;
  70.   cout<<endl<<"|------------------------------------------------------------------------------------------------|"; cout<<"\n";
  71.   case 6:
  72.   cout<<endl<<"|------------------------------------------------------------------------------------------------|"; cout<<"\n";
  73.   cout<<"Opcion selecionada: DOLAR AUSTRALIANO"<<endl;
  74.   cout<<"Ingrese el monto que desea convertir: ";
  75.   cin>>monto;
  76.   moneda[5]=moneda[5]+monto;
  77.   break;
  78.   cout<<endl<<"|------------------------------------------------------------------------------------------------|"; cout<<"\n";
  79.   case 7:
  80.   cout<<endl<<"|------------------------------------------------------------------------------------------------|"; cout<<"\n";
  81.   cout<<"Opcion selecionada: DOLAR NEOZELANDES"<<endl;
  82.   cout<<"Ingrese el monto que desea convertir: ";
  83.   cin>>monto;
  84.   moneda[6]=moneda[6]+monto;
  85.   break;
  86.   cout<<endl<<"|------------------------------------------------------------------------------------------------|"; cout<<"\n";
  87.   case 8 :{
  88.        x="no";
  89.   break;
  90.   }
  91.   default:
  92.   cout<<"Por favor elija una opcion valida ";
  93.   break;
  94.   }
  95.   cout<<"Desea ver el reporte final (si/no)";
  96.   cin>>reporte;
  97.   if (reporte=="si"){
  98.  
  99. /*IMPRIMIR EL REPORTE DE TRANSACCIONES*/
  100.  
  101.   for(i=0;i<7;i++){
  102.   cout<<"moneda "<<mon[i]<<endl;
  103.   cout<<"cantidad "<<moneda[i]<<endl;
  104.   if (i==0){
  105.   cout<<"cantidad en Quetzales "<<moneda[i]*7.72<<endl;
  106.   total=total+(moneda[i]*7.72);
  107.   }else if (i==1){
  108.   cout<<"cantidad en Quetzales "<<moneda[i]*8.8<<endl;
  109.   total=total+(moneda[i]*8.8);
  110.   } else if (i==2){
  111.   cout<<"cantidad en Quetzales "<<moneda[i]*5.89<<endl;
  112.   total=total+(moneda[i]*5.89);
  113.   }else if (i==3){
  114.   cout<<"cantidad en Quetzales "<<moneda[i]*10.03<<endl;
  115.   total=total+(moneda[i]*10.03);
  116.   }else if (i==4){
  117.   cout<<"cantidad en Quetzales "<<moneda[i]*7.7<<endl;
  118.   total=total+(moneda[i]*7.7);
  119.   }else if (i==5){
  120.   cout<<"cantidad en Quetzales "<<moneda[i]*5.55<<endl;
  121.   total=total+(moneda[i]*5.55);
  122.   }else if (i==6){
  123.   cout<<"cantidad en Quetzales "<<moneda[i]*5.13<<endl;
  124.   total=total+(moneda[i]*5.13);
  125.   }
  126.   }
  127.   cout<<"Total Invertido en Quetzales : "<<total<<endl;
  128.   }
  129.   }while(x=="si");
  130.  }]


Título: Re: Programa de divisas
Publicado por: elgilun en 8 Noviembre 2018, 22:26 pm
Puedo comentarte un par de cosas que veo.

1) Deberías poder usar un debugger, que es una herramienta (normalmente disponible desde el mismo editor de código o IDE). Usando un debugger podrás poner "puntos de parada", o como se llamen en tu pueblo, y seguir el flujo de ejecución del código, paso a paso, con lo que podrás ver claramente qué es lo que hace que el programa se comporte como se comporta. Debugger, todo el mundo los usa. No puedes llamarte programador si no los usas. No hay excusas.

2)
Citar
#include <iostream>
#include<stdlib.h>
O tu programa es C++ (<iostream>) o es C (<stdlib.h>); no puede ser las dos cosas. No puede, no, nunca. ¿Te han dicho que no sé qué sobre C/C++? Bueno, no, es mentira, o C o C++, decídete.

3)
Citar
/*USD= 7.72, EUR= 8.80, CAD= 5.89, GBP= 10.03, CHF= 7.71, AUD=5.58 , NZD= 5.13*/
Si tienes estas cosas ya definidas desde el principio, podrías declararlos como macros (lenguaje C) o como constantes (C++), pero recuerda decidirte primero si tu programa va a ser C o C++.

4) defines primero
Citar
double moneda[7]
y luego usas mon[0], mon[1], ... ? (¿necesitas una secretaria para esas tareas menores?)

5) if ... else if... else if... else... con pruebas de condición sobre enteros, debes usar switch / case.

Creo que ya corrigiendo estas cositas ya quedará.


Título: Re: Programa de divisas
Publicado por: AlbertoBSD en 8 Noviembre 2018, 22:50 pm
5) if ... else if... else if... else... con pruebas de condición sobre enteros, debes usar switch / case.

Estaba por comentarle cosas similares, pero me ganaste.

respecto al codigo tiene fallas e ineficiencias por ejemplo el siguiente codigo hace varias comprofaciones inecesarias.

Código:
   			for(i=0;i<7;i++){	
   cout<<"moneda "<<mon[i]<<endl;
   cout<<"cantidad "<<moneda[i]<<endl;
   if (i==0){
   cout<<"cantidad en Quetzales "<<moneda[i]*7.72<<endl;
   total=total+(moneda[i]*7.72);
   }else if (i==1){
   cout<<"cantidad en Quetzales "<<moneda[i]*8.8<<endl;
   total=total+(moneda[i]*8.8);
   } else if (i==2){
   cout<<"cantidad en Quetzales "<<moneda[i]*5.89<<endl;
   total=total+(moneda[i]*5.89);
   }else if (i==3){
   cout<<"cantidad en Quetzales "<<moneda[i]*10.03<<endl;
   total=total+(moneda[i]*10.03);
   }else if (i==4){
   cout<<"cantidad en Quetzales "<<moneda[i]*7.7<<endl;
   total=total+(moneda[i]*7.7);
   }else if (i==5){
   cout<<"cantidad en Quetzales "<<moneda[i]*5.55<<endl;
   total=total+(moneda[i]*5.55);
   }else if (i==6){
   cout<<"cantidad en Quetzales "<<moneda[i]*5.13<<endl;
   total=total+(moneda[i]*5.13);
   }
  }

Siendo que todo eso esta dentro de un for realmente i solo puede tener un valor a la vez por lo cual podrias poner TODO FUERA DEL FOR y ahorrarte las evaluaciones de la siguiente manera.

Código:
cout<<"moneda "<<mon[0]<<endl;
cout<<"cantidad "<<moneda[0]<<endl;
cout<<"cantidad en Quetzales "<<moneda[0]*7.72<<endl;
total=total+(moneda[0]*7.72);

cout<<"moneda "<<mon[1]<<endl;
cout<<"cantidad "<<moneda[1]<<endl;
cout<<"cantidad en Quetzales "<<moneda[1]*8.8<<endl;
total=total+(moneda[1]*8.8);


cout<<"moneda "<<mon[2]<<endl;
cout<<"cantidad "<<moneda[2]<<endl;
cout<<"cantidad en Quetzales "<<moneda[2]*5.89<<endl;
total=total+(moneda[2]*5.89);

cout<<"moneda "<<mon[3]<<endl;
cout<<"cantidad "<<moneda[3]<<endl;
cout<<"cantidad en Quetzales "<<moneda[3]*10.03<<endl;
total=total+(moneda[3]*10.03);

cout<<"moneda "<<mon[4]<<endl;
cout<<"cantidad "<<moneda[4]<<endl;
cout<<"cantidad en Quetzales "<<moneda[4]*7.7<<endl;
total=total+(moneda[4]*7.7);

cout<<"moneda "<<mon[5]<<endl;
cout<<"cantidad "<<moneda[5]<<endl;
cout<<"cantidad en Quetzales "<<moneda[5]*5.55<<endl;
total=total+(moneda[5]*5.55);

cout<<"moneda "<<mon[6]<<endl;
cout<<"cantidad "<<moneda[6]<<endl;
cout<<"cantidad en Quetzales "<<moneda[6]*5.13<<endl;
total=total+(moneda[6]*5.13);

O dentro del FOR pero ahorrandote los IF de igualmanera

Código
  1. float fix[7] = {7.72,8.80,5.89,10.03,7.71,5.58,5.13};
  2.  
  3. for(i=0;i<7;i++){
  4. cout<<"moneda "<<mon[i]<<endl;
  5. cout<<"cantidad "<<moneda[i]<<endl;
  6. cout<<"cantidad en Quetzales "<<moneda[i]*fix[i]<<endl;
  7. total=total+(moneda[i]*fix[i]);
  8. }
  9.  
  10.  
Este ultimo es el mas eficiente a mi manera de ver las cosas, sobre el por que no los imprime seria cuestion de que me expliques como  es que funciona esta parte del codigo. Yo se como funciona, pero si no entienda esa parte no sabras realmente que estas haciendo

Código:
if (reporte=="si"){


Título: Re: Programa de divisas
Publicado por: M-Stewart612 en 9 Noviembre 2018, 01:27 am
Muchísimas gracias a ambos, me sirvieron mucho sus observaciones para reparar los errores del programa  ;D ;D ;D