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