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:
- FIXME: segnalazione di un errore, non necessariamente sono tutti segnalati e non necessariamente sono tutti presi in considerazione
per il voto finale
- TODO: segnala l'assenza di parti di codice
- XXX: segnala qualcosa di non chiaro o inutile ai fini del codice, commenti di ordine generale, errori di battitura o suggerimenti
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