LABORATORIO
Trovare un errore logico
Uso del debugger per spiegare una media troncata.
Il programma di partenza compila ma calcola una media intera prima di assegnarla a double. Il laboratorio deve produrre una spiegazione basata su valori osservati. La correzione viene fatta soltanto dopo aver individuato la divisione responsabile.
Il punto di arresto è sulla riga di media. Prima del passo controlla 7 e 8; dopo il passo osserva 7. La soluzione usa 2.0. Dopo ogni modifica del sorgente chiudi la vecchia sessione e ricostruisci, altrimenti puoi continuare a osservare un programma precedente.
Procedura passo passo
Una sequenza da eseguire sul proprio computer.
- Apri media-errata.cpp e prepara una configurazione con informazioni di debug.
- Ricostruisci e imposta un breakpoint sulla riga di media.
- Avvia il debug e verifica i valori primo=7 e secondo=8.
- Avanza oltre il calcolo e annota media=7.
- Termina la sessione, sostituisci 2 con 2.0 e ricostruisci.
- Ripeti il debug e verifica media=7.5.
- Scrivi una spiegazione che distingua il tipo della divisione da quello della variabile risultato.
Codice e risultato
Il codice va aperto e compilato in Dev-C++; il riquadro mostra il risultato previsto.
Sorgente C++
#include <iostream>
int main() {
int primo = 7;
int secondo = 8;
double media = (primo + secondo) / 2;
std::cout << "Media: " << media << "\n";
return 0;
}
Risultato atteso
Media: 7 Il risultato richiesto e invece 7.5: esempio volutamente errato.
Questo riquadro è una previsione didattica, non una console che esegue il C++ nel browser.
Controllare il risultato
Confronta ciò che accade con una previsione formulata prima della prova.
| Controllo | Risultato o criterio |
|---|---|
| Operandi | 7 e 8: somma 15 |
| Divisione per 2 | Il calcolo intero produce 7 |
| Divisione per 2.0 | Il calcolo produce 7.5 |
Errori da evitare
Le cause da controllare prima di ripetere l’operazione.
- Correggere il codice prima di osservare il valore errato.
- Continuare la sessione vecchia dopo aver modificato il sorgente.
- Limitarsi a dire che il debugger ha trovato l’errore.
Riferimenti: Debugger: documentazione ufficiale.