Correzione prova pratica del 9 luglio 2003
Correzione prova pratica del 9 luglio 2003
Istruzioni:
il commento iniziale rappresenta il giudizio complessivo sul programma. Nei commenti trovate:
- FIXME: segnalazione di un errore, non necessariamente sono tutti segnalati e non necessariamente sono tutti presi in considerazione
per il voto finale
- TODO: segnala l'assenza di parti di codice
- XXX: segnala qualcosa di non chiaro o inutile ai fini del codice, commenti di ordine generale, errori di battitura o suggerimenti
Il codice presentato non è necessariamente identico a quello consegnato in quanto possono essere state effettuate modifiche per
renderlo compilabile e/o per la corretta indentazione.
//XXX (5.5) lettura corretta, ma sbaglia dimensione matrice e controllo
//<Bertani><Teodoro>,<150401>,<teopando@libero.it>,<stud10>
//<09.07.03>-esame di fondamenti di informatica, corso di laurea in ingegneria informatica.
#include <iostream.h>
#include <fstream.h>
void leggi_partita(int [][2],int&);
int scopri_chi_vince(int [][2],int);
//FIXME non indentato correttamente
int main()
{
int tabella[2][2],count; //FIXME magari la matrice doveva essere 3x3
leggi_partita(tabella,count);
//FIXME la funzione scopri_chi_vince() viene chiamata tre volte in maniera inutile, bastava una volta sola
// e memorizzare il risultato in una variabile
if (scopri_chi_vince(tabella,count)==3) cout<<"Partita patta"<<endl;
else if (scopri_chi_vince(tabella,count)==2) cout<<"Partita vinta da X"<<endl;
else if (scopri_chi_vince(tabella,count)==1) cout<<"Partita vinta da 0"<<endl;
return 0;
}
void leggi_partita(int tab[][2],int& c)
{
int a=0,b=0;
c=0;
ifstream fin("tris.txt"); //FIXME controllare il buon esito dell'apertura di un file non sarebbe male
while (fin>>a>>b)
{
c+=1;
if (c%2) tab[a][b]=2;
else tab[a][b]=1;
}
fin.close();
}
//FIXME la funzione seguente e' l'esempio classico di programmazione da evitare, in quanto non riutilizzabile e prono ad errori
// (che difatti lei commette).
int scopri_chi_vince(int bab[][2],int co)
{
int c=0;
if ((bab[0][0]==bab[0][1])&(bab[0][1]==bab[0][2])) return bab[0][1];
if ((bab[1][0]==bab[1][1])&(bab[1][1]==bab[1][2])) return bab[1][1];
if ((bab[2][0]==bab[2][1])&(bab[2][1]==bab[2][2])) return bab[2][1];
if ((bab[0][0]==bab[0][0])&(bab[1][0]==bab[2][0])) return bab[1][0]; //FIXME difficilmente bab[0][0]==bab[0][0] sara' falsa
if ((bab[0][1]==bab[0][1])&(bab[1][1]==bab[2][1])) return bab[1][1]; //FIXME analogo a sopra
if ((bab[0][2]==bab[0][2])&(bab[1][2]==bab[2][2])) return bab[1][2]; //FIXME analogo a sopra
if (((bab[0][0]==bab[1][1])&(bab[1][1]==bab[2][2])) || ((bab[0][2]==bab[1][1])&(bab[1][1]==bab[2][0]))) return bab[1][1];
else return 3;
}
Se avete commenti o osservazioni su questa pagina
mandate un messaggio di posta elettronica a
bertozzi@CE.UniPR.IT