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 (8) lettura file  e controllo quasi corrette, eccessiva complicazione del codice
// Savina Giampaolo     09/07/2003       150561         iost@libero.it       STUD08

//Esame di Fondamenti di informatica,corso di LAurea in ingegneria informatica

#include<iostream.h>

#include<stdio.h>

#include<string.h>

#include<fstream.h>


int Matr[3][3]={0}; // Inizializzo la matrice a 0

int PL1 = 8;
int PL2 =9;      // Definizione delle variabili usate in tutte le procedure XXX veramente sono usate solo da LeggiFile

int PATTA = -1;

int LeggiFile(int &,int &);  // Funzione che legge il file

//int Vittoria(int Matr[][]);              // Funzione che decreta la vittoria 

//FIXME a parte il fatto che si deve indicare almeno una dimensione, lei poi chiama questa funzione senza passargli alcunche' la

//      definizione seguente e' quindi quella giusta

int Vittoria(void);              // Funzione che decreta la vittoria


ifstream infile("tris.txt"); // Apertura del file in lettura FIXME e controllare che sia stato aperto??


int main(void)
{

  int RowIndex = 0;    // Indice Riga

  int ColIndex = 0;    // Indice Colonna

  int WhoAmI = 0;      // Chi sono

  
  //WhoAmI=LeggiFile(RowIndex,ColIndex);   // Propongo questa come soluzione del problema qui sotto..Niente tempo per test...

  while(infile!=NULL)  // Segnalato bug :il ciclo viene eseguito una volta in pi— questo causa il cambiamento del'ultimo valore altrimenti giusto FIXME si' c'e' un errore!

  {
    WhoAmI = LeggiFile(RowIndex,ColIndex);  // Leggo Il file

    Matr[RowIndex][ColIndex]=WhoAmI;        // Compilo la matrice

  }
  switch (Vittoria())                       // Decreto la vittoria

  {
    case 8:cout<<"Il Vincitore Š X";   ; break;
    case 9:cout<<"Il Vincitore Š Y"    ; break;
    case -1:cout<<"La partita Š patta"; break;
  }
  return 0;
}

int LeggiFile(int &RowIndex,int &ColIndex)
{
  static int Who;               //FIXME Who contiene valore casuale, doveva inizializzarlo direttamente ad 1, cosi' si evitava anche la riga successiva

  if (Who == 0) Who = 1;        //Forzo il primo valore a 1 per rispettare l'ordine di gioco

  infile>>RowIndex;
  infile>>ColIndex;             // Leggo Valori riga e colonna

  Who++;
  if (Who%2==0) return PL1;
  return PL2;
}
int Vittoria() {
  //Controllo colonne

  for (int r=0;r<3;r++)
  {
    if(Matr[r][0]==Matr[r][1] && Matr[r][1] == Matr [r][2])
      return Matr[r][0];
  }
  // Controllo riga

  for (int c=0;c<3;c++)
  {
    if(Matr[0][0]==Matr[1][c] && Matr[1][c] == Matr [2][c]) //FIXME doveva essere Matr[0][c] e non Matr[0][0]

      return Matr[0][c];
  }
  // Controllo diagonale

  if (Matr[0][0]==Matr[1][1] && Matr[1][1]==Matr[2][2])
    return  Matr[0][0];
  if (Matr[2][0]==Matr[1][1] && Matr[1][1]==Matr[0][2])
    return Matr[2][0];
  return -1;
}



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