Se consideră un tablou cu m linii și n coloane cu elemente numere întregi (1 < m, n < 30). Să se scrie tabloul obținut din tabloul inițial în care elementele egale cu valoarea maximă a elementelor tabloului sunt înlocuite cu valoarea minimă a elementelor tabloului și reciproc. Datele de intrare se citesc dintr-un fișier text, rezultatul se scrie în alt fișier text. Se vor folosi cel puțin două subprograme în afara subprogramelor pentru citirea datelor și afișarea rezultatelor.

Răspuns :

#include <iostream>

#include <fstream>

using namespace std;

int M[31][31], m, n;

void CitireDate()

{

ifstream f;

f.open("exemplu.in");    //numele fisierului de intrare

f>>m>>n;

for(int i=0; i<m; i++)

for(int j=0; j<n; j++)

f>>M[i][j];

f.close();

}


void AfisareDate()

{

ofstream o;

o.open("exemplu.out");

for(int i=0; i<m; i++)

{for(int j=0; j<n; j++)

o<<M[i][j]<<" ";

o<<endl;}

o.close();

}


int gasireMaxim()

{

int max=M[0][0];

for(int i=0; i<m; i++)

for(int j=0; j<n; j++)

if(max<M[i][j]) max=M[i][j];

return max;

}


int gasireMinim()

{

int min=M[0][0];

for(int i=0; i<m; i++)

for(int j=0; j<n; j++)

if(min>M[i][j]) min=M[i][j];

return min;

}


void Inlocuire(int min, int max)

{

for(int i=0; i<m; i++)

for(int j=0; j<n; j++)

{

if(M[i][j]==min) M[i][j]=max;

else if (M[i][j]==max) M[i][j]=min;

}

}

int main()

{

CitireDate();

int max=gasireMaxim();

int min=gasireMinim();

Inlocuire(min, max);

AfisareDate();

return 0;

}


//Programul a fost testat in prealabil in CodeBlocks