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) lettura file corretta, procedura di controllo vincite complicata (ma anche sbagliata)
//autore: PINI RINA, N.142425, CAD11 //FIXME manca l'indirizzo di posta elettronica
//9/07/03 - esame di Fondamenti di Informatica, diploma teledidattico
//in Ingegneria informatica.
#include <iostream.h>
#include <fstream.h>
#include <stdlib.h>
#define MAX 3
//void inserisci(char*[][]); //FIXME c'era una [ di troppo e comunque manca una dimensione
const char nomefile[]="tris.txt";
int main(){
char tris[MAX][MAX]={" "},giocatore,vin;
int riga,colonna,conta=1;
ifstream fin(nomefile);
if(!fin) {
cerr<<"Errore: impossibile aprire file "<<nomefile<<".\n";
exit(1);
}
giocatore='X';
void inserisci(char* tris[][MAX]); //XXX ????
while(fin>>riga>>colonna)
{ if (giocatore=='X') //giocatore X
{ tris[riga][colonna]='X';
giocatore='O';
}
else //giocatore O
{ tris[riga][colonna]='O';
giocatore='X';
}
// XXX si poteva scrivere tris[riga][colonna]=giocatore;
// fuori dall'if e lasciare solo la commutazione di giocatore dentro
}
//visualizzazione matrice
for (riga=0; riga<MAX; riga++)
{ for (colonna=0; colonna<MAX; colonna++)
cout <<" "<<tris[riga][colonna];
cout <<endl;
}
// controllo per riga
colonna=0;
riga=0;
do
{do
{ if (tris[riga][colonna]==tris[riga][colonna+1])
{ conta=conta+1;
if (conta==3)
{ vin=tris[riga][colonna];
break;
}
colonna=colonna+1;
}
else break; // FIXME si dimentica di riazzerare conta (anche nei pezzi sotto)
}
while(colonna!=3); //XXX un ciclo for sarebbe stato piu' chiaro
riga=riga+1;
colonna=0;
}
while((riga!=3)&&(conta!=3));
if (conta==3) goto salto;
// controllo per colonna
colonna=0;
riga=0;
conta=1;
do
{do
{ if (tris[riga][colonna]==tris[riga+1][colonna])
{ conta=conta+1;
if (conta==3)
{ vin=tris[riga][colonna];
break;
}
riga=riga+1;
}
else break;
}
while(riga!=3);
colonna=colonna+1;
riga=0;
}
while((colonna!=3)&&(conta!=3));
if (conta==3) goto salto;
// controllo diagonali
colonna=0;
riga=0;
conta=1;
do
{ if (tris[riga][colonna]==tris[riga+1][colonna+1])
{ conta=conta+1;
if (conta==3)
{ vin=tris[riga][colonna];
break;
}
riga=riga+1;
colonna=colonna+1;
}
else break;
}
while((colonna!=3)&&(conta!=3));
if (conta==3) goto salto;
colonna=2;
riga=2;
conta=1;
do
{ if (tris[riga][colonna]==tris[riga-1][colonna-1])
{ conta=conta-1;
if (conta==3)
{ vin=tris[riga][colonna];
break;
}
riga=riga-1;
colonna=colonna-1;
}
else break;
}
while((colonna!=3)&&(conta!=3));
salto:
if (conta==3)
cout<<"Partita vinta da "<<vin;
else
cout<<"Partita patta";
}
Se avete commenti o osservazioni su questa pagina
mandate un messaggio di posta elettronica a
bertozzi@CE.UniPR.IT