[C++] Trovare errori in un programma

Messaggioda 3m0o » 18/12/2018, 01:38

Per il seguente esercizio:
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 }
3m0o
Junior Member
Junior Member
 
Messaggio: 77 di 267
Iscritto il: 02/01/2018, 16:00

Re: [C++] Trovare errori in un programma

Messaggioda probid » 18/12/2018, 09:35

Ma non puoi provarlo il programma? :)

Comunque:
non sono sicuro si possano inizializzare variabili constexpr in quel modo

Infatti. Vanno inizializzate al momento della dichiarazione.

Errore 1:
La funzione dovrebbe ritornare un booleano mentre lì ritorna un espressione.


No, perché? L'espressione viene valutata e il risultato è un booleano. La tua correzione va bene, ma non è necessaria.

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
...
Codice:
for (int i(1); not(trouve or (i <= nb_essais)); ++i)



Per il teorema di De Morgan la condizione che hai scritto è equivalente a:

Codice:
not(trouve) and not(i <= nb_essais)

che sarà falsa da subito, quindi è da rivedere.

Un altro errore è il tipo di x, che dovrebbe essere double.

Ciao!
probid
Starting Member
Starting Member
 
Messaggio: 26 di 27
Iscritto il: 01/10/2010, 20:30

Re: [C++] Trovare errori in un programma

Messaggioda Raptorista » 19/12/2018, 23:53

Non dimenticare gli errori alla riga 18: Qual è, senza apostrofo.
Un matematico ha scritto:... come mia nonna che vuole da anni il sistema per vincere al lotto e crede che io, in quanto matematico, sia fallito perché non glielo trovo


Immagine
Avatar utente
Raptorista
Moderatore
Moderatore
 
Messaggio: 5149 di 5250
Iscritto il: 28/09/2008, 20:58

Re: [C++] Trovare errori in un programma

Messaggioda 3m0o » 20/12/2018, 00:32

Raptorista ha scritto:Non dimenticare gli errori alla riga 18: Qual è, senza apostrofo.

eheh :D
3m0o
Junior Member
Junior Member
 
Messaggio: 83 di 267
Iscritto il: 02/01/2018, 16:00


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 8 ospiti