Subiectul al III-lea, cerința 1
Test pe subprograme, cu barem
Un test scris cu cinci itemi pe transferul parametrilor și returnarea valorilor, cu răspunsurile așteptate și criteriile de notare analitică pentru fiecare.
Se alege proba scrisă.
TEST
Disciplina: Informatică · Clasa: a X-a, filiera teoretică, profil real, specializarea matematică-informatică
Unitatea de învățare: Subprograme · Timpul de lucru: 50 de minute
Toate subiectele sunt obligatorii. Se acordă 10 puncte din oficiu.
Itemul 1 — 15 puncte
Se consideră antetul de subprogram scris în limbajul C++:
void prelucrare(int a, int &b, int c[], int n)
a) Precizați ce valoare returnează subprogramul și câți parametri are. (4 puncte)
b) Precizați care dintre parametri se transmit prin valoare și care prin referință. (6 puncte)
c) Explicați ce se întâmplă, la revenirea în programul apelant, cu modificările făcute în
subprogram asupra parametrului a. (5 puncte)
Itemul 2 — 15 puncte
Se consideră programul de mai jos.
#include <iostream>
using namespace std;
void f(int x, int &y) {
x = x + 10;
y = y + 10;
cout << x << " " << y << endl;
}
int main() {
int a = 1, b = 2;
f(a, b);
cout << a << " " << b << endl;
f(b, a);
cout << a << " " << b << endl;
return 0;
}
Scrieți ce se afișează pe ecran la executarea programului și explicați, pentru fiecare dintre cele două apeluri, de ce una dintre variabilele din programul principal își schimbă valoarea, iar cealaltă nu.
Itemul 3 — 20 de puncte
Scrieți definiția completă a subprogramului sumaCifrelor, care primește prin unicul său parametru,
n, un număr natural (n ∈ [0, 10⁹]) și returnează suma cifrelor lui n.
Exemplu: pentru n = 2073, subprogramul returnează 12.
Itemul 4 — 20 de puncte
Scrieți definiția completă a subprogramului minMax, care are patru parametri: v, prin care
accesează un tablou unidimensional cu cel mult 100 de numere naturale, k, prin care primește
numărul de elemente ale tabloului (k ≥ 1), și mini, maxi, prin care furnizează cea mai mică,
respectiv cea mai mare valoare din tablou.
Exemplu: pentru k = 4 și tabloul (2073, 15, 480, 66), după apel mini are valoarea 15, iar maxi
valoarea 2073.
Itemul 5 — 20 de puncte
Scrieți un program C++ care citește de la tastatură un număr natural n (1 ≤ n ≤ 100) și apoi n
numere naturale din intervalul [0, 10⁹]. Programul reține într-un tablou numerele care au suma
cifrelor un număr par și afișează cea mai mică și cea mai mare dintre ele, separate printr-un
spațiu, sau mesajul nu exista, dacă niciun număr citit nu are această proprietate.
Programul folosește subprogramele definite la itemii 3 și 4, pe care nu este necesar să le rescrieți.
Exemplu: pentru n = 5 și numerele 2073, 14, 480, 66, 91, se afișează 66 2073.
BAREM DE EVALUARE ȘI DE NOTARE
- Se punctează orice modalitate de rezolvare corectă a cerințelor.
- Nu se acordă fracțiuni de punct.
- Se acordă 10 puncte din oficiu. Nota finală se calculează prin împărțirea la zece a punctajului total acordat.
Itemul 1 — 15 puncte
Răspunsul așteptat.
a) Subprogramul este de tip void, deci nu returnează nicio valoare: este o procedură. Are
patru parametri: a, b, c și n.
b) Prin valoare se transmit a și n, fiindcă sunt declarați ca variabile simple de tip int.
Prin referință se transmite b, marcat cu &. Parametrul c este un tablou: în C++ el se
transmite prin adresa primului element, așa că modificările făcute asupra elementelor lui în
subprogram se regăsesc în programul apelant.
c) Modificările asupra lui a se pierd. Parametrul a este transmis prin valoare, deci
subprogramul primește o copie a variabilei din programul apelant, iar toate atribuirile se fac
asupra copiei. La revenire, copia dispare, iar variabila din programul apelant rămâne cu valoarea
dinaintea apelului.
| Criteriul de evaluare | Punctaj |
|---|---|
| precizarea faptului că subprogramul nu returnează nicio valoare | 2p |
| precizarea numărului de parametri | 2p |
| identificarea parametrilor transmiși prin valoare | 2p |
| identificarea parametrului transmis prin referință | 2p |
precizarea situației tabloului c | 2p |
explicarea faptului că modificările asupra lui a se pierd | 3p |
| motivarea prin lucrul pe o copie a variabilei | 2p |
Pentru un răspuns la punctul c) care afirmă corect că valoarea nu se schimbă, dar fără motivare, se acordă 3p din cei 5.
Itemul 2 — 15 puncte
Răspunsul așteptat. Se afișează, pe patru linii:
11 12
1 12
22 11
11 12
Explicația. La primul apel, f(a, b), parametrul x primește o copie a lui a, iar y devine un
alt nume pentru b. Atribuirea x = x + 10 schimbă doar copia, deci a rămâne 1; atribuirea
y = y + 10 schimbă chiar variabila b, care devine 12.
La al doilea apel, f(b, a), rolurile se schimbă: x este copia lui b, care are acum 12 și devine
22 doar în interiorul subprogramului, iar y este a, care crește de la 1 la 11. La sfârșit a
este 11, iar b este 12.
| Criteriul de evaluare | Punctaj |
|---|---|
prima linie afișată, 11 12 | 2p |
a doua linie afișată, 1 12 | 2p |
a treia linie afișată, 22 11 | 2p |
a patra linie afișată, 11 12 | 2p |
| explicarea comportamentului parametrului transmis prin valoare | 3p |
| explicarea comportamentului parametrului transmis prin referință | 3p |
| precizarea faptului că la al doilea apel rolurile variabilelor se schimbă | 1p |
Rezolvarea se poate citi pe educamp.ro, la adresa de mai sus.
S-a încheiat minutul de citit liber.
Ce cuprinde rezolvarea
- TEST
- BAREM DE EVALUARE ȘI DE NOTARE
Vezi rezolvarea ca și cursant
Cel puțin o cerință din fiecare an este disponibilă gratuit și integral. Pentru a citi toate celelalte rezolvări ale disciplinei, 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 cum este scrisă o rezolvare, poți reveni la prima cerință a anului.
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.