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 (9) errata inizializzazione dei dati, per il resto corretto
// Spotti Veronica 149739 vex.delta@libero.it  pc:CAD02

// 09/07/03  Esame di Fondamenti di Informatica A   Ingegneria delle Telecomunicazioni


#include <iostream.h> //nel mio Quincy2002 la libreria fstream comprende anche iostream. Qui no...

#include <fstream.h>

//const char *nomefile="tris3.txt"; // FIXME il testo diceva tris.txt

const char *nomefile="tris.txt"; 

char controlla(int[][3]);    // funzione che controlla il risultato della partita


main () {

  int r, c, giocatore=1;   // 'giocatore' assume valore 1 se tocca a X, 9 se tocca a O. 

  // serve a capire, di riga in riga, chi fa la mossa


  int partita[3][3];  // matrice 3x3 su cui il programma memorizza i dati presi dal file

  //FIXME la matrice cosi' inizializzata conterra' valori casuali, se il file contiene

  //      meno di 9 mosse potrebbe dare dei problemi


  ifstream fin(nomefile);
  if (!fin) { cout<<"Errore di apertura del file tris.txt."; exit(1); }


  while (fin>>r)  //finche' il programma trova dati validi per il primo numero di una riga, legge

    //anche il secondo, poi assegna la mossa a seconda del giocatore a cui tocca

  { fin>>c;                                        
    if (giocatore==1) { partita[r][c]=1; giocatore=9; }  // assegna il nr 1 al giocatore X

    else              { partita[r][c]=9; giocatore=1; }  // e il nr 9 al giocatore O

  }

  fin.close();

  char controlla_partita=controlla(partita);  // e' un modo per lanciare una sola volta 

  // la funzione 'controlla()'

  if  (controlla_partita=='P') cout<<"Partita patta.";
  else cout<<"Partita vinta da "<<(controlla_partita=='X'? 'X':'O');

  return 0;
}


char controlla(int m[][3]) { //semplici controlli minimizzati con l'uso di 'else if'


  //FIXME tutti gli else in questa funzione si potevano tranquillamente omettere

  for (int i=0; i<3; i++) {  // sfrutto un solo ciclo for per righe e colonne

    if ((m[i][0]+m[i][1]+m[i][2])==3)  return 'X'; //righe per X

    else if ((m[i][0]+m[i][1]+m[i][2])==27) return 'O'; //righe per O

    else if ((m[0][i]+m[1][i]+m[2][i])==3)  return 'X'; //colonne per X

    else if ((m[0][i]+m[1][i]+m[2][i])==27) return 'O'; //colonne per O

  }

  if ((m[0][0]+m[1][1]+m[2][2])==3)  return 'X'; //diagonale maggiore per X

  else if ((m[0][0]+m[1][1]+m[2][2])==27) return 'O'; //diagonale maggiore per O

  else if ((m[0][2]+m[1][1]+m[2][0])==3)  return 'X'; //diagonale minore per X

  else if ((m[0][2]+m[1][1]+m[2][0])==27) return 'O'; //diagonale minore per O


  return 'P'; //se nessuno dei controlli e' verificato, la funzione restituisce 

}             //il segnale di 'partita patta'




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