Subiectul nr. 5:
a) Subprogramul nrpare_p are doi parametri, prin care primește:
n, un număr natural din intervalul [5, 100];
v, un tablou bidimensional cu n linii și n coloane de numere naturale din intervalul [0, 103];
Subprogramul returnează numărul elementelor pare situate pe diagonala principală a tabloului v
sau valoarea -1 dacă diagonala nu conține valori pare.
Subprogramul nrpare_s are doi parametri, prin care primește:
n, un număr natural din intervalul [5, 100];
v, un tablou bidimensional cu n linii și n coloane de numere naturale din intervalul [0, 103];
4
Subprogramul returnează numărul elementelor pare situate pe diagonala secundară a tabloului v
sau -1 dacă diagonala nu conține valori pare.
Scrieţi la calculator definiţiile complete ale celor două subprograme.
b) Fișierul matrice.in conține pe prima linie un număr natural par n (2≤n≤100), iar pe
următoarele n linii câte n numere naturale din intervalul [0,103], separate prin câte un spațiu.
Se cere scrierea și executarea la calculator a unui program care să citească din fișier n apoi cele
n∙n elemente ale tabloului și să afișeze pe ecran numărul valorilor impare situate pe cele două
diagonale ale tabloului. Pentru afișarea valorii cerute se folosesc apeluri utile ale subprogramelor
nrpare_p și nrpare_s. Dacă nu există nicio valoare impară pe diagonale atunci pe ecran se
afișează mesajul nu exista.
Exemplu: dacă fișierul matrice.in conține numerele:
6
1 2 3 4 5 6
7 8 9 0 1 2
3 4 5 6 7 8
9 0 1 2 3 4
5 6 7 8 9 0
1 2 3 4 5 6
atunci se afișează 6.
Răspunsuri la întrebare
#include <iostream>
#include <fstream>
using namespace std;
// a
int nrpare_p(int n, int v[103][103])
{
int numere_pare = 0;
for (int i = 0; i < n; i++)
{
if (v[i][i] % 2 == 0)
numere_pare++;
}
if (numere_pare == 0)
return -1;
return numere_pare;
}
// b
int nrpare_s(int n, int v[103][103])
{
int numere_pare = 0;
for (int i = 0; i < n; i++)
{
if (v[i][n - 1 - i] % 2 == 0)
numere_pare++;
}
if (numere_pare == 0)
return -1;
return numere_pare;
}
int main()
{
int v[103][103];
int val, n;
int i = 0;
int j = 0;
ifstream fisier;
fisier.open("matrice.int");
fisier >> n;
while (fisier >> val)
{
v[i][j] = val;
j++;
if (j == n)
{
i++;
j = 0;
}
}
int numere_impare_p = n - nrpare_p(n, v);
int numere_impare_s = n - nrpare_s(n, v);
int nr_impare;
if (nrpare_p(n, v) == -1 && nrpare_s(n, v) == -1)
{
nr_impare = n + n; // avem numai numere impare pe ambele diagonale
}
else if (nrpare_p(n, v) == -1)
{
// avem numai numere impare pe diagonala principala
nr_impare = n + numere_impare_s;
}
else if (nrpare_s(n, v) == -1)
{
// avem numai numere impare pe diagonala secundara
nr_impare = n + numere_impare_p;
}
else
{
nr_impare = numere_impare_s + numere_impare_p;
}
if (nr_impare == 0)
cout << "Nu exista";
else
cout << nr_impare;
fisier.close();
return 0;
}
dar la b cere valorile IMPARE,
Esti sigur ca asa e cerinta?