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 (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