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 (6.5) lettura file corretta, controllo vincita sbagliato e scritto male
// autore: Labadini Matteo, 150411, valerio.labadini@tin.it, STUD19
// 09/07/03 - esame di Fondamenti di Informatica, corso di laurea in Ingegneria elettronica
#include <iostream.h>
#include <fstream.h>
#include <stdlib.h>
//FIXME codice non indentato
int main(){
ifstream fin("tris.txt");
if (!fin){
cerr <<"Impossibile aprire il file tris.txt" ;
exit(1);
}
int partita[9][2];
int n,i,j,x,y;
int mossa = 0;
int vittoriax = 0;
int vittoriao = 0;
char scacchiera[3][3];
i = 0;
j = 0;
while (fin >> n){
partita[i][j] = n;
j++;
if (j>1) {j=0; i++;}
}
for (int t=0; t<i; t++){
mossa++;
x = partita[t][0];
y = partita[t][1];
if (mossa%2!= 0)
scacchiera[x][y] = 'X';
else scacchiera[x][y] = 'O' ;
} //FIXME bastava un solo ciclo di lettura in cui man mano si riempiva la scacchiera
for (i=0; i<3; i++)
for (j=0; j<3; j++){ //FIXME cosi' facendo scandisco la scacchiera un numero eccessivo di volte
if (scacchiera[i][j] == 'X'){ //FIXME i pezzi di codice tra i blocchi dell'if e dell'else sono identici, si poteva fare meglio
x = i;
y = j;
while (scacchiera[x][y]=='X' && x<3 && y<3 ){
vittoriax ++;
x++;
}
if (vittoriax == 3) {i=3; break;}
vittoriax = 0;
x = i;
while (scacchiera[x][y] == 'X' && x<3 && y<3){
vittoriax ++;
y++;
}
y = j;
if (vittoriax == 3) {i=3; break;}
vittoriax = 0;
while (scacchiera[x][y] == 'X' && x<3 && y<3){
vittoriax++;
x++;
y++;
}
x = i;
y = j;
if (vittoriax == 3) {i=3; break;}
vittoriax = 0;
}
else if(scacchiera[i][j]=='O'){
x = i;
y = j;
while (scacchiera[x][y]=='O' && x<3 && y<3 ){
vittoriao ++;
x++;
}
x = i;
if (vittoriao == 3) {i=3; break;}
vittoriao = 0;
while (scacchiera[x][y] == 'O' && x<3 && y<3){
vittoriao ++;
y++;
}
y = j;
if (vittoriao == 3) {i=3; break;}
vittoriao = 0;
while (scacchiera[x][y] == 'O' && i<3 && j<3){
vittoriao++;
x++;
y++;
}
x = i;
y = j;
if (vittoriao == 3) {i=3; break;}
vittoriao = 0;
}
}
//FIXME a parte che il codice e' molto brutto e ridondante lei si dimentica una delle due diagonali
if (vittoriax == 3) cout <<"Partita vinta da X";
else if (vittoriao == 3) cout <<"Partita vinta da O";
else cout << "Partita patta";
}
Se avete commenti o osservazioni su questa pagina
mandate un messaggio di posta elettronica a
bertozzi@CE.UniPR.IT