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) lettura file corretta, procedura di controllo vincite complicata (ma anche sbagliata)
//autore: PINI RINA, N.142425, CAD11 //FIXME manca l'indirizzo di posta elettronica
//9/07/03 - esame di Fondamenti di Informatica, diploma teledidattico
//in Ingegneria informatica.

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

#define MAX 3

//void inserisci(char*[][]); //FIXME c'era una [ di troppo e comunque manca una dimensione

const char nomefile[]="tris.txt";
int main(){
  char tris[MAX][MAX]={" "},giocatore,vin;
  int riga,colonna,conta=1;

  ifstream fin(nomefile);
  if(!fin) {
    cerr<<"Errore: impossibile aprire file "<<nomefile<<".\n";
    exit(1);
  }

  giocatore='X';
  void inserisci(char* tris[][MAX]); //XXX ????
    while(fin>>riga>>colonna)
    {  if (giocatore=='X')                 //giocatore X
      { tris[riga][colonna]='X';
  giocatore='O';
      }
      else                             //giocatore O
      { tris[riga][colonna]='O';
  giocatore='X';
      }
      // XXX si poteva scrivere tris[riga][colonna]=giocatore; 
      // fuori dall'if e lasciare solo la commutazione di giocatore dentro

    }

  //visualizzazione matrice

  for (riga=0; riga<MAX; riga++)
  { for (colonna=0; colonna<MAX; colonna++)
    cout <<" "<<tris[riga][colonna];
    cout <<endl;
  }



  // controllo per riga
  colonna=0;
  riga=0;

  do
  {do
    { if (tris[riga][colonna]==tris[riga][colonna+1])
      { conta=conta+1;
  if (conta==3)
  { vin=tris[riga][colonna];
    break; 
  }

  colonna=colonna+1;
      }
      else break; // FIXME si dimentica di riazzerare conta (anche nei pezzi sotto)
    }
    while(colonna!=3); //XXX un ciclo for sarebbe stato piu' chiaro 
  riga=riga+1;   
  colonna=0;
  }
  while((riga!=3)&&(conta!=3));

  if (conta==3) goto salto;

  // controllo per colonna

  colonna=0;
  riga=0;
  conta=1;
  do
  {do
    { if (tris[riga][colonna]==tris[riga+1][colonna])
      { conta=conta+1;
  if (conta==3)
  { vin=tris[riga][colonna];
    break;
  }
  riga=riga+1;
      }
      else break;
    }
    while(riga!=3);
  colonna=colonna+1;
  riga=0;
  }
  while((colonna!=3)&&(conta!=3));

  if (conta==3) goto salto;

  // controllo diagonali

  colonna=0;
  riga=0;
  conta=1;

  do
  { if (tris[riga][colonna]==tris[riga+1][colonna+1])
    { conta=conta+1;
      if (conta==3)
      { vin=tris[riga][colonna];
  break;
      }
      riga=riga+1;
      colonna=colonna+1;
    }
    else break;
  }
  while((colonna!=3)&&(conta!=3));

  if (conta==3) goto salto;

  colonna=2;
  riga=2;
  conta=1;
  do
  { if (tris[riga][colonna]==tris[riga-1][colonna-1])
    { conta=conta-1;
      if (conta==3)
      { vin=tris[riga][colonna];
  break;
      }
      riga=riga-1;
      colonna=colonna-1;
    }
    else break;
  }
  while((colonna!=3)&&(conta!=3));

salto:

  if (conta==3)
    cout<<"Partita vinta da "<<vin;
  else
    cout<<"Partita patta";

}




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