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