Informatică, întrebare adresată de rauldinso, 9 ani în urmă

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

}
Alte întrebări interesante