Informatică, întrebare adresată de BigDinca, 8 ani în urmă

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.


SMihai: functiile returneaza numarul de valori PARE
dar la b cere valorile IMPARE,
Esti sigur ca asa e cerinta?

Răspunsuri la întrebare

Răspuns de SMihai
0

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

}

Alte întrebări interesante