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 (9) errata inizializzazione dei dati, per il resto corretto
// Spotti Veronica 149739 vex.delta@libero.it pc:CAD02
// 09/07/03 Esame di Fondamenti di Informatica A Ingegneria delle Telecomunicazioni
#include <iostream.h> //nel mio Quincy2002 la libreria fstream comprende anche iostream. Qui no...
#include <fstream.h>
//const char *nomefile="tris3.txt"; // FIXME il testo diceva tris.txt
const char *nomefile="tris.txt";
char controlla(int[][3]); // funzione che controlla il risultato della partita
main () {
int r, c, giocatore=1; // 'giocatore' assume valore 1 se tocca a X, 9 se tocca a O.
// serve a capire, di riga in riga, chi fa la mossa
int partita[3][3]; // matrice 3x3 su cui il programma memorizza i dati presi dal file
//FIXME la matrice cosi' inizializzata conterra' valori casuali, se il file contiene
// meno di 9 mosse potrebbe dare dei problemi
ifstream fin(nomefile);
if (!fin) { cout<<"Errore di apertura del file tris.txt."; exit(1); }
while (fin>>r) //finche' il programma trova dati validi per il primo numero di una riga, legge
//anche il secondo, poi assegna la mossa a seconda del giocatore a cui tocca
{ fin>>c;
if (giocatore==1) { partita[r][c]=1; giocatore=9; } // assegna il nr 1 al giocatore X
else { partita[r][c]=9; giocatore=1; } // e il nr 9 al giocatore O
}
fin.close();
char controlla_partita=controlla(partita); // e' un modo per lanciare una sola volta
// la funzione 'controlla()'
if (controlla_partita=='P') cout<<"Partita patta.";
else cout<<"Partita vinta da "<<(controlla_partita=='X'? 'X':'O');
return 0;
}
char controlla(int m[][3]) { //semplici controlli minimizzati con l'uso di 'else if'
//FIXME tutti gli else in questa funzione si potevano tranquillamente omettere
for (int i=0; i<3; i++) { // sfrutto un solo ciclo for per righe e colonne
if ((m[i][0]+m[i][1]+m[i][2])==3) return 'X'; //righe per X
else if ((m[i][0]+m[i][1]+m[i][2])==27) return 'O'; //righe per O
else if ((m[0][i]+m[1][i]+m[2][i])==3) return 'X'; //colonne per X
else if ((m[0][i]+m[1][i]+m[2][i])==27) return 'O'; //colonne per O
}
if ((m[0][0]+m[1][1]+m[2][2])==3) return 'X'; //diagonale maggiore per X
else if ((m[0][0]+m[1][1]+m[2][2])==27) return 'O'; //diagonale maggiore per O
else if ((m[0][2]+m[1][1]+m[2][0])==3) return 'X'; //diagonale minore per X
else if ((m[0][2]+m[1][1]+m[2][0])==27) return 'O'; //diagonale minore per O
return 'P'; //se nessuno dei controlli e' verificato, la funzione restituisce
} //il segnale di 'partita patta'
Se avete commenti o osservazioni su questa pagina
mandate un messaggio di posta elettronica a
bertozzi@CE.UniPR.IT