Ce este suma elementelor?
Suma elementelor unui sir este rezultatul adunarii tuturor valorilor din sir. Este una dintre cele mai frecvente operatii pe care le facem cu siruri de numere si sta la baza multor altor calcule (media, procentele, totalurile).
In viata de zi cu zi, calculezi sume tot timpul fara sa te gandesti la algoritmi. Cand aduni preturile produselor din cosul de cumparaturi pentru a afla totalul, calculezi o suma. Cand un profesor aduna toate notele unui elev pentru a calcula media, primul pas este calculul sumei. Cand un antrenor aduna punctele marcate de fiecare jucator pentru a afla scorul total al echipei, face exact acelasi lucru.
Exemplu: v = [5, 3, 8, 2]
Cand ai un sir mic (3-4 elemente), poti calcula suma mental. Dar cand ai zeci, sute sau mii de elemente, ai nevoie de un algoritm care sa faca acest calcul automat. Tocmai acesta este rolul algoritmului de suma: parcurge sirul element cu element si construieste totalul pas cu pas.
Suma este si baza pentru alte calcule importante. Media aritmetica este suma impartita la numarul de elemente. Procentul unui element din total este valoarea elementului impartita la suma totala, inmultita cu 100. Fara suma, nu poti calcula niciuna dintre aceste valori.
Algoritmul pentru suma
Algoritmul de calcul al sumei este simplu si elegant. Parcurgem sirul de la primul la ultimul element si, la fiecare pas, adunam elementul curent la o variabila acumulator numita
suma
:
PENTRU i = 1 , n EXECUTA
suma = suma + v [ i ]
SFARSIT_PENTRU
SCRIE ( suma )
Initializarea cu 0 este absolut esentiala. De ce 0? Pentru ca zero este elementul neutru la adunare : 0 + orice numar = acel numar. Astfel, la primul pas (i=1), suma devine 0 + v[1] = v[1], ceea ce este corect - suma unui singur element este chiar acel element.
Pas cu pas pentru v = [5, 3, 8, 2]:
Initial: suma = 0
i=1: suma = 0 + 5 = 5
i=2: suma = 5 + 3 = 8
i=3: suma = 8 + 8 = 16
i=4: suma = 16 + 2 = 18
Gandeste-te la acest algoritm ca la un porcusor de bani. La inceput este gol (suma=0). Bagi prima moneda (5), acum ai 5. Bagi a doua moneda (3), acum ai 8. Bagi a treia (8), acum ai 16. Bagi ultima (2), acum ai 18. La final, porcusorul contine suma tuturor monedelor. Exact asa functioneaza algoritmul de suma - acumuleaza valorile una cate una.
O greseala frecventa este sa initializezi suma in interiorul buclei:
PENTRU i=1,n EXECUTA suma=0; suma=suma+v[i]
. In acest caz, suma se reseteaza la 0 la fiecare pas si la final vei avea doar ultimul element (v[n]), nu suma totala. Initializarea trebuie facuta o singura data,
inainte
de bucla.
Ce este media aritmetica?
Media aritmetica este suma tuturor elementelor impartita la numarul de elemente. Este cel mai folosit indicator statistic si il intalnesti zilnic: media notelor la scoala, temperatura medie a unei saptamani, pretul mediu al unui produs, viteza medie a unui vehicul.
Media ne spune care este valoarea "tipica" sau "reprezentativa" pentru un sir de numere. Daca ai notele 7, 9, 8, 10, 6, media este 8 - ceea ce inseamna ca, in medie, fiecare nota este "in jurul valorii 8". Unele sunt mai mari, altele mai mici, dar media le echilibreaza.
Exemplu: v = [5, 3, 8, 2] (n=4)
Suma = 5 + 3 + 8 + 2 = 18
Media = 18 / 4 = 4.5
Este important sa intelegi ca media nu trebuie neaparat sa fie un numar intreg. In exemplul de mai sus, media este 4.5, desi toate elementele din sir sunt numere intregi. Media poate fi orice numar real (cu zecimale). Aceasta este o diferenta importanta fata de alte operatii pe care le-ai invatat - suma si numararea dau intotdeauna numere intregi, dar media poate da un numar cu zecimale.
Atentie: media nu este acelasi lucru cu mediana (elementul din mijlocul sirului sortat) sau cu modul (valoarea care apare cel mai frecvent). Media aritmetica este specific suma impartita la numarul de elemente - o formula simpla dar extrem de utila.
Algoritmul pentru media aritmetica
Algoritmul pentru media este o extensie naturala a algoritmului de suma. Mai intai calculam suma, apoi impartim la numarul de elemente:
PENTRU i = 1 , n EXECUTA
suma = suma + v [ i ]
SFARSIT_PENTRU
media = suma / n // impartire reala
SCRIE ( media )
Un aspect crucial este tipul de impartire. In pseudocod si in programare, exista doua tipuri: impartirea intreaga (DIV) care elimina zecimalele si impartirea reala (/) care pastreaza zecimalele. Pentru media, folosim intotdeauna impartirea reala, deoarece vrem rezultatul exact.
Diferenta intre cele doua tipuri de impartire:
18 / 4 = 4.5 (impartire reala - corect pentru media)
18 DIV 4 = 4 (impartire intreaga - pierde zecimalele)
Sa facem traseul complet pentru v = [7, 9, 5, 10, 4] cu n=5. Initial: suma=0. Pasul i=1: suma=0+7=7. Pasul i=2: suma=7+9=16. Pasul i=3: suma=16+5=21. Pasul i=4: suma=21+10=31. Pasul i=5: suma=31+4=35. Dupa bucla: media = 35/5 = 7.0. Observa ca impartirea este facuta dupa bucla, nu in interiorul ei - calculam intai toata suma si abia apoi impartim.
O greseala frecventa este sa calculezi media in interiorul buclei:
media = suma / i
la fiecare pas. Aceasta ar da rezultate intermediare gresite. Media corecta se calculeaza doar o singura data, dupa ce suma a fost complet calculata. Gandeste-te asa: nu poti calcula media notelor dupa doar 2 note din 5 - trebuie sa ai toate notele mai intai.
Suma cu conditie (suma selectiva)
Uneori nu vrem suma tuturor elementelor, ci doar a celor care indeplinesc o anumita conditie. De exemplu: suma numerelor pare, suma numerelor pozitive, sau suma numerelor mai mari decat 10. Aceasta se numeste suma cu conditie sau suma selectiva .
PENTRU i = 1 , n EXECUTA
DACA v [ i ] MOD 2 = 0 ATUNCI
suma_pare = suma_pare + v [ i ]
SFARSIT_DACA
SFARSIT_PENTRU
Algoritmul este similar cu cel de suma totala, dar adaugam o structura DACA-ATUNCI in interiorul buclei. La fiecare pas, verificam mai intai daca elementul curent indeplineste conditia. Doar daca conditia este adevarata, il adunam la suma. Elementele care nu indeplinesc conditia sunt ignorate.
v = [5, 8, 3, 12, 7], n=5
i=1: 5 par? NU | i=2: 8 par? DA, suma_pare=0+8=8
i=3: 3 par? NU | i=4: 12 par? DA, suma_pare=8+12=20
i=5: 7 par? NU
Acelasi tipar se aplica pentru orice conditie. Pentru suma numerelor pozitive:
DACA v[i] > 0 ATUNCI suma_poz = suma_poz + v[i]
. Pentru suma numerelor cu o cifra:
DACA v[i] >= 0 SI v[i] <= 9 ATUNCI suma_cifre = suma_cifre + v[i]
. Structura algoritmului ramane identica - doar conditia se schimba.
Un exemplu practic: un magazin vrea sa afle totalul vanzarilor care depasesc 100 lei. Preturile vanzarilor sunt stocate intr-un sir. Algoritmul parcurge sirul si aduna doar valorile mai mari decat 100. Exact acelasi tipar: suma cu conditie.
Media cu conditie
Cand calculam media doar pentru elementele care indeplinesc o conditie, trebuie sa tinem evidenta a doua lucruri simultan: suma acelor elemente si numarul lor (contorul). Nu putem imparti la n (numarul total de elemente), ci la cate elemente am adunat efectiv.
contor = 0
PENTRU i = 1 , n EXECUTA
DACA v [ i ] > 0 ATUNCI // elementele pozitive
suma = suma + v [ i ]
contor = contor + 1
SFARSIT_DACA
SFARSIT_PENTRU
DACA contor > 0 ATUNCI
media = suma / contor
SCRIE ("Media: ", media )
ALTFEL
SCRIE ("Nu exista elemente pozitive")
SFARSIT_DACA
Observa doua lucruri foarte importante in acest algoritm. Primul: in interiorul buclei, cand un element indeplineste conditia, facem
doua
operatii - adunam la suma SI crestem contorul. Al doilea: inainte de a calcula media, verificam ca
contor > 0
. De ce? Pentru a evita
impartirea la zero
!
De ce verificam contor > 0?
Daca niciun element nu indeplineste conditia, contorul ramane 0.
Impartirea la 0 este nedefinita - ar produce o eroare!
Exemplu: v = [-3, -5, -1] si cautam pozitive: contor = 0, nu putem calcula media.
Sa facem un traseu complet. v = [-2, 5, -1, 8, 3], cautam media pozitivelor. Initial: suma=0, contor=0. i=1: v[1]=-2, -2>0? NU. i=2: v[2]=5, 5>0? DA, suma=5, contor=1. i=3: v[3]=-1, -1>0? NU. i=4: v[4]=8, 8>0? DA, suma=13, contor=2. i=5: v[5]=3, 3>0? DA, suma=16, contor=3. Contor=3>0, deci media = 16/3 = 5.33.
Aceasta este o greseala frecventa la teste: elevii impart la n in loc de contor. Daca ai 5 elemente dar doar 3 sunt pozitive, media pozitivelor este suma celor 3 impartita la 3, nu la 5. Retine: la media cu conditie, impartim la contor, nu la n .
Exemplu practic: Media notelor
Sa aplicam tot ce am invatat intr-un exemplu concret din viata scolara: calculul mediei notelor unui elev. Acesta este un algoritm complet care combina citirea datelor, calculul sumei si calculul mediei.
CITESTE n
suma = 0
PENTRU i = 1 , n EXECUTA
SCRIE ("Nota ", i , ": ")
CITESTE nota [ i ]
suma = suma + nota [ i ]
SFARSIT_PENTRU
media = suma / n
SCRIE ("Suma notelor: ", suma )
SCRIE ("Media ta este: ", media )
Observa ca in acest algoritm, citirea si adunarea se fac in aceeasi parcurgere. La fiecare pas, citim nota si imediat o adunam la suma. Aceasta este o tehnica eficienta - nu trebuie sa parcurgem sirul de doua ori (o data pentru citire si inca o data pentru suma).
Exemplu de executie:
Note introduse: 8, 9, 7, 10, 8
Suma = 42, n = 5
Acest algoritm poate fi extins usor. De exemplu, poti adauga o verificare ca fiecare nota sa fie intre 1 si 10 (validarea datelor). Sau poti numara cate note sunt peste media calculata. Sau poti afla procentul notelor de 10 din totalul notelor. Toate aceste extensii pornesc de la algoritmul de baza pe care l-ai invatat.
In sistemul romanesc de invatamant, media se calculeaza exact dupa aceasta formula. Media semestriala este media aritmetica a tuturor notelor din semestru, iar media anuala este media celor doua medii semestriale. Algoritmul pe care l-ai invatat astazi este exact ceea ce face un profesor cand iti calculeaza media!
Produsul elementelor unui sir
Pe langa suma, o alta operatie frecventa este calculul produsului tuturor elementelor. Algoritmul este similar cu cel de suma, dar cu doua diferente importante: folosim inmultirea in loc de adunare si initializam cu 1 in loc de 0.
PENTRU i = 1 , n EXECUTA
produs = produs * v [ i ]
SFARSIT_PENTRU
SCRIE ( produs )
De ce initializam cu 1 si nu cu 0? Pentru ca 1 este elementul neutru la inmultire : 1 * orice numar = acel numar. Daca am initializa cu 0, produsul ar ramane 0 pentru totdeauna (0 * orice = 0). Aceasta este una dintre cele mai frecvente greseli la examene!
Traseu pentru v = [2, 3, 5], n=3:
Initial: produs = 1
i=1: produs = 1 * 2 = 2
i=2: produs = 2 * 3 = 6
i=3: produs = 6 * 5 = 30
Produsul elementelor este important in matematica si in aplicatii reale. De exemplu, factorialul unui numar (n! = 1*2*3*...*n) este exact produsul elementelor sirului [1, 2, 3, ..., n]. In finante, daca ai o investitie care creste cu factori diferiti in fiecare an (1.05, 1.08, 1.03), valoarea finala este valoarea initiala inmultita cu produsul factorilor.
Retine regula de aur a initializarii: suma se initializeaza cu 0, produsul se initializeaza cu 1 . Aceste doua reguli trebuie sa devina reflexe - le vei folosi de nenumarate ori in algoritmi.
Ca si la suma, putem calcula produsul cu conditie. De exemplu, produsul numerelor impare:
produs=1; PENTRU i=1,n EXECUTA DACA v[i] MOD 2=1 ATUNCI produs=produs*v[i]
. Trebuie insa sa fim atenti: daca niciun element nu indeplineste conditia, produsul ramane 1 (valoarea initiala), nu 0.
Elemente peste si sub medie
O aplicatie practica importanta a mediei este clasificarea elementelor: cate sunt peste medie si cate sunt sub medie . Aceasta analiza necesita doua parcurgeri: prima pentru a calcula media, a doua pentru a compara fiecare element cu media calculata.
suma = 0
PENTRU i = 1 , n EXECUTA
suma = suma + v [ i ]
SFARSIT_PENTRU
media = suma / n
// Pasul 2: numaram peste/sub medie
peste = 0
sub = 0
egal = 0 // contorizam si elementele egale cu media
PENTRU i = 1 , n EXECUTA
DACA v [ i ] > media ATUNCI
peste = peste + 1
ALTFEL
DACA v [ i ] < media ATUNCI
sub = sub + 1
ALTFEL
egal = egal + 1 // v[i] = media: nu e nici peste nici sub
SFARSIT_DACA
SFARSIT_DACA
SFARSIT_PENTRU
De ce avem nevoie de doua parcurgeri? Pentru ca nu putem compara elementele cu media daca nu am calculat-o inca. Prima parcurgere (pasul 1) calculeaza suma si media. A doua parcurgere (pasul 2) compara fiecare element cu media si numara cele peste si cele sub medie.
v = [8, 6, 9, 7, 10], media = 8
i=1: 8 > 8? NU β 8 < 8? NU β ALTFEL: egal=1
i=2: 6 > 8? NU β 6 < 8? DA β sub=1
i=3: 9 > 8? DA β peste=1
i=4: 7 > 8? NU β 7 < 8? DA β sub=2
i=5: 10 > 8? DA β peste=2
Peste medie: 2, Sub medie: 2, Egale cu media: 1 (peste+sub+egal = 5 = n β)
Observa ca un element poate fi egal cu media - in acest caz, nu este nici "peste" nici "sub". Algoritmul de mai sus contorizeaza explicit aceasta a treia categorie in variabila egal. La final, peste + sub + egal = n (toate elementele sunt clasificate). Varianta alternativa: poti calcula egal dupa bucla ca egal = n - peste - sub, dar contorizarea directa este mai clara si mai usor de verificat.
Aceasta analiza este foarte utila in viata reala. Un profesor poate vedea cati elevi au note peste media clasei. Un meteorolog poate afla cate zile au avut temperatura peste media lunara. Un economist poate determina cate luni au avut venituri peste media anuala.
Rezumat: Reguli si greseli frecvente
Sa recapitulam toate formulele, regulile si greselile frecvente pe care trebuie sa le retii din aceasta lectie. Aceste cunostinte vor fi folosite in toate lectiile urmatoare si la evaluari.
Formulele esentiale:
Media = Suma / n
Produs = v[1] * v[2] * ... * v[n]
Regulile de initializare:
- Suma se initializeaza cu 0 (elementul neutru la adunare)
- Produsul se initializeaza cu 1 (elementul neutru la inmultire)
- Contorul se initializeaza cu 0
- Initializarea se face inainte de bucla, niciodata in interior
Cele mai frecvente greseli:
- Initializarea sumei cu 1 in loc de 0 (rezultat cu +1)
- Initializarea produsului cu 0 in loc de 1 (produs ramane 0 mereu)
- Initializarea in interiorul buclei (se reseteaza la fiecare pas)
- Folosirea DIV in loc de / pentru media (pierde zecimalele)
- La media cu conditie: impartirea la n in loc de contor
- Neprotejarea impartirii la zero (cand contor=0)
Verifica-ti algoritmul cu aceste intrebari:
1. Am initializat variabilele INAINTE de bucla?
2. Am folosit valoarea corecta de initializare (0 pentru suma, 1 pentru produs)?
3. La media cu conditie, impart la contor, nu la n?
4. Am verificat ca nu impart la zero?
5. Am folosit impartire reala (/) pentru media?
Aceste tipare de algoritmi (suma, media, produs, suma/media cu conditie) sunt blocurile fundamentale ale prelucrarii datelor. Le vei intalni in orice limbaj de programare si in orice domeniu: finante, stiinta, inginerie, medicina. Stapaneste-le acum si le vei folosi toata viata!
Exercitii practice
Exercitiul 1 (Nivel minim) - Calcule cu siruri
Pentru sirul v = [12, 5, 8, 15, 3, 10], calculeaza urmatoarele. Scrie traseul complet al algoritmului (valoarea variabilelor la fiecare pas) pentru a justifica fiecare raspuns.
- Suma tuturor elementelor (scrie traseul: la fiecare i, valoarea sumei)
- Media aritmetica (specifica tipul de impartire folosit)
- Suma elementelor pare (scrie traseul cu conditia verificata)
- Cate elemente din sir sunt mai mari decat 7? (numara-le, scrie traseul)
Raspunde numerotat: 1. ... 2. ... 3. ... 4. ...
Sfat: pentru fiecare exercitiu, fa un tabel cu coloanele "i", "v[i]", "conditie", "suma/contor" si completeaza-l pas cu pas.
Exercitiul 1b (Extindere nivel minim) - Media elementelor mai mari decat 7
Scaffolding (citeste mai intai!): Pentru a calcula media elementelor mai mari decat 7 din v = [12, 5, 8, 15, 3, 10], ai nevoie de doi acumulatori: suma_mare (suma celor care trec testul) si contor_mare (cate trec testul). La final, media = suma_mare / contor_mare — dar numai daca contor_mare > 0 (altfel este impartire la zero!).
- Scrie traseul: la fiecare i noteaza v[i], daca v[i] > 7 (da/nu), valoarea curenta a suma_mare si contor_mare
- La final: suma_mare = ?, contor_mare = ?
- Media elementelor mai mari decat 7 = suma_mare / contor_mare = ?
Raspunde: 1. tabel pas cu pas, 2. valorile finale, 3. rezultatul mediei
Exercitiul 2 (Nivel standard) - Mini-proiect: Calculator de medie scolara
Scrie algoritmul complet care citeste n note ale unui elev si afiseaza: suma notelor, media generala, numarul de note peste medie si daca elevul este promovat (media >= 5).
Cerinte obligatorii:
β Bonus (pentru nota maxima):
- Calculeaza si procentul notelor de 10 din total
- Afiseaza media doar a notelor sub 5 (media insuficientelor)
- Verifica daca toate notele sunt intre 1 si 10 (validare)
Scrie algoritmul pe caiet, apoi verifica-l facand traseul pentru note = [8, 4, 9, 6, 10].
Exercitiul 3 (Nivel performanta) - Compunere
Cerinta: Scrie un text de 8-10 randuri in care explici de ce trebuie sa verificam ca numarul de elemente nu este 0 inainte de a calcula media. Descrie ce s-ar intampla daca nu facem aceasta verificare si da un exemplu concret de situatie in care contorul poate ramane 0.
Indicii pentru structurarea raspunsului:
- Explica ce este impartirea la zero si de ce este o eroare
- Da un exemplu de sir si conditie unde contorul ramane 0
- Arata cum arata codul de protectie (DACA contor > 0)
- Explica de ce aceasta verificare este importanta in programare
Cuvinte cheie de folosit: impartire la zero, contor, conditie, verificare, eroare, protectie, media cu conditie
Format: Scrie raspunsul pe caiet in paragrafe coerente (nu liste!). Foloseste exemple concrete.