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 (5) errore in lettura file (anche troppo complicata) e controllo sbagliato
/*emanuela de bernardi, matr 155648, posto: cad14,e-mail:emanuela_debernardi@yahoo.it*/
# include <stdio.h>
# include <stdlib.h>
# include <math.h>
# define SIZE 3
main() {
int matrix[SIZE][SIZE];
int a,b,i,j,n;
int cont=0;
int contX=0;
int contO=0;
FILE *ptr;
/*costruisco la matrice,all'inizio vuota*/
for (i=0;i<=SIZE;i++)
for (j=0;j<=SIZE;j++)
matrix[i][j]=255;
/*DEBUG*/
/*apro e leggo il file tris.txt*/
ptr=fopen("tris.txt","r");
if(!ptr){
printf("Errore in apertura file\n");
}
while(1)
{
if (n==2) //FIXME pero' andava messo dopo lo fscanf() altrimenti come fa n ad essere inizializzato?
break;
else {
n=fscanf(ptr,"%d %d\n",&a,&b);
printf(" a: %d b: %d n: %d\n",a,b,n);
/*scorro la matrice confrontando a e b con gli indici i e j*/
/*quando trovo la corrispondenza,assegno al relativo elemento della matrice*/
/*il valore X se il cont ha un valore pari,O se l'ha dispari*/
/*una volta assegnato il valore incremento subito il contatore*/
//FIXME era piu' semplice scrivere matrix[a][b]=...
//XXX fmod() e' eccessiva bastava l'operatore "resto divisione intera": cont%2==0
for (i=0;i<=SIZE;i++) {
if (i==a)
//printf(" a = %d ",a);
for (j=0;j<=SIZE;j++) {
if ((j==b) && (fmod(cont,2)==0))
matrix[i][j]=1;
else
matrix[i][j]=2;
cont++;
/*printf("\nb = %d\n",b);*/
} }
} }
fclose(ptr);
/*DEBUG*/
/*comincio a scorrere riga per riga la matrix*/
/*fisso il vincitore*/
for (i=0;i<=SIZE;i++)
for (j=0;j<=SIZE;j++) {
if (matrix[i][j]==1)
contX=contX+1;
if (matrix[i][j]==2)
contO=contO+2; }
if (contX==3)
printf("\npartita vinta da X");
if (contO==6)
printf("\npartita vinta da O"); //FIXME non e' cosi': vince chi ne mette 3 in fila, nel suo caso lei li conta anche se non in fila
//FIXME ne mancano
if (matrix[0][0]==1 && matrix[1][1]==1 && matrix[2][2]==1)
printf("\npartita vinta da X");
if (matrix[2][0]==1 && matrix[1][1]==1 && matrix[0][2]==1)
printf("\npartita vinta da X");
if (matrix[0][0]==2 && matrix[1][1]==2 && matrix[2][2]==2)
printf("\npartita vinta da O");
if (matrix[2][0]==2 && matrix[1][1]==2 && matrix[0][2]==2)
printf("\npartita vinta da O");
/*se,alla fine,i cont non sono =3,scrivo partita patta*/
else
printf("\npartita patta");
return 0; }
//XXX comunque noto dei miglioramenti rispetto prima, si eserciti anche a buttare giu' prima un diagramma di flusso e poi a
//tradurlo in codice
Se avete commenti o osservazioni su questa pagina
mandate un messaggio di posta elettronica a
bertozzi@CE.UniPR.IT