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