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 (5) controllo corretto, ma lettura sbagliata ed errori concettuali
//<MARCHINI> <BARBARA>, <150393>, <www.barbara.23@libero.it>

//<09/07/03>


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

char matrice[3][3];
char vincitore(void);
void inizializza(void);
void giocatori(void);

main()
{
  cout<<"Questo e' il gioco del tris"<<endl;
  ifstream fin("tris.txt");
  if (!fin)
  {  cerr<<"Errore: il file non puo' venire aperto"<<endl;
    exit(1);
  }
  char c;
  c = ' ';
  do
  { 
    giocatori();
    c = vincitore();
    if (c!=' ') break; //FIXME inutila data la condizione del while a seguire

  } while (c==' '); 

  if (c=='X')
    cout<<"Partita vinta da X"<<endl;
  else if (c=='0') cout<<"Partita vinta da 0"<<endl;
  else  cout<<"Partita patta"<<endl;

  return 0;

}

void giocatori(void)
{    
  ifstream fin("tris.txt");
  inizializza();
  {  char riga1[4], riga2[4];
    fin.getline(riga1,4);
    int x,y;
    x--; //FIXME x e y avranno valori a caso e quindi non vedo che senso abbiano queste due istruzioni

    y--;
    matrice[x][y]=riga1[0][2]; //FIXME riga1 e riga2 sono array monodimensionali

    matrice[x][y]='X'; //FIXME cosi' a caso??

    fin.getline(riga2,4);
    x--; //FIXME come sopra etc...

    y--;
    matrice[x][y]=riga1[0][2];
    matrice[x][y]='0';
  }
  fin.close(); 
}

void inizializza(void)
{
  for (int i=0; i<3; i++)
    for (int j=0; j<3; j++) 
      matrice[i][j]=' ';
}

char vincitore(void)
{
  int i;
  for (int i=0; i<3; i++)
    if (matrice[i][0]==matrice[i][1] && matrice[i][0]==matrice[i][2])
      return matrice[i][0];

  for (int i=0; i<3; i++)
    if (matrice[0][i]==matrice[1][i] && matrice[0][i]==matrice[2][i])
      return matrice[0][i];

  if (matrice[0][0]==matrice[1][1] && matrice [1][1]==matrice[2][2])
    return matrice[0][0];

  if (matrice[0][2]==matrice[1][1] && matrice [1][1]==matrice[2][0])
    return matrice[0][2];
  return ' ';

} 


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