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: 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