Proba practică · Subiectul 1
O aplicație în C++
Modelul 1 Maximul de pe fiecare linie a unui tablou bidimensional
Exemplu
Pentru n = 3, m = 4 și punctajele:
| Școala 1 | Școala 2 | Școala 3 | Școala 4 | |
|---|---|---|---|---|
| Candidatul 1 | 7 | 9 | 5 | 8 |
| Candidatul 2 | 4 | 8 | 8 | 6 |
| Candidatul 3 | 10 | 5 | 7 | 8 |
se afișează:
9 - 2
8 - 2, 3
10 - 1
Candidatul 2 are două școli la punctaj maxim, deci amândouă se afișează.
Cum se rezolvă
Punctajele se citesc într-un tablou bidimensional a, cu n linii și m coloane: linia i e
fișa candidatului i, coloana j e școala j.
Fiecare linie se parcurge de două ori:
- prima parcurgere află maximul liniei;
- a doua parcurgere afișează toate coloanele în care se găsește acel maxim.
Două parcurgeri, și nu una, pentru că poziția nu se cunoaște până când nu se știe maximul. Într-o singură parcurgere ar trebui ținută o listă de poziții și golită de fiecare dată când apare o valoare mai mare — mai mult cod, pentru același rezultat.
Programul
În C++
#include <iostream>
using namespace std;
int a[101][51];
int main() {
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
cin >> a[i][j];
for (int i = 1; i <= n; i++) {
// Maximul liniei i.
int maxim = a[i][1];
for (int j = 2; j <= m; j++)
if (a[i][j] > maxim)
maxim = a[i][j];
// Toate coloanele în care apare maximul.
cout << maxim << " - ";
bool prima = true;
for (int j = 1; j <= m; j++)
if (a[i][j] == maxim) {
if (!prima)
cout << ", ";
cout << j;
prima = false;
}
cout << "\n";
}
return 0;
}
Variabila prima desparte școlile prin virgulă numai între ele, nu și înaintea celei dintâi: fără
ea, rândul ar începe cu o virgulă.
Tabloul e declarat global, cu o poziție în plus pe fiecare dimensiune, pentru că liniile și coloanele se numără de la 1 — la fel ca în enunț, unde școlile sunt 1, 2, 3, 4. Numărând de la 0, la afișare ar fi trebuit adunat 1 la fiecare indice.
Modelul 2 Subprogram pentru suma cifrelor, folosit într-un interval
Exemplu
Pentru a = 19 și b = 40 se afișează:
19 28 37
Suma cifrelor lui 19 este 10, iar în intervalul [19, 40] numai 19, 28 și 37 au aceeași sumă.
Numărul a intră și el în răspuns: e în interval și are, firește, aceeași sumă a cifrelor ca el
însuși.
a. Subprogramul
Suma cifrelor se strânge cu împărțiri repetate la 10: restul dă ultima cifră, câtul taie cifra aceea din număr. Bucla se oprește când numărul a ajuns la 0.
Subprogramul primește numărul prin valoare, deci îl poate strica în voie — la revenire, numărul din programul principal e neatins.
b. Programul principal
Suma cifrelor lui a se calculează o singură dată, înaintea buclei, și se ține într-o
variabilă. Chemat înăuntrul buclei, subprogramul ar fi refăcut la fiecare pas același calcul, cu
același rezultat.
Materialul acesta se citește pe educamp.ro și nu se tipărește.
S-a încheiat minutul de citit liber.
Vezi modelele rezolvate ca și cursant
Structura probei — subiectele, punctajele și timpul de lucru — se citește gratuit și integral. Pentru a citi modelele rezolvate, te înscrii la cursul de pregătire.
Te înscrii, alegi în cont când începe cursul și plătești prima lună prin transfer bancar. Pentru a vedea mai întâi ce se cere la probă, poți reveni la structura probei.
Acces la suportul de curs
25 RON / lună, fără ședințe
Ce cuprinde:
- Acces la toate lecțiile disponibile
- Suport de curs pentru tematica științifică și metodică
- Exemple, explicații și exerciții
- Acces la materialele noi adăugate pe platformă
- Posibilitatea de a adresa întrebări
Poți alege și variante cu ședințe online, în grup sau individuale. Le vezi pe pagina cursului.
Ai întrebări sau o problemă? Scrie-mi pe WhatsApp, la 0745 874 576.