Sari la conținut
EduCamp

Proba practică · Subiectul 1

O aplicație în C++

3 puncte Se verifică cum te descurci în mediul de programare: scrii aplicația, o compilezi și o depanezi.

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 17958
Candidatul 24886
Candidatul 310578

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.

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.

Înscrie-te Alte varianteCum plătești Login