Correzione prova pratica del 22 gennaio 2003

Correzione prova pratica del 3 ottobre 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  qualche errore, ma strutturato decentemente
/* Prova d'esame del 03/04/04 */
/* Claudio Conserva matr.163141 claudio.conserva@studenti.unipr,it */
#include <stdio.h>
#include <stdlib.h> //FIXME mancava (atoi())

#include <ctype.h> //FIXME mancava (isdigit())


main()
{
  FILE *fp;
  FILE *out;
  int m[200][200];
  int mm[200][200];
  int i, j, a, b, ri, co;
  int tot=0;
  char vett[30], c;

  /* SE NON RIESCE AD APRIRE IL FILE VISUALIZZA: non posso aprire il file */
  if ((fp = fopen("lena.txt","r"))==NULL)
  {
    printf ("non posso aprire il file\n");
    return 1;
  }
  /* Memorizzo gli interi prelevati */
  while (!feof(fp))         /* fino a fine file */
  {
    for (i=0; i<200; i++)
      for (j=0; j<200; j++)
      {  
  while (!isdigit(c=fgetc(fp)))
    ;          
  a=0;
  do
  {
    vett[a] = c;
    a++;
  }
  while (isdigit(c=fgetc(fp)));
  vett[a]='\0';
  m[i][j] = atoi(vett);

      }   
  }
  for (a=0; a<200; a++)
    for (b=0; b<200; b++) 
    {
      /* Passo in rassegna i vicini m[a][b] */    
      for (ri=a-1, i=0; i<3; i++, ri++) //XXX poteva usare direttamente ri<=a+1 come condizione di uscita

      {
  for (co=b-1, j=0; j<3; j++, co++)
  {

    /* Se sono in m[a][b] */
    if ((m[a][b]==m[ri][co])||
        /* oppure se sono fuori dai bordi */
        (ri<0 || ri>199 || co<0 || co >199))  //FIXME il secondo blocco di condizione andava per primo

      continue;
    else  //FIXME dopo un continue l'else e' inutile

    {
      tot=tot + m[ri][co];
      continue;
    }
    mm[a][b] = tot/8; //FIXME andava dopo, occorreva dividere per un valore variabile

  }
      }
    }
  out = fopen("media.txt","w");   
  for (i=0; i<200; i++)
    for (j=0; j<200; j++)
      fprintf(out, "%d ", m[i][j]);

  fclose(out);       
  fclose(fp);
}


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