Non sono sicuro di aver trovato tutti gli errori, secondo voi ci sono altri errori? Soprattutto non sono sicuro si possano inizializzare variabili constexpr in quel modo. O se c'è qualche errore più sottile che mi è sfuggito.
Questo programma concede 5 tentativi per cercare di indovinare il tasso di cambio tra gli euro e i franchi svizzeri. Purtroppo ci sono degli errori. Trovateli e correggeteli.
- Codice:
1 #include <iostream>
2 #include <cmath>
3 using namespace std;
4
5 constexpr double taux_change;
6 constexpr int nb_essais;
7 taux_change = 1.18;
8 nb_essais = 5;
9
10 bool egaux(double x, double y, double precision = 1e-2)
11 {
12 return abs(x - y) < precision;
13 }
14
15 int main()
16 {
17 int x;
18 cout << "Qual'è il valore di 1 euro in franchi svizzeri ?" << endl;
19 bool trouve;
20 for (int i(1); trouve or (i < nb_essais); ++i) ;
21 {
22 cout << "Tentativo no" << i << " : ";
23 cin >> x;
24 trouve = egaux(x, taux_change);
25 }
26 if (i > 10)
27 cout << "Perso. :-(" << endl;
28 else
29 cout << "Bravo ! :-)" << endl;
30
31 return 0;
32 }
Errore 1:
La funzione dovrebbe ritornare un booleano mentre lì ritorna un espressione.
- Codice:
10 bool egaux(double x, double y, double precision = 1e-2)
11 {
12 return abs(x - y) < precision;
13 }
Correzione
- Codice:
10 bool egaux(double x, double y, double precision = 1e-2)
11 {
12 if(abs(x - y) < precision){
13 return true;
14 }else{
15 return false;
16 } }
Errore 2:
Variabile trouve booleana non inizializzata (riga 19) e poi utilizzata nella condizione di arresto di un ciclo for
Errore 3:
Concezione sbagliata di condizione d'arresto del ciclo for, infatti il ciclo deve terminare se ha trovato il giusto tasso di cambio oppure se il numero di tentativi è superiore (strettamente) a 5
Errore 4: Un punto e virgola che non ci vuole dopo la parentesi tonda del ciclo for
Correzione
- Codice:
19 bool trouve(false);
20 for (int i(1); not(trouve or (i <= nb_essais)); ++i)
21 {
Errore 5:
Condizione dentro "if" per determinare l'esito del gioco sbagliata, i non è una variabile dichiarata.
Infatti non può fare più di 5 tentativi per come è costituito il ciclo for, dunque la condizione se ha vinto o meno è sulla variabile trouve
Correzione 5
- Codice:
26 if (trouve == false)
27 cout << "Perso. :-(" << endl;
28 else
29 cout << "Bravo ! :-)" << endl;
30
31 return 0;
32 }