Dev - C++ - por que mi programa no me da el valor que le corresponde

 
Vista:

por que mi programa no me da el valor que le corresponde

Publicado por estefany alvarez (1 intervención) el 14/03/2024 01:00:50
realice este programa que me pide pedirle al cliente una cantidad a convertir
después la moneda de origen y de destino pero al correrlo al dar la cantidad y elegir la moneda de origen y de destino no me da la cantidad que debería de decirme

#include <iostream>

using namespace std;

int main()

{
float dolar_a_euro=0.92;
float dolar_a_peso=16.79;
float dolar_a_dolarcan=1.35;
float dolar_a_yenjapones=147.30;

float euro_a_dolar=1.09;
float euro_a_peso=18.35;
float euro_a_dolarcan=1.47;
float euro_a_yenjapones=160.92;

float dolarcan_a_dolar=0.74;
float dolarcan_a_peso=12.44;
float dolarcan_a_euro=0.68;
float dolarcan_a_yenjapones=109.16;

float yenjapones_a_dolar=0.0068;
float yenjapones_a_peso=0.11;
float yenjapones_a_euro=0.0062;
float yenjapones_a_dolarcan=0.0092;

float peso_a_dolar=0.060;
float peso_a_euro=0.054;
float peso_a_dolarcan=0.080;
float peso_a_yenjapones=8.77;

float cantidad;
float resultado;
int monedaorigen;
int monedadestino;

cout<<"cuanta cantidad va a cambiar:"<<endl;
cin>>cantidad;

cout<<"selecciona la moneda de origen:"<<endl;
cout<<"1. dolar"<<endl;
cout<<"2. euro"<<endl;
cout<<"3. dolarcan"<<endl;
cout<<"4. yenjapones"<<endl;
cout<<"5. peso"<<endl;
cin>>monedaorigen;

cout<<"selecciona la moneda de destino:"<<endl;
cout<<"1. dolar"<<endl;
cout<<"2. euro"<<endl;
cout<<"3. dolarcan"<<endl;
cout<<"4. yenjapones"<<endl;
cout<<"5. peso"<<endl;
cin>>monedadestino;

switch (monedaorigen)
{
case 1: // dolar
switch (monedadestino)
{
case 1: // dolar
resultado=cantidad;
break;
case 2: // euro
resultado=cantidad*dolar_a_euro;
break;
case 3: // dolarcan
resultado=cantidad*dolar_a_dolarcan;
break;
case 4: // yenjapones
resultado=cantidad*dolar_a_yenjapones;
break;
case 5: // peso
resultado=cantidad*dolar_a_peso;
break;
default:
cout<<"Opcion invalida";
break;
}

case 2: // euro
switch (monedadestino)
{
case 1: // euro
resultado=cantidad;
break;
case 2: // dolar
resultado=cantidad*euro_a_dolar;
break;
case 3: // dolarcan
resultado=cantidad*euro_a_dolarcan;
break;
case 4: // yenjapones
resultado=cantidad *euro_a_yenjapones;
break;
case 5: // peso
resultado=cantidad *euro_a_peso;
break;
default:
cout<<"Opcion invalida";
break;
}


case 3: // dolarcan
switch (monedadestino)
{
case 1: // dolarcan
resultado=cantidad;
break;
case 2: // dolar
resultado=cantidad*dolarcan_a_dolar;
break;
case 3: // euro
resultado=cantidad*dolarcan_a_euro;
break;
case 4: // yenjapones
resultado=cantidad*dolarcan_a_yenjapones;
break;
case 5: // peso
resultado=cantidad*dolarcan_a_peso;
break;
default:
cout<<"Opcion invalida";
break;

}

case 4: // yenjapones
switch (monedadestino)
{
case 1: // yenjapones
resultado=cantidad;
break;
case 2: // dolar
resultado=cantidad*yenjapones_a_dolar;
break;
case 3: // euro
resultado=cantidad*yenjapones_a_euro;
break;
case 4: // dolarcan
resultado=cantidad*yenjapones_a_dolarcan;
break;
case 5: // peso
resultado=cantidad*yenjapones_a_peso;
break;
default:
cout<<"Opcion invalida";
break;
}

case 5: // peso
switch (monedadestino)
{
case 1: // peso
resultado=cantidad;
break;
case 2: // dolar
resultado=cantidad*peso_a_dolar;
break;
case 3: // euro
resultado=cantidad*peso_a_euro;
break;
case 4: // dolarcan
resultado=cantidad*peso_a_dolarcan;
break;
case 5: // yenjapones
resultado=cantidad*peso_a_yenjapones;
break;
default:
cout<<"Opcion invalida";
break;

}

default:
cout<<"opcion invalida, intentelo nuevamente"<<endl;
break;


}

cout<<"el resultado de la conversion es:"<<resultado<<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 kevin

RE: por que mi programa no me da el valor que le corresponde

Publicado por kevin (59 intervenciones) el 14/03/2024 02:51:53
Es que los case grandes donde tienes encerrado otro switch no los cerraste con break;, lo que hace que siga el programa aunque el case sea el correcto, lo que puede llevar a que la variable "resultado" tenga muchas asignaciones y llegue a ser aleatorio.

Un ejemplo de tu código:
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
switch (monedaorigen)
    {
    case 1: // dolar
        switch (monedadestino)
        {
        case 1: // dolar
            resultado = cantidad;
            break;
        case 2: // euro
            resultado = cantidad * dolar_a_euro;
            break;
        case 3: // dolarcan
            resultado = cantidad * dolar_a_dolarcan;
            break;
        case 4: // yenjapones
            resultado = cantidad * dolar_a_yenjapones;
            break;
        case 5: // peso
            resultado = cantidad * dolar_a_peso;
            break;
        default:
            cout << "Opcion invalida";
            break;
        }
    //Aquí debería ir un break; para proceder al case 2


Código corregido:

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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
#include <iostream>
 
using namespace std;
 
int main()
{
    constexpr float dolar_a_euro = 0.92,
                    dolar_a_peso = 16.79,
                    dolar_a_dolarcan = 1.35,
                    dolar_a_yenjapones = 147.30,
                    euro_a_dolar = 1.09,
                    euro_a_peso = 18.35,
                    euro_a_dolarcan = 1.47,
                    euro_a_yenjapones = 160.92,
                    dolarcan_a_dolar = 0.74,
                    dolarcan_a_peso = 12.44,
                    dolarcan_a_euro = 0.68,
                    dolarcan_a_yenjapones = 109.16,
                    yenjapones_a_dolar = 0.0068,
                    yenjapones_a_peso = 0.11,
                    yenjapones_a_euro = 0.0062,
                    yenjapones_a_dolarcan = 0.0092,
                    peso_a_dolar = 0.060,
                    peso_a_euro = 0.054,
                    peso_a_dolarcan = 0.080,
                    peso_a_yenjapones = 8.77;
 
    float cantidad, resultado;
    int monedaorigen, monedadestino;
 
    cout << "cuanta cantidad va a cambiar:\n>>> ";
    cin >> cantidad;
 
    cout << "selecciona la moneda de origen:\n"
        << "1. dolar\n"
        << "2. euro\n"
        << "3. dolarcan\n"
        << "4. yenjapones\n"
        << "5. peso\n>>> ";
    cin >> monedaorigen;
 
    cout << "selecciona la moneda de destino:\n"
        << "1. dolar\n"
        << "2. euro\n"
        << "3. dolarcan\n"
        << "4. yenjapones\n"
        << "5. peso\n>>> ";
    cin >> monedadestino;
 
    switch (monedaorigen)
    {
    case 1: // dolar
        switch (monedadestino)
        {
        case 1: // dolar
            resultado = cantidad;
            break;
        case 2: // euro
            resultado = cantidad * dolar_a_euro;
            break;
        case 3: // dolarcan
            resultado = cantidad * dolar_a_dolarcan;
            break;
        case 4: // yenjapones
            resultado = cantidad * dolar_a_yenjapones;
            break;
        case 5: // peso
            resultado = cantidad * dolar_a_peso;
            break;
        default:
            cout << "Opcion invalida";
            break;
        }
    break;
 
    case 2: // euro
        switch (monedadestino)
        {
        case 1: // euro
            resultado = cantidad;
            break;
        case 2: // dolar
            resultado = cantidad * euro_a_dolar;
            break;
        case 3: // dolarcan
            resultado = cantidad * euro_a_dolarcan;
            break;
        case 4: // yenjapones
            resultado = cantidad * euro_a_yenjapones;
            break;
        case 5: // peso
            resultado = cantidad * euro_a_peso;
            break;
        default:
            cout << "Opcion invalida";
            break;
        }
    break;
 
    case 3: // dolarcan
        switch (monedadestino)
        {
        case 1: // dolarcan
            resultado = cantidad;
            break;
        case 2: // dolar
            resultado = cantidad * dolarcan_a_dolar;
            break;
        case 3: // euro
            resultado = cantidad * dolarcan_a_euro;
            break;
        case 4: // yenjapones
            resultado = cantidad * dolarcan_a_yenjapones;
            break;
        case 5: // peso
            resultado = cantidad * dolarcan_a_peso;
            break;
        default:
            cout << "Opcion invalida";
            break;
        }
    break;
 
    case 4: // yenjapones
        switch (monedadestino)
        {
        case 1: // yenjapones
            resultado = cantidad;
            break;
        case 2: // dolar
            resultado = cantidad * yenjapones_a_dolar;
            break;
        case 3: // euro
            resultado = cantidad * yenjapones_a_euro;
            break;
        case 4: // dolarcan
            resultado = cantidad * yenjapones_a_dolarcan;
            break;
        case 5: // peso
            resultado = cantidad * yenjapones_a_peso;
            break;
        default:
            cout << "Opcion invalida";
            break;
        }
    break;
 
    case 5: // peso
        switch (monedadestino)
        {
        case 1: // peso
            resultado = cantidad;
            break;
        case 2: // dolar
            resultado = cantidad * peso_a_dolar;
            break;
        case 3: // euro
            resultado = cantidad * peso_a_euro;
            break;
        case 4: // dolarcan
            resultado = cantidad * peso_a_dolarcan;
            break;
        case 5: // yenjapones
            resultado = cantidad * peso_a_yenjapones;
            break;
        default:
            cout << "Opcion invalida";
            break;
        }
    break;
 
    default:
        cout << "opcion invalida, intentelo nuevamente" << endl;
        break;
    }
 
    cout << "el resultado de la conversion es:" << resultado << endl;
 
    return 0;
}
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

RE: por que mi programa no me da el valor que le corresponde

Publicado por Azael Devel (3 intervenciones) el 19/03/2024 03:56:50
Tambien tiene error en la operaciones de conversio, por ejjemplo yo trate de convertir 100 pesos a dollar en el usuario te da 1 como meda de destino pero tu lo tratas como pesos en lugar de trata como dolar, es decir, codifo correcto para ese caso es

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
case 5: // pesos
    switch (monedadestino)
    {
        case 1: // dolar
            resultado=cantidad/dolar_a_peso;
            break;
        case 2: // euro
            resultado=cantidad/dolar_a_euro;
            break;
        case 3: // dolarcan
            resultado=cantidad/dolar_a_dolarcan;
            break;
        case 4: // yenjapones
            resultado=cantidad/dolar_a_yenjapones;
            break;
        case 5: // pesos
            resultado=cantidad;
            break;
        default:
        cout<<"Opcion invalida";
        break;
    }
    break;
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
sin imagen de perfil

RE: por que mi programa no me da el valor que le corresponde

Publicado por Azael (4 intervenciones) el 19/03/2024 04:02:02
Screenshot-from-2024-03-18-19-55-56

Por lo que veo hisiste copy/paste solamante y no esta haciendo las apropiadas conversiones en los switch correspondiente, en mi caso se requeria un diveicion en lugar de una multiplicacion
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