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 (4) pessimo stile di programmazione, errori in lettura file
// Alaria Luca 149843 ala-luca@libero.it postazione :Stud17
// Fondamenti di informatica A 9/7/03
#include <fstream.h>
#include <iostream.h>
#include<process.h> //FIXME a che serve?
int main ()
{
int mat2 [7][2] , mat3[3][3] ; //matrici immagazzinamento dati FIXME nella prima matrice il 7 e' esagerato
int j,i=-1,h; //contatori
int cont1=0 , cont2=0 ; //variabili acquisizione da file
//inizializzazione matrice 3*3 FIXME bastaca in fase di definizione scrivere una cosa del tipo int mat3[3][3]={0};
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
mat3[i][j]=0;
}
}
//inizializzazione matrice 7*2 //FIXME come sopra
for(i=0;i<7;i++)
{
for(j=0;j<2;j++)
{
mat2[i][j]=0;
}
}
i=0;
ifstream fin("tris.txt");
if(!fin) //controllo ke il file sia valido
{
cout << "errore nella lettura del file";
exit(1);
}
while(fin>>cont1>>cont2)//leggo riga per riga
{ //lettura dal file di test delle mosse
mat2[i][0]=cont1;
mat2[i][1]=cont2; // indicizzo con i valori letti da file la matrice //FIXME perche'???
++i;
}
fin.close(); //chiudo il file
//FIXME bastava impostare mat3 man mano che leggeva il file
//FIXME il pezzo di codice seguente e' un buon esempio di come non si deve programmare
// e oltretutto e' sbagliato in quanto non e' detto che lei abbia riempito tutta mat2
for(i=0;i<8;i=i+2) //se la mossa e' pari metto la x nella matrice 3*3 (1)
{ j=0;
if (mat2[i][j]==0 && mat2[i][j+1]==0)
mat3[0][0]=1;
if (mat2[i][j]==0 && mat2[i][j+1]==1)
mat3[0][1]=1;
if (mat2[i][j]==0 && mat2[i][j+1]==2)
mat3[0][2]=1;
// ------------------------------------------
if (mat2[i][j]==1 && mat2[i][j+1]==0)
mat3[1][0]=1;
if (mat2[i][j]==1 && mat2[i][j+1]==1)
mat3[1][1]=1;
if (mat2[i][j]==1 && mat2[i][j+1]==2)
mat3[1][2]=1;
// --------------------------------------------
if (mat2[i][j]==2 && mat2[i][j+1]==0)
mat3[2][0]=1;
if (mat2[i][j]==2 && mat2[i][j+1]==1)
mat3[2][1]=1;
if (mat2[i][j]==2 && mat2[i][j+1]==2)
mat3[2][2]=1;
//fine
}
for(i=1;i<9;i=i+2) //se la mossa e' dispari metto lo 0 nella matrice 3*3 (2)
{ j=0;
if (mat2[i][j]==0 && mat2[i][j+1]==0)
mat3[0][0]=2;
if (mat2[i][j]==0 && mat2[i][j+1]==1)
mat3[0][1]=2;
if (mat2[i][j]==0 && mat2[i][j+1]==2)
mat3[0][2]=2;
// ------------------------------------------
if (mat2[i][j]==1 && mat2[i][j+1]==0)
mat3[1][0]=2;
if (mat2[i][j]==1 && mat2[i][j+1]==1)
mat3[1][1]=2;
if (mat2[i][j]==1 && mat2[i][j+1]==2)
mat3[1][2]=2;
// --------------------------------------------
if (mat2[i][j]==2 && mat2[i][j+1]==0)
mat3[2][0]=2;
if (mat2[i][j]==2 && mat2[i][j+1]==1)
mat3[2][1]=2;
if (mat2[i][j]==2 && mat2[i][j+1]==2)
mat3[2][2]=2;
//fine
}
//FIXME anche il codice a seguire non e' propriamente bello
// controllo tris se ha vinto X
if (mat3[0][0]==1 && mat3[1][1]==1 && mat3[2][2]==1)
{
cout << "Partita vinta da X";
exit(1);
}
if (mat3[0][0]==1 && mat3[0][1]==1 && mat3[0][2]==1)
{
cout << "Partita vinta da X";
exit(1);
}
if (mat3[0][0]==1 && mat3[1][0]==1 && mat3[2][0]==1)
{
cout << "Partita vinta da X";
exit(1);
}
if (mat3[1][0]==1 && mat3[1][1]==1 && mat3[1][2]==1)
{
cout << "Partita vinta da X";
exit(1);
}
if (mat3[2][0]==1 && mat3[2][1]==1 && mat3[2][2]==1)
{
cout << "Partita vinta da X";
exit(1);
}
if (mat3[0][1]==1 && mat3[1][1]==1 && mat3[2][1]==1)
{
cout << "Partita vinta da X";
exit(1);
}
if (mat3[0][2]==1 && mat3[1][2]==1 && mat3[2][2]==1)
{
cout << "Partita vinta da X";
exit(1);
}
// controllo tris se ha vinto 0
if (mat3[0][0]==1 && mat3[1][1]==1 && mat3[2][2]==1)
{
cout << "Partita vinta da 0";
exit(1);
}
if (mat3[0][0]==1 && mat3[0][1]==1 && mat3[0][2]==1)
{
cout << "Partita vinta da 0";
exit(1);
}
if (mat3[0][0]==1 && mat3[1][0]==1 && mat3[2][0]==1)
{
cout << "Partita vinta da 0";
exit(1);
}
if (mat3[1][0]==1 && mat3[1][1]==1 && mat3[1][2]==1)
{
cout << "Partita vinta da 0";
exit(1);
}
if (mat3[2][0]==1 && mat3[2][1]==1 && mat3[2][2]==1)
{
cout << "Partita vinta da 0";
exit(1);
}
if (mat3[0][1]==1 && mat3[1][1]==1 && mat3[2][1]==1)
{
cout << "Partita vinta da 0";
exit(1);
}
if (mat3[0][2]==1 && mat3[1][2]==1 && mat3[2][2]==1)
{
cout << "Partita vinta da 0";
exit(1);
}
cout << "Partita Patta";
// se non e' uscito vuol dire ke nessuno ha vinto quindi e' pari
exit(1);
/*
*/
}
Se avete commenti o osservazioni su questa pagina
mandate un messaggio di posta elettronica a
bertozzi@CE.UniPR.IT