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