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 corretto
// Luca, Bernardini, 162945, luke.ber@tin.it
#include <iostream>
#include <fstream>
using namespace std;
char *file_in = "lena.txt";
char *file_out = "elaborato.txt"; //FIXME si doveva usare media.txt
const int MAX_LEN = 200;
void leggi_file(char *, int m[][MAX_LEN]);
void elabora_matrice(int m[][MAX_LEN], int mm[][MAX_LEN]);
int max(int, int);
int min(int, int);
int main(){
int m[MAX_LEN][MAX_LEN] = {0};
int mm[MAX_LEN][MAX_LEN] = {0};
// riempie la matrice m con i valori letti da file
leggi_file(file_in, m);
elabora_matrice(m, mm);
// stampa la matrice. solo debug
/*for (int i = 0; i < MAX_LEN;i++){
for (int j = 0; j < MAX_LEN;j++)
cout << mm[i][j] << " ";
cout << endl;
}*/
ofstream fout(file_out);
for (int i = 0; i < MAX_LEN; i++){
for (int j = 0; j < MAX_LEN; j++)
fout << mm[i][j] << " ";
fout << endl;
}
fout.close();
return 0;
}
void leggi_file(char *file_name, int m[][MAX_LEN]){
ifstream fin(file_name);
if (!fin){
cerr << "Impossibile aprire il file: " << file_name << endl;
exit(1);
}
int numero = 0;
for (int i = 0; i < MAX_LEN;i++)
for (int j = 0; j < MAX_LEN;j++)
if (fin >> numero)
m[i][j] = numero;
else{
cerr << "File incompleto" << endl;
exit(2);
}
fin.close();
}
void elabora_matrice(int m[][MAX_LEN], int mm[][MAX_LEN]){
int somma, conta, i, j, ii, jj;
for (i = 0; i < MAX_LEN; i++)
for (j = 0; j < MAX_LEN; j++){
somma = 0;
conta = 0;
int sii = max(i - 1, 0);
int eii = min(i + 1, MAX_LEN -1);
int sjj = max(j - 1, 0);
int ejj = min(j + 1, MAX_LEN -1);
//cout << "i=" << i << ",j=" << j << "," << sii << "," << eii << "-" << sjj << "," << ejj << "/";
for(ii = sii; ii <= eii; ii++)
for(jj = sjj; jj <= ejj; jj++){
if ((i != ii) || (j != jj)){
//cout << ii << "-" << jj << endl;
somma += m[ii][jj];
conta++;
}
}
//cout << "??" << conta << endl;
mm[i][j] = somma / conta;
}
}
int max(int a, int b){
return (a > b ? a : b);
}
int min(int a, int b){
return (a < b ? a : b);
}
Se avete commenti o osservazioni su questa pagina
mandate un messaggio di posta elettronica a
bertozzi@CE.UniPR.IT