Ora 21 - Numărarea elementelor
Ora 22 - Modulul 4

Calculul unor expresii

Învață să calculezi sume, produse, medii și alte expresii matematice pe vectori

40min teorie + 15min probleme PbInfo
Competența 4.3
Săptămâna 3
Sigla liceului
TEORIE - 40 minute

Ce vei învăța astăzi?

După această lecție, vei putea calcula diverse expresii matematice folosind elementele unui vector.

Suma elementelor unui vector
Produsul elementelor
Media aritmetică
Suma pătratelor și cuburilor

Ce înseamnă calculul unor expresii?

Definiție: Calculul expresiilor pe vectori înseamnă parcurgerea vectorului și aplicarea unor operații matematice asupra elementelor sale.

Exemplu: Pentru vectorul [2, 4, 6, 8]:
✓ Suma: 2 + 4 + 6 + 8 = 20
✓ Produsul: 2 × 4 × 6 × 8 = 384
✓ Media: (2 + 4 + 6 + 8) ÷ 4 = 5

Demonstrație: Calculul sumei pentru vectorul [3, 7, 2, 9, 4]

suma = 0 (inițializare) 0
suma = 0 + v[0] = 0 + 3 3
suma = 3 + v[1] = 3 + 7 10
suma = 10 + v[2] = 10 + 2 12
suma = 12 + v[3] = 12 + 9 21
suma = 21 + v[4] = 21 + 4 25

Analogii pentru a înțelege calculele pe vectori:

Suma notelor

Ca și cum ai aduna toate notele din catalog pentru a calcula media clasei.

Total cumpărături

Ca și cum ai face suma tuturor produselor din coșul de cumpărături.

Media temperaturilor

Ca și cum ai calcula temperatura medie pe parcursul unei săptămâni.

Algoritmi pentru calculul expresiilor

// ALGORITM pentru calculul SUMEI elementelor unui vector 1. suma = 0 // Inițializare 2. pentru i de la 0 la n-1 3. suma = suma + v[i] // Adăugăm fiecare element 4. sfârșit pentru 5. scrie suma

Regula de aur: Întotdeauna inițializezi suma cu 0. Dacă inițializezi cu altceva, rezultatul va fi greșit!

Implementare în C++
#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;
    
    const int MAX = 1000;
    int v[MAX];
    
    // Citire vector
    for (int i = 0; i < n; i++) {
        cin >> v[i];
    }
    
    // Calcul suma
    int suma = 0;  // Inițializare CRUCIALĂ cu 0
    
    for (int i = 0; i < n; i++) {
        suma = suma + v[i];  // Adunăm fiecare element
        // Echivalent: suma += v[i];
    }
    
    cout << "Suma elementelor este: " << suma << endl;
    
    return 0;
}
Suma simplă
S = v[0] + v[1] + ... + v[n-1]
Ex: [1,2,3,4] → 1+2+3+4 = 10
Suma cu condiție
S = Σ v[i] (v[i] > 0)
Ex: [1,-2,3,-4] → 1+3 = 4
// ALGORITM pentru calculul PRODUSULUI elementelor unui vector 1. produs = 1 // Inițializare cu 1, nu cu 0! 2. pentru i de la 0 la n-1 3. produs = produs * v[i] // Înmulțim fiecare element 4. sfârșit pentru 5. scrie produs

Important: Produsul se inițializează cu 1, nu cu 0! Dacă ai 0 × ceva = 0, deci totul ar fi 0.

Implementare în C++
#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;
    
    const int MAX = 1000;
    int v[MAX];
    
    // Citire vector
    for (int i = 0; i < n; i++) {
        cin >> v[i];
    }
    
    // Calcul produs
    int produs = 1;  // Inițializare cu 1
    
    for (int i = 0; i < n; i++) {
        produs = produs * v[i];  // Înmulțim fiecare element
        // Echivalent: produs *= v[i];
    }
    
    cout << "Produsul elementelor este: " << produs << endl;
    
    return 0;
}

Atenție la overflow! Dacă produsul devine prea mare, poate depăși limita tipului de date. Pentru numere mari, folosește long long sau double.

// ALGORITM pentru calculul MEDIEI aritmetice 1. suma = 0 // Calculăm mai întâi suma 2. pentru i de la 0 la n-1 3. suma = suma + v[i] 4. sfârșit pentru 5. media = suma / n // Împărțim suma la numărul de elemente 6. scrie media

Precizie: Pentru media exactă (cu zecimale), folosește tipul float sau double și împărțirea reală.

Implementare în C++
#include <iostream>
#include <iomanip>  // Pentru setprecision
using namespace std;

int main() {
    int n;
    cin >> n;
    
    if (n == 0) {
        cout << "Nu se poate calcula media pentru vector gol!" << endl;
        return 0;
    }
    
    const int MAX = 1000;
    int v[MAX];
    
    // Citire vector
    for (int i = 0; i < n; i++) {
        cin >> v[i];
    }
    
    // Calcul suma
    int suma = 0;
    for (int i = 0; i < n; i++) {
        suma += v[i];
    }
    
    // Calcul media (cu zecimale)
    double media = (double)suma / n;  // Conversie la double pentru împărțire reală
    
    cout << fixed << setprecision(2);  // Afișăm cu 2 zecimale
    cout << "Media aritmetica este: " << media << endl;
    
    return 0;
}

Formula matematică: Media aritmetică = (x₁ + x₂ + ... + xₙ) / n

Caz special: Pentru n=0 (vector gol), media nu este definită. Trebuie să tratăm acest caz.

// ALGORITM pentru SUMA PĂTRATELOR elementelor 1. sumaPatrate = 0 // Inițializare 2. pentru i de la 0 la n-1 3. patrat = v[i] * v[i] // Calculăm pătratul elementului 4. sumaPatrate = sumaPatrate + patrat 5. sfârșit pentru 6. scrie sumaPatrate // SAU direct: 1. sumaPatrate = 0 2. pentru i de la 0 la n-1 3. sumaPatrate = sumaPatrate + v[i] * v[i] 4. sfârșit pentru

Aplicații: Suma pătratelor este folosită în statistică, fizică și algoritmi de machine learning.

Implementare în C++
#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;
    
    const int MAX = 1000;
    int v[MAX];
    
    // Citire vector
    for (int i = 0; i < n; i++) {
        cin >> v[i];
    }
    
    // Calcul suma pătratelor
    int sumaPatrate = 0;
    
    for (int i = 0; i < n; i++) {
        sumaPatrate += v[i] * v[i];  // Adunăm pătratul fiecărui element
    }
    
    cout << "Suma patratelor este: " << sumaPatrate << endl;
    
    // Varianta pentru suma cuburilor
    int sumaCuburi = 0;
    for (int i = 0; i < n; i++) {
        sumaCuburi += v[i] * v[i] * v[i];
    }
    cout << "Suma cuburilor este: " << sumaCuburi << endl;
    
    return 0;
}
Suma pătratelor
S = v[0] + v[1] + ... + v[n-1]
Ex: [1,2,3] → 1+2+3 = 1+4+9 = 14
Suma cuburilor
S = v[0] + v[1] + ... + v[n-1]
Ex: [1,2,3] → 1+2+3 = 1+8+27 = 36

Exercițiu de completare - Calculul sumei:

Completează TOATE spațiile libere din codul C++ pentru calculul sumei elementelor unui vector:
______ <iostream>
using namespace ______;
______ main() {
    ______ n;
    cin ______ n;
    const int ______ = 1000;
    int v[______];
    // Citire vector
    ______ (int i = 0; i < n; ______) {
        cin ______ v[______];
    }
    // Calcul suma
    int suma = ______;
    for (int i = 0; i < n; ______) {
        suma = suma ______ v[______];
        // Echivalent: suma ______ v[i];
    }
    cout << "Suma este: " << ______ << ______;
    ______ ______;
}
Bancă de cuvinte:
#include std int >> MAX for i++ i 0 + += suma endl return

Instrucțiuni:
1. Click pe un spațiu liber (______)
2. Click pe cuvântul corect din bancă

Test de înțelegere: Care este valoarea inițială corectă?

Test rapid - inițializarea variabilelor:

Pentru fiecare calcul, alege valoarea inițială corectă:

Suma elementelor
int suma = ?
?
Produsul elementelor
int produs = ?
?
Suma pătratelor
int sumaPatrate = ?
?

Expresii complexe și combinații

Calculul unor expresii mai complexe:

Media ponderată
Media ponderată
// Calcul media ponderată: suma(nota[i] * pondere[i]) / suma(pondere[i])
                                    double sumaProduse = 0;
                                    double sumaPonderi = 0;

                                    for (int i = 0; i < n; i++) {
                                        sumaProduse += nota[i] * pondere[i];
                                        sumaPonderi += pondere[i];
                                    }

                                    double mediaPonderata = sumaProduse / sumaPonderi;
                                    cout << "Media ponderata: " << mediaPonderata << endl;
Deviația standard (simplificată)

Măsoară împrăștierea datelor față de medie.

// Calcul deviație standard: sqrt(suma((x[i] - media)^2) / n)
                                    double suma = 0;
                                    for (int i = 0; i < n; i++) {
                                        suma += v[i];
                                    }
                                    double media = suma / n;

                                    double sumaPatrateDiferente = 0;
                                    for (int i = 0; i < n; i++) {
                                        double diferenta = v[i] - media;
                                        sumaPatrateDiferente += diferenta * diferenta;
                                    }

                                    double deviatieStandard = sqrt(sumaPatrateDiferente / n);
                                    cout << "Deviatia standard: " << deviatieStandard << endl;

Sfaturi practice pentru calcule pe vectori

Întotdeauna inițializează corect variabila de acumulare

Suma → 0, Produsul → 1, Numărătoarea → 0

Folosește tipul de date potrivit

Pentru sume mari → long long, pentru medii cu zecimale → double

Evită împărțirea la zero

Verifică întotdeauna dacă n > 0 înainte de a calcula media.

Folosește operatorii compuși

suma += v[i] este mai eficient și mai clar decât suma = suma + v[i]

Încălzire (2 minute)

Test rapid - calcul expresii: Pentru vectorul [2, 5, 3, 8], calculează:

  • Suma → verifică
  • Produsul → verifică
  • Media → verifică
  • Suma pătratelor → verifică

Regulă: Suma = 2+5+3+8, Produsul = 2×5×3×8, Media = suma/4, Suma pătratelor = 2+5+3+8

PROBLEME PBINFO - 15 minute (3 probleme)

PbInfo #... - Suma elementelor unui vector

Enunț:

Cerință: Se citește un număr n și apoi n numere întregi. Să se calculeze suma tuturor elementelor.

Date de intrare:

Programul citește de la tastatură numărul n, apoi n numere întregi.

Date de ieșire:

Programul va afișa pe ecran suma elementelor.

Exemplu:

Intrare:

5
10 20 5 30 15

Ieșire:

80

Explicație: 10 + 20 + 5 + 30 + 15 = 80

Cum gândim soluția:
  1. Citim n și cele n elemente
  2. Inițializăm o variabilă suma cu 0
  3. Parcurgem vectorul și pentru fiecare element:
    • Adăugăm elementul la sumă: suma += v[i]
  4. Afișăm suma
Execuție pentru n=4 cu valori 7, 2, 9, 4:
Pas 1: Citim n=4 și vectorul [7, 2, 9, 4]
Pas 2: suma = 0
Pas 3 (i=0): suma = 0 + 7 = 7
Pas 4 (i=1): suma = 7 + 2 = 9
Pas 5 (i=2): suma = 9 + 9 = 18
Pas 6 (i=3): suma = 18 + 4 = 22
REZULTAT: Afișăm 22 ✓
Ce trebuie să verifici mereu?
  • Inițializarea sumei cu 0 (foarte important!)
  • Citirea corectă a tuturor elementelor
  • Folosirea tipului de date potrivit (dacă suma poate fi mare, folosește long long)
  • Parcurgerea corectă a vectorului (de la 0 la n-1)
Scrie soluția în C++:
Soluție corectă:
#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;
    
    const int MAX = 1000;
    int v[MAX];
    
    // Citire elemente
    for (int i = 0; i < n; i++) {
        cin >> v[i];
    }
    
    // Calcul suma
    int suma = 0;  // Inițializare CRUCIALĂ cu 0
    
    for (int i = 0; i < n; i++) {
        suma += v[i];  // Adunăm fiecare element la sumă
    }
    
    // Afișare rezultat
    cout << suma << endl;
    
    return 0;
}
Varianta cu tip de date mai mare:
#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;
    
    // Dacă n este mare sau numerele sunt mari, folosim long long
    const int MAX = 100000;
    int v[MAX];
    
    for (int i = 0; i < n; i++) {
        cin >> v[i];
    }
    
    long long suma = 0;  // long long pentru sume foarte mari
    
    for (int i = 0; i < n; i++) {
        suma += v[i];
    }
    
    cout << suma << endl;
    
    return 0;
}

Ce învățăm din această problemă:

  • Structura de bază a calculului sumei: inițializare, parcurgere, acumulare
  • Importanța inițializării: suma trebuie începută de la 0
  • Alegerea tipului de date: pentru sume mari, folosim long long
  • Operatorul compus +=: mai eficient și mai clar
  • Parcurgerea completă: de la primul la ultimul element

PbInfo #... - Media aritmetică

Problemă care calculează media elementelor unui vector

Enunț:

Cerință: Se citește un număr n și apoi n numere întregi. Să se calculeze media aritmetică a elementelor.

Date de intrare:

Programul citește de la tastatură numărul n, apoi n numere întregi.

Date de ieșire:

Programul va afișa pe ecran media aritmetică, cu exact două zecimale.

Exemplu:

Intrare:

5
10 20 5 30 15

Ieșire:

16.00

Explicație: (10 + 20 + 5 + 30 + 15) / 5 = 80 / 5 = 16.00

Cum gândim soluția:
  1. Citim n și cele n elemente
  2. Calculăm suma elementelor (ca la problema anterioară)
  3. Calculăm media ca suma / n
  4. Atenție: Pentru media cu zecimale, trebuie să facem împărțire reală:
    • double media = (double)suma / n;
    • Sau folosim suma ca double de la început
  5. Afișăm media cu 2 zecimale
Cum funcționează pentru n=4 cu valori 7, 2, 9, 4:
Vector: v[0]=7, v[1]=2, v[2]=9, v[3]=4
suma = 7 + 2 + 9 + 4 = 22
media = 22 / 4 = 5.5
REZULTAT: Afișăm 5.50 ✓
De ce trebuie conversie la double?

Pentru că împărțirea a două numere întregi în C++ dă rezultat întreg (partea întreagă). Pentru a obține zecimale, trebuie să convertim cel puțin un operand la tip real (float sau double).

Formula cheie: double media = (double)suma / n;

Scrie soluția în C++:
Soluție corectă:
#include <iostream>
#include <iomanip>  // Pentru setprecision
using namespace std;

int main() {
    int n;
    cin >> n;
    
    // Verificăm cazul n=0
    if (n == 0) {
        cout << "Nu se poate calcula media pentru vector gol!" << endl;
        return 0;
    }
    
    const int MAX = 1000;
    int v[MAX];
    
    // Citire elemente
    for (int i = 0; i < n; i++) {
        cin >> v[i];
    }
    
    // Calcul suma
    int suma = 0;
    for (int i = 0; i < n; i++) {
        suma += v[i];
    }
    
    // Calcul media (cu conversie la double pentru zecimale)
    double media = (double)suma / n;
    
    // Afișare cu 2 zecimale
    cout << fixed << setprecision(2);
    cout << media << endl;
    
    return 0;
}
Varianta cu suma ca double:
#include <iostream>
#include <iomanip>
using namespace std;

int main() {
    int n;
    cin >> n;
    
    if (n == 0) {
        cout << "0.00" << endl;  // Convenție: media vectorului gol este 0
        return 0;
    }
    
    const int MAX = 1000;
    int v[MAX];
    
    for (int i = 0; i < n; i++) {
        cin >> v[i];
    }
    
    // Folosim double pentru sumă de la început
    double suma = 0;
    for (int i = 0; i < n; i++) {
        suma += v[i];
    }
    
    double media = suma / n;  // Nu mai e nevoie de conversie
    
    cout << fixed << setprecision(2);
    cout << media << endl;
    
    return 0;
}

Ce învățăm din această problemă:

  • Calculul mediei: suma / număr_elemente
  • Importanța conversiei la tip real: pentru a obține zecimale
  • Tratarea cazului n=0: împărțirea la 0 este eroare
  • Formatarea afișării: cu fixed și setprecision
  • Precizia calculelor: folosirea double pentru calcule exacte

PbInfo #... - Suma pătratelor

Problemă care calculează suma pătratelor elementelor

Enunț:

Cerință: Se citește un număr n și apoi n numere întregi. Să se calculeze suma pătratelor elementelor.

Date de intrare:

Programul citește de la tastatură numărul n, apoi n numere întregi.

Date de ieșire:

Programul va afișa pe ecran suma pătratelor elementelor.

Exemplu:

Intrare:

4
1 2 3 4

Ieșire:

30

Explicație: 1 + 2 + 3 + 4 = 1 + 4 + 9 + 16 = 30

Cum gândim soluția:
  1. Citim n și cele n elemente
  2. Inițializăm o variabilă sumaPatrate cu 0
  3. Parcurgem vectorul o singură dată:
    • Pentru fiecare element, calculăm pătratul: v[i] * v[i]
    • Adăugăm pătratul la sumă: sumaPatrate += v[i] * v[i]
  4. Afișăm suma pătratelor
  5. Observație: Atenție la overflow! Pătratele cresc rapid.
Execuție pentru n=3 cu valori 2, 3, 4:
Inițializare: sumaPatrate = 0
i=0 (v[0]=2): 2 = 4 → sumaPatrate = 0 + 4 = 4
i=1 (v[1]=3): 3 = 9 → sumaPatrate = 4 + 9 = 13
i=2 (v[2]=4): 4 = 16 → sumaPatrate = 13 + 16 = 29
REZULTAT: sumaPatrate = 29 → Afișăm "29" ✓
De ce este important tipul de date?

Pătratul unui număr crește mult mai repede decât numărul însuși. De exemplu, pătratul lui 100.000 este 10.000.000.000, care depășește limita tipului int (2 miliarde).

Regula de siguranță: Pentru sume de pătrate, folosește întotdeauna long long.

Scrie soluția în C++:
Soluție corectă:
#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;
    
    const int MAX = 1000;
    int v[MAX];
    
    // Citire elemente
    for (int i = 0; i < n; i++) {
        cin >> v[i];
    }
    
    // Calcul suma pătratelor
    long long sumaPatrate = 0;  // long long pentru a evita overflow
    
    for (int i = 0; i < n; i++) {
        // Calculăm pătratul ca long long pentru siguranță
        long long patrat = (long long)v[i] * v[i];
        sumaPatrate += patrat;
        
        // SAU direct: sumaPatrate += (long long)v[i] * v[i];
    }
    
    // Afișare rezultate
    cout << sumaPatrate << endl;
    
    return 0;
}
Varianta pentru suma cuburilor:
#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;
    
    const int MAX = 1000;
    int v[MAX];
    
    for (int i = 0; i < n; i++) {
        cin >> v[i];
    }
    
    // Calcul suma cuburilor (și mai rapidă creștere!)
    long long sumaCuburi = 0;
    
    for (int i = 0; i < n; i++) {
        // Calculăm cubul ca long long
        long long cub = (long long)v[i] * v[i] * v[i];
        sumaCuburi += cub;
    }
    
    cout << sumaCuburi << endl;
    
    return 0;
}

Ce învățăm din această problemă:

  • Calculul puterilor: pătrate (), cuburi (), etc.
  • Problema overflow-ului: puterile cresc rapid, necesită tipuri de date mai mari
  • Conversia sigură: (long long)v[i] * v[i] asigură că înmulțirea se face pe 64 de biți
  • Aplicații practice: statistica, fizică, algoritmi de optimizare
  • Generalizarea: aceeași structură pentru orice expresie calculată pe elemente
EXERCIȚII PRACTICE - 10 minute

Exercițiul Practic: Calculatoare statistice

Sarcini de lucru

Completează următoarele sarcini pentru a-ți consolida cunoștințele despre calculul expresiilor pe vectori

Sarcina 1: Analiză și corectare cod

Analizează următorul cod și găsește greșelile:

#include <iostream>
using namespace std;

int main() {
    int n = 5;
    int vector[5] = {8, 3, 10, 2, 7};
    
    // Calcul suma
    int suma = 1;  // începem cu 1
    
    for (int i = 0; i < n; i++) {
        suma = suma * vector[i];  // înmulțim în loc să adunăm
    }
    
    // Calcul produs
    int produs = 0;  // începem cu 0
    
    for (int i = 0; i < n; i++) {
        produs = produs + vector[i];  // adunăm în loc să înmulțim
    }
    
    cout << "Suma: " << suma << endl;
    cout << "Produs: " << produs << endl;
    
    return 0;
}
Soluție pentru Sarcina 1:

Greșeli identificate și corecții:

  • 1. Inițializare greșită a sumei: int suma = 1; este greșit pentru suma.
    Corect: int suma = 0;
  • 2. Operație greșită în bucla sumei: suma = suma * vector[i]; este înmulțire, nu adunare.
    Corect: suma = suma + vector[i]; sau suma += vector[i];
  • 3. Inițializare greșită a produsului: int produs = 0; este greșit pentru produs.
    Corect: int produs = 1;
  • 4. Operație greșită în bucla produsului: produs = produs + vector[i]; este adunare, nu înmulțire.
    Corect: produs = produs * vector[i]; sau produs *= vector[i];

Cod corectat:

#include <iostream>
using namespace std;

int main() {
    int n = 5;
    int vector[5] = {8, 3, 10, 2, 7};
    
    // Calcul suma CORECT
    int suma = 0;  // CORECT: începem cu 0
    
    for (int i = 0; i < n; i++) {
        suma += vector[i];  // CORECT: adunăm
    }
    
    // Calcul produs CORECT
    int produs = 1;  // CORECT: începem cu 1
    
    for (int i = 0; i < n; i++) {
        produs *= vector[i];  // CORECT: înmulțim
    }
    
    cout << "Suma: " << suma << endl;
    cout << "Produs: " << produs << endl;
    
    return 0;
}
Sarcina 2: Implementare completă

Cerință: Scrie un program care citește n, apoi n numere. Programul calculează și afișează: 1. Suma elementelor 2. Produsul elementelor (atenție la overflow) 3. Media aritmetică (cu 2 zecimale) 4. Suma pătratelor elementelor 5. Suma elementelor pare 6. Media elementelor pozitive

Soluție pentru Sarcina 2:
#include <iostream>
#include <iomanip>
using namespace std;

int main() {
    int n;
    cin >> n;
    
    if (n == 0) {
        cout << "Vectorul este gol!" << endl;
        return 0;
    }
    
    const int MAX = 1000;
    int v[MAX];
    
    // 1. Citire elemente
    for (int i = 0; i < n; i++) {
        cin >> v[i];
    }
    
    // 2. Calcul suma
    long long suma = 0;
    for (int i = 0; i < n; i++) {
        suma += v[i];
    }
    
    // 3. Calcul produs (cu verificare overflow)
    long long produs = 1;
    bool overflow = false;
    for (int i = 0; i < n; i++) {
        // Verificăm dacă produsul va depăși limita
        if (produs > LLONG_MAX / v[i]) {
            overflow = true;
            break;
        }
        produs *= v[i];
    }
    
    // 4. Calcul media
    double media = (double)suma / n;
    
    // 5. Calcul suma pătratelor
    long long sumaPatrate = 0;
    for (int i = 0; i < n; i++) {
        sumaPatrate += (long long)v[i] * v[i];
    }
    
    // 6. Calcul suma elementelor pare
    long long sumaPare = 0;
    int numarPare = 0;
    for (int i = 0; i < n; i++) {
        if (v[i] % 2 == 0) {
            sumaPare += v[i];
            numarPare++;
        }
    }
    
    // 7. Calcul media elementelor pozitive
    long long sumaPozitive = 0;
    int numarPozitive = 0;
    for (int i = 0; i < n; i++) {
        if (v[i] > 0) {
            sumaPozitive += v[i];
            numarPozitive++;
        }
    }
    double mediaPozitive = (numarPozitive > 0) ? (double)sumaPozitive / numarPozitive : 0;
    
    // Afișare rezultate
    cout << fixed << setprecision(2);
    cout << "1. Suma elementelor: " << suma << endl;
    
    if (overflow) {
        cout << "2. Produsul: OVERFLOW (prea mare)" << endl;
    } else {
        cout << "2. Produsul elementelor: " << produs << endl;
    }
    
    cout << "3. Media aritmetica: " << media << endl;
    cout << "4. Suma patratelor: " << sumaPatrate << endl;
    cout << "5. Suma elementelor pare: " << sumaPare << endl;
    cout << "6. Media elementelor pozitive: " << mediaPozitive << endl;
    
    return 0;
}

Explicații importante:

  • Tipuri de date: Folosim long long pentru sume și produse mari, double pentru medii.
  • Verificare overflow: Pentru produs, verificăm dacă înmulțirea va depăși limita.
  • Operator ternar: (conditie ? val1 : val2) pentru calculul condițional al mediei.
  • Parcurgeri multiple: Fiecare calcul are propria buclă. Putem optimiza parcurgând o singură dată, dar pentru claritate este mai bine să separăm.
  • Teste recomandate:
  • n=5, valori: 1 2 3 4 5
  • n=4, valori: 10 -5 8 -3 (testează elemente negative)
  • n=3, valori: 1000 1000 1000 (testează overflow)

Descarcă toate exercițiile și soluțiile