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 (7.5) si perde nell'ultima parte, soluzione per il controllo non particolarmente elegante
//<ZANICHELLI> <DAVIDE>, <149861>, <zani83@hotmail.com>,<CAD09>
//<9/07/03> -esame di Fondamenti di informatica,corso di laurea in Ingegneria Informatica

#include<iostream.h>
#include<fstream.h>

main()
{
char tris[3][3]={'_','_','_','_','_','_','_','_','_'};//inizializzala matrice con posti vuoti
ifstream infile("tris.txt"); //definisce il file di imput
short n,m;
short partita[2][9];//array che memorizza il file

for(int i=0; i<9;i++)
{
n=5;//per dare un valore maggiore di 2 ai posti della matrice non dichiarati
m=5;
infile>>n>>m;
partita[0][i]=n;
partita[1][i]=m;
if(i==0) tris[n][m]='x';
else if (m==5) break; //FIXME sicuro che funzioni??
else if(i%2==1) tris[n][m]='o';
else if(i%2==0) tris[n][m]='x';//la martrice 3x3 contiene x per gli x e o per gli o
}

//for(int j=0;j<i;j++)
//cout<<partita[0][j]<<" "<<partita[1][j]<<endl; //mostra l'array "partita"

cout<<"La partita e' "<<endl;
short k;
for(k=0;k<3;k++)   //mostra la matrice "tris" che risulta dai valori del file
  {
    for(short l=0;l<3;l++) {
            cout<<tris[k][l];
            };
    cout<<endl;
  };

infile.close();//chiude il file di imput

short ris=3;//ris vale 3 se è patta,1 se vince x,2 se vince o

short x;
for(x=0;x<3;x++)//controllo righe
  {
  if (tris[x][0]==tris[x][1] && tris[x][1]==tris[x][2]) 
    {
      if (tris[x][1]=='x') ris=1;
      else if (tris[x][1]=='o') ris=2;
    }
}

short y;
for(y=0;y<3;y++)//controllo colonne
  {
  if (tris[0][y]==tris[1][y] && tris[1][y]==tris[2][y]) 
    {
      if (tris[1][y]=='x') ris=1;
      else if (tris[1][y]=='o') ris=2;
    }
}
//controllo diagonale principale
  if (tris[0][0]==tris[1][1] && tris[1][1]==tris[2][2]) 
    {
      if (tris[1][1]=='x') ris=1;
      else if (tris[1][1]=='o') ris=2;
    }
//controllo diagonale secondaria
  if (tris[2][0]==tris[1][1] && tris[1][1]==tris[0][2]) 
    {
      if (tris[1][1]=='x') ris=1;
      else if (tris[1][1]=='o') ris=2;
    }

//FIXME peccato, fino a qua andava bene, ora bastava scrivere il risultato 
ifstream infile2("uscita.txt"); //definisce il file di imput per la risposta FIXME nessuno ha mai parlato di file per la risposta
//FIXME si scrive input! e non e' un errore di battitura visto che lo riepete piu' volte!
k=0;
char word[20];
cout<<endl;
while (infile2.getline(word,20))
  {  
  k++;
  if(k==ris) cout<<word<<endl;
  }
infile2.close(); // FIXME troppo complicato, bastava un semplice if-else
}


Se avete commenti o osservazioni su questa pagina
mandate un messaggio di posta elettronica a bertozzi@CE.UniPR.IT