Pe scurt
Pentru a aduna valorile unui șir, folosim o sumă care se schimbă pe măsură ce citim fiecare valoare. La început suma este 0. Pentru șirul , după prima valoare suma devine 2, după a doua devine 5, iar după a treia devine 9. Așadar .
Pentru produs pornim de la 1. În același șir, produsul devine 2, apoi 6, apoi 24. Pornirea de la 0 ar strica rezultatul, deoarece orice număr înmulțit cu 0 dă 0. Numerele 0 pentru sumă și 1 pentru produs se numesc elemente neutre: dacă le folosim la început, nu schimbă rezultatul valorilor adăugate sau înmulțite ulterior.
Poți calcula ambele rezultate în aceeași parcurgere, dar păstrezi două valori separate: suma și produsul. Când citești un nou număr, îl adaugi la sumă și înmulțești produsul cu el. La șirul , suma este 6, iar produsul este 0. Acest exemplu arată de ce nu trebuie să deduci unul dintre rezultate din celălalt.
Uneori problema cere doar suma valorilor care respectă o condiție, de exemplu doar a celor pare. Atunci verifici condiția înainte de a adăuga. Pentru , suma valorilor pare este , nu 9. Citește cu grijă întrebarea: „toate valorile” și „valorile pare” cer calcule diferite.
Exemplu rezolvat — suma și produsul unui șir cu o condiție. Pentru șirul vrei suma tuturor valorilor și produsul numai al celor impare. Folosești două variabile separate: suma pornește de la 0, iar produs de la 1.
- Valoarea 2: suma devine 2; 2 este pară, deci produsul rămâne 1.
- Valoarea 3: suma devine 5; 3 este impară, deci produsul devine 3.
- Valoarea 4: suma devine 9; produsul rămâne 3.
- Valoarea 5: suma devine 14; 5 este impară, deci produsul devine 15.
Rezultatul este suma 14 și produsul valorilor impare 15. Dacă produsul ar fi pornit de la 0, ar fi rămas 0 pe tot parcursul. Dacă șirul nu ar fi avut nicio valoare impară, produsul ar fi rămas 1, valoarea de pornire; de aceea problema precizează ce se afișează în acest caz.
În detaliu
O acumulare combină valorile șirului într-un singur rezultat, actualizat la fiecare termen. Suma pornește de la 0, elementul neutru al adunării, iar produsul de la 1, elementul neutru al înmulțirii: pornirea de la 0 ar anula orice produs. Dacă problema cere numai valorile care respectă o condiție, testul se face înainte de actualizare. Pentru un șir cu termeni se fac pași, deci timpul este proporțional cu , iar memoria auxiliară este constantă. Dacă șirul este gol sau nicio valoare nu respectă condiția, acumulatorii rămân la valorile de pornire, 0 și 1.
Exemplul 1 — suma și produsul tuturor valorilor.
v = [2, 3, 4]
suma = 0
produs = 1
for x in v:
suma += x
produs *= x
print(suma, produs)
Perechile (sumă, produs) după fiecare termen sunt , și . Programul afișează 9 24. Pentru lista perechea finală este : un factor 0 anulează produsul, dar nu și suma.
Exemplul 2 — acumulare condiționată. Pentru se cere suma valorilor pare și produsul celor impare:
v = [2, 3, 4, 5, 7]
suma_pare = 0
prod_impare = 1
for x in v:
if x % 2 == 0:
suma_pare += x
else:
prod_impare *= x
print(suma_pare, prod_impare)
Valorile pare sunt 2 și 4, cu suma 6; valorile impare sunt 3, 5 și 7, cu produsul . Programul afișează 6 105.
Exemplul 3 — limitele tipului. Suma numerelor de la 1 la 100000 este , mai mare decât , valoarea maximă a tipului int. Acumulatorul trebuie declarat long long:
long long s = 0;
for (int i = 1; i <= 100000; ++i)
s += i;
cout << s;
Secvența afișează 5000050000. Cu un acumulator int, rezultatul ar depăși domeniul și nu ar fi corect. Dacă problema cere produsul modulo , actualizarea este , ca valorile să rămână mici; media aritmetică se obține împărțind suma la numărul de termeni, cu un operand real.
Exemplul 4 — suma alternantă. Suma are semnele alternate. Se păstrează o variabilă semn, inițial , pe care o schimbi la fiecare termen: la termenul se adună semn * k, apoi semn = -semn. Termenii adunați sunt , iar sumele parțiale sunt . Rezultatul final este 3.
semn = 1
s = 0
for k in range(1, 6):
s += semn * k
semn = -semn
print(s)
Programul afișează 3. Dacă schimbarea semnului ar fi făcută înaintea adunării, primul termen ar fi adunat cu minus și toate semnele ar fi inversate: s-ar obține .
Exemplul 5 — suma și produsul cifrelor. Cifrele unui număr se extrag cu n % 10, apoi se elimină prin n /= 10:
int n = 2305, s = 0, p = 1;
while (n > 0) {
int c = n % 10;
s += c;
p *= c;
n /= 10;
}
cout << s << ' ' << p;
Cifrele extrase sunt 5, 0, 3, 2, iar perechile (sumă, produs) sunt , , și . Programul afișează 10 0. Cifra 0 anulează produsul din momentul în care apare, dar suma continuă să crească.
Exemplul 6 — produsul depășește repede tipul. Factorialul încape în int, dar depășește . Un acumulator long long ajunge până la , iar depășește și acest tip. La produse mari se folosește fie long long, fie rezultatul modulo un număr dat.
Media aritmetică și numărul de termeni. Media valorilor pozitive din șirul se obține împărțind suma lor, , la numărul lor, 3: media este . Împărțirea se face doar dacă numărul termenilor este diferit de 0.
Greșeli frecvente
- Greșit: produsul pornește de la 0.Corect: pornește de la 1, elementul neutru al înmulțirii.
- Greșit: dintr-un produs 0 se deduce că și suma este 0.Corect: cele două rezultate sunt independente; la suma este 6, iar produsul 0.
- Greșit: la o sumă condiționată se adună toate valorile și apoi se scad cele care nu respectă condiția.Corect: se testează condiția înainte de a adăuga.
Pentru părinți
Copilul exersează acumularea treptată.
- Scrieți trei numere mici: 2, 3, 4.
- Calculați suma după fiecare număr.
- Refaceți pașii pentru produs pornind de la 1.
- Înlocuiți 3 cu 0 și comparați rezultatele.
Întrebați: „De ce suma pornește de la 0, dar produsul de la 1?”
Testează-te pe această lecție
Lecția o citești aici, fără cont. Testele pe lecții și capitole sunt în cont, cu grile originale Didaxis și explicația fiecăreia: gratuit 10 grile pe zi, fără limită cu Premium, 49 de lei pe lună pentru fiecare copil.
Înainte și după
Surse și referințe
Redactare proprie, conform programei:
- OMEC 6930/2025, MO 4 bis/2026, Informatică CS, p. 1632–1633 și 1653–1654; OMEC 4370/2026, anexa 8, p. 155–156; rocnee.eu
- OMEC 4370/2026, anexa 8, Informatică IX intensiv, p. 155–156
- OMEC 6930/2025, MO 4 bis/2026, Informatică CS, p. 1632–1633; rocnee.eu
- OMEC 6930/2025, anexa 66, Informatică IX CS militar, Monitorul Oficial nr. 4 bis/8.01.2026, pp. 2563–2578; cdn.edupedu.ro; centralizator oficial actualizat prin OMEC 3224/2026, legislatie.just.ro
- OMEC 6930/2025, MO 4 bis/2026, Informatică CS, p. 1653–1654; rocnee.eu
- OMEN 3393/2017, anexa 2, Informatică și TIC, pp. 13–14 (competențele 2.1–2.2 la p. 13); isj.tm.edu.ro
Documente consultate
- OMEN 3393/2017, anexa 2, Informatică și TIC, clasa a VIII-a, p. 14–15
- Programa școlară de informatică, clasa a IX-a (OMECI 5099/2009, anexa 5), CNCE; rocnee.eu
- Programa școlară de informatică, clasa a IX-a, matematică-informatică (OMEC 6930/2025, anexa 42), p. 1632–1633 și 1653–1654; rocnee.eu
- Programa de bacalaureat la informatică, matematică-informatică (anexa 2 la OMECTS 4800/2010), Ministerul Educației; edu.ro
- Subiectele și baremele Bacalaureatului 2026; subiecte2026.edu.ro
- OMEN 3393/2017, anexa 2, Informatică și TIC, p. 14–15
- OMEC 4370/2026, anexa 8, p. 155–156
Desene: Redactare proprie (desen original), conform OMEN 3393/2017, anexa 2, Informatică și TIC VIII; isj.tm.edu.ro
