Cerința
Să se scrie o funcție C++ care are ca parametri două numere naturale n și m și o matrice A(n , m) avȃnd elemente numere întregi și returnează numărul de elemente „șa” din matrice. Un element A(i,j) din matrice se numește element „șa” dacă este maximul de pe coloana j si minimul de pe linia i sau invers.
Subprogramul se va numi nr_sa va avea trei parametri: a, un tablou bidimensional cu elemente întregi, n, m, reprezentând numărul de linii, respectiv de coloane ale tabloului a.
Restricţii şi precizări
0 < n,m ≤ 100
numele subprogramului cerut este nr_sa
parametrii sunt, în această ordine: a, n, m
indicii de linie și de coloana ai tabloului a încep de la 0 și sunt de tip int;
matricea folosită în apelul din funcția main va fi declarată int a[100][100]; și are elementele indexate de la 0.
Exemplu
Pentru n=2, m=6 și A=(572186439835)A=(528493716385) funcția va returna valoarea 2 (elementele șa sunt A0,1A0,1 și A1,4A1,4 – elementele sunt indexate de la 0).
Important
Soluţia propusă va conţine doar definiţia subprogramului cerut. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.
Răspunsuri la întrebare
Răspuns de
4
#define N 100
void determinare_linie(int linii, int coloane, int matrice[N][N], int indice_linie, int &minim, int &maxim)
{
minim = maxim = matrice[indice_linie][0];
for(int col = 1; col < coloane; col++)
{
if(matrice[indice_linie][col] > maxim)
maxim = matrice[indice_linie][col];
if(matrice[indice_linie][col] < minim)
minim = matrice[indice_linie][col];
}
}
void determinare_coloana(int linii, int coloane, int matrice[N][N], int indice_coloana, int &minim, int &maxim)
{
minim = maxim = matrice[0][indice_coloana];
for(int lin = 1; lin < linii; lin++)
{
if(matrice[lin][indice_coloana] > maxim)
maxim = matrice[lin][indice_coloana];
if(matrice[lin][indice_coloana] < minim)
minim = matrice[lin][indice_coloana];
}
}
int nr_sa(int matrice[N][N], int linii, int coloane)
{
int minim_linie[N], minim_coloana[N], maxim_linie[N], maxim_coloana[N];
for(int lin = 0; lin < linii; lin++)
determinare_linie(linii, coloane, matrice, lin, minim_linie[lin], maxim_linie[lin]);
for(int col = 0; col < coloane; col++)
determinare_coloana(linii, coloane, matrice, col, minim_coloana[col], maxim_coloana[col]);
int numar_elemente_sa = 0;
for(int lin = 0; lin < linii; lin++)
for(int col = 0; col < coloane; col++)
if((matrice[lin][col] == maxim_coloana[col] && matrice[lin][col] == minim_linie[lin])
||
(matrice[lin][col] == minim_coloana[col] && matrice[lin][col] == maxim_linie[lin]))
numar_elemente_sa++;
return numar_elemente_sa;
}
void determinare_linie(int linii, int coloane, int matrice[N][N], int indice_linie, int &minim, int &maxim)
{
minim = maxim = matrice[indice_linie][0];
for(int col = 1; col < coloane; col++)
{
if(matrice[indice_linie][col] > maxim)
maxim = matrice[indice_linie][col];
if(matrice[indice_linie][col] < minim)
minim = matrice[indice_linie][col];
}
}
void determinare_coloana(int linii, int coloane, int matrice[N][N], int indice_coloana, int &minim, int &maxim)
{
minim = maxim = matrice[0][indice_coloana];
for(int lin = 1; lin < linii; lin++)
{
if(matrice[lin][indice_coloana] > maxim)
maxim = matrice[lin][indice_coloana];
if(matrice[lin][indice_coloana] < minim)
minim = matrice[lin][indice_coloana];
}
}
int nr_sa(int matrice[N][N], int linii, int coloane)
{
int minim_linie[N], minim_coloana[N], maxim_linie[N], maxim_coloana[N];
for(int lin = 0; lin < linii; lin++)
determinare_linie(linii, coloane, matrice, lin, minim_linie[lin], maxim_linie[lin]);
for(int col = 0; col < coloane; col++)
determinare_coloana(linii, coloane, matrice, col, minim_coloana[col], maxim_coloana[col]);
int numar_elemente_sa = 0;
for(int lin = 0; lin < linii; lin++)
for(int col = 0; col < coloane; col++)
if((matrice[lin][col] == maxim_coloana[col] && matrice[lin][col] == minim_linie[lin])
||
(matrice[lin][col] == minim_coloana[col] && matrice[lin][col] == maxim_linie[lin]))
numar_elemente_sa++;
return numar_elemente_sa;
}
Alte întrebări interesante
Geografie,
8 ani în urmă
Studii sociale,
8 ani în urmă
Limba română,
8 ani în urmă
Limba română,
9 ani în urmă
Limba română,
9 ani în urmă