Școala Româno-Britanică
Modulul 5 Clasa a X-a | C++

Ora 14: Evaluare finală sumativă

Ce vei învăța astăzi: Structura evaluării finale sumative (evaluarea care verifică toate competențele clasei a X-a), baremul de notare (sistemul de punctaj pe pași logici) și strategia de rezolvare a unei probleme integrate (problemă care combină mai multe module)

Rezultat practic: Rezolvi o problemă integrată completă, de la enunț la programul C++ final, conform baremului (Competența 6.5).

Competența 6.5 Săptămâna 31

Înainte de a începe

De ce contează? Evaluarea finală sumativă încheie clasa a X-a și acoperă toate competențele, iar strategia de rezolvare și baremul îți arată exact de unde se iau punctele.

Ce știi deja?

Din ora 13, poți enumera cele cinci module ale clasei a X-a? Poți rescrie din memorie cazurile de bază ale funcțiilor recursive esențiale?

Ideea-cheie: Baremul punctează separat antetul funcției (prima linie a funcției, cu tipul, numele și parametrii), cazul de bază, pasul recursiv și integrarea în main, deci scrierea corectă a oricărei componente aduce puncte.
SINTEZĂ TEORETICĂ ȘI EXEMPLE GHIDATE

Ce vei învăța astăzi?

După această lecție vei cunoaște structura evaluării finale sumative, vei înțelege baremul de notare și vei rezolva o problemă integrată completă cu funcții recursive în C++.

Structura evaluării finale
Baremul de notare
Problema integrată rezolvată
Strategia de rezolvare

Structura evaluării finale sumative

Definiție: Evaluarea finală sumativă verifică toate competențele clasei a X-a. Este organizată pe două subiecte: Subiectul I (teorie, 30 de puncte) și Subiectul II (trei probleme C++ integrate, 70 de puncte), la care se adaugă 10 puncte din oficiu. Nota finală se acordă după un barem explicit, pe itemi.

Subiect Conținut Punctaj
Subiectul I Cinci întrebări de teorie: definiții, caz de bază, stivă, recurențe 30 de puncte
Subiectul II - Problema 1 Funcție recursivă pe un număr (factorial, suma cifrelor, CMMDC) 20 de puncte
Subiectul II - Problema 2 Funcție recursivă pe un vector sau șir de caractere 20 de puncte
Subiectul II - Problema 3 Problemă integrată: matrice sau proiect cu meniu, cu mai multe funcții recursive 30 de puncte
Oficiu Punctaj acordat pentru parcurgerea completă a lucrării 10 puncte

Analogia: cursa cu ștafetă

Evaluarea finală este ca o cursă cu ștafetă în patru etape: întâi teoria (etapa ușoară, puncte sigure), apoi funcțiile pe numere, apoi funcțiile pe vectori și șiruri, și la final problema integrată. Fiecare etapă predă „ștafeta" celei următoare: cunoștințele de la teorie se folosesc la funcții, iar funcțiile se integrează în problema finală.

Problema integrată rezolvată: meniu cu prelucrări recursive

Cerință: Se citește un vector cu n elemente. Să se afișeze suma elementelor pare (funcție recursivă) și cel mai mare element (funcție recursivă), folosind un program cu două funcții recursive și apeluri din main, stil BAC.

Algoritm problema integrata: citește n și vectorul v afișează suma_pare(v, 0, n) afișează maxim(v, 0, n) Algoritm suma_pare(v, i, n): dacă i == n atunci returnează 0 s = suma_pare(v, i + 1, n) dacă v[i] este par atunci s = s + v[i] returnează s Algoritm maxim(v, i, n): dacă i == n - 1 atunci returnează v[i] m = maxim(v, i + 1, n) dacă v[i] > m atunci m = v[i] returnează m
Program C++ - problemă integrată (suma parelor + maximul, recursive)
#include <iostream>
using namespace std;

// Pasul 1: suma elementelor pare, recursiv
int suma_pare(int v[], int i, int n)
{
    // Pasul 2: cazul de baza
    if (i == n)
        return 0;
    // Pasul 3: calculam recursiv suma pentru restul vectorului
    int s = suma_pare(v, i + 1, n);
    // Pasul 4: daca elementul curent este par, il adaugam la suma
    if (v[i] % 2 == 0)
        s = s + v[i];
    return s;
}

// Pasul 5: maximul elementelor, recursiv
int maxim(int v[], int i, int n)
{
    // Pasul 6: cazul de baza - un singur element
    if (i == n - 1)
        return v[i];
    // Pasul 7: maximul pentru restul vectorului
    int m = maxim(v, i + 1, n);
    // Pasul 8: comparam cu elementul curent
    if (v[i] > m)
        m = v[i];
    return m;
}

int main()
{
    int n, v[1001];
    // Pasul 9: citim vectorul
    cin >> n;
    for (int i = 0; i < n; i++)
        cin >> v[i];
    // Pasul 10: afisam rezultatele
    cout << "Suma parelor = " << suma_pare(v, 0, n) << endl;
    cout << "Maximul = " << maxim(v, 0, n);
    return 0;
}

Verificare pe exemplu

Pentru n = 4 și v = {1, 4, 3, 8}:

  • Suma parelor = 4 + 8 = 12
  • Maximul = 8

Baremul și strategia de rezolvare

Baremul: punctajul se acordă pe pași logici: definirea corectă a funcției, cazul de bază, pasul recursiv, citirea datelor, apelul corect și afișarea rezultatului. Un caz de bază corect valorează puncte chiar dacă restul funcției are mici greșeli.

Cum obții punctaj maxim?

  • Scrie întâi #include <iostream>, using namespace std;, int main() și return 0; - sintaxa BAC completă.
  • Definițiile și cazurile de bază se punctează separat: scrie-le întotdeauna.
  • La problema integrată, rezolvă fiecare funcție separat, apoi le combină în main.
  • Verifică pe exemplul din enunț înainte de a trece la următorul item.

De reținut

  • Punctele din oficiu se acordă pentru parcurgerea completă a lucrării.
  • O funcție corectă parțial (caz de bază + pas recursiv greșit) primește puncte parțiale.
  • Erorile de compilare elimină punctele pentru acel item: verifică sintaxa cu atenție.
  • Nu lăsa itemuri neîncercate: orice pas scris corect aduce puncte.

Exercițiu de completare

Completează enunțul despre evaluarea finală cu cuvintele potrivite:

Evaluarea finală sumativă are Subiectul I (teorie, 30 de ______) și Subiectul II (trei probleme, 70 de puncte). Punctajul se acordă conform ______, pe pași logici. Sintaxa BAC include ______, using namespace std, int main și return 0. O funcție cu caz de bază corect primește puncte ______.

Bancă de cuvinte:
puncte baremului #include <iostream> parțiale

Exercițiu de completare

Completează funcțiile problemei integrate:
int suma_pare(int v[], int i, int n)
{
    if (______)
        return 0;
    int s = suma_pare(v, ______, n);
    if (v[i] % 2 == 0)
        ______;
    return s;
}
Bancă de cuvinte:
i == n i + 1 s = s + v[i]

Test de înțelegere

Test rapid - evaluare finală:

1. Punctajul Subiectului I (teorie) este:

2. Cazul de bază al funcției suma_pare este:

3. Pentru v = {1, 4, 3, 8}, suma parelor este:

Ai grijă la: pierderea punctelor din greșeli mici - omiterea #include, lipsa return 0, un caz de bază greșit sau parametri în ordine greșită pot elimina punctaje întregi la un item.

Aprofundare

Baremul detaliat al unei funcții recursive. La corectare, punctele se împart astfel: antetul funcției (tip de return corect, parametri corecți) valorează aproximativ un sfert din punctaj; cazul de bază un sfert; pasul recursiv un sfert; iar integrarea în main (citire, apel, afișare) ultimul sfert. Scrierea corectă a oricărei componente aduce punctele ei, independent de restul.

Cazuri limită verificate în barem. Evaluatorii testează valorile extreme: n = 0, n = 1, vectori cu toate elementele impare, matrice 1 × 1. O funcție care tratează corect aceste cazuri primește punctaje complete chiar dacă nu este optimă din punct de vedere al vitezei.

Strategia de gestionare a timpului în evaluare. Alocă prioritar timp pentru Subiectul I (răspunsuri scurte, puncte sigure), apoi pentru funcțiile simple și abia la final pentru problema integrată. Rămâne timp de verificare: compilează mental fiecare funcție și urmărește execuția pe exemplul din enunț.

Prevenirea pierderilor de puncte. Cele mai frecvente pierderi vin din: omiterea #include sau a return 0;, caz de bază greșit, parametri transmiși în ordine greșită și lipsa tratării cazului n = 0. Un checklist de cinci puncte înainte de predare elimină aceste pierderi.

APLICARE ȘI REZOLVARE DE PROBLEME

PbInfo - Suma elementelor pare dintr-un vector

Enunț:

Cerință: Se citesc n și n numere naturale. Să se afișeze suma elementelor pare, folosind o funcție recursivă de parcurgere a vectorului.

Date de intrare:

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

Date de ieșire:

Programul va afișa pe ecran suma elementelor pare.

Restricții și precizări:

1 ≤ n ≤ 1000, elemente numere naturale.

Exemplu:

Intrare:

4
1 4 3 8

Ieșire:

12
Cum gândim soluția:
  1. Definim funcția suma_pare(v, i, n)
  2. Cazul de bază: dacă i == n, întoarcem 0
  3. Calculăm recursiv suma pentru restul vectorului
  4. Dacă v[i] este par, îl adăugăm la sumă
Scrie soluția în C++:
Soluție corectă:
#include <iostream>
using namespace std;

int suma_pare(int v[], int i, int n)
{
    if (i == n)
        return 0;
    int s = suma_pare(v, i + 1, n);
    if (v[i] % 2 == 0)
        s = s + v[i];
    return s;
}

int main()
{
    int n, v[1001];
    cin >> n;
    for (int i = 0; i < n; i++)
        cin >> v[i];
    cout << suma_pare(v, 0, n);
    return 0;
}

Ce învățăm: parcurgerea recursivă cu filtru: suma se construiește la întoarcerea din apeluri, adăugând doar elementele pare.

PbInfo - Maximul dintr-un vector, recursiv

Enunț:

Cerință: Se citesc n și n numere naturale. Să se afișeze valoarea maximă din vector, folosind o funcție recursivă.

Date de intrare:

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

Date de ieșire:

Programul va afișa pe ecran valoarea maximă din vector.

Restricții și precizări:

1 ≤ n ≤ 1000, elemente numere naturale mai mici decât 1.000.000.

Exemplu:

Intrare:

4
1 7 3 5

Ieșire:

7
Cum gândim soluția:
  1. Definim funcția maxim(v, i, n)
  2. Cazul de bază: dacă i == n - 1, întoarcem v[i]
  3. Calculăm recursiv maximul pentru restul vectorului
  4. Întoarcem cea mai mare valoare dintre v[i] și maximul restului
Scrie soluția în C++:
Soluție corectă:
#include <iostream>
using namespace std;

int maxim(int v[], int i, int n)
{
    if (i == n - 1)
        return v[i];
    int m = maxim(v, i + 1, n);
    if (v[i] > m)
        m = v[i];
    return m;
}

int main()
{
    int n, v[1001];
    cin >> n;
    for (int i = 0; i < n; i++)
        cin >> v[i];
    cout << maxim(v, 0, n);
    return 0;
}

Ce învățăm: cazul de bază este un singur element (i == n - 1); la fiecare întoarcere comparăm elementul curent cu maximul restului.

EXERCIȚII PRACTICE

Exercițiul Practic: Antrenament pentru evaluarea finală

Sarcini de lucru

Rezolvă sarcinile următoare ca antrenament complet pentru evaluarea finală sumativă

Sarcina 1: Numărul de cifre pare ale unui număr

Cerință: Scrie un program C++ care afișează numărul de cifre pare ale unui număr natural n, folosind o funcție recursivă. Pentru n = 1234, cifrele pare sunt 2 și 4, deci rezultatul este 2.

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

int cifre_pare(int n)
{
    if (n == 0)
        return 0;
    int c = cifre_pare(n / 10);
    if (n % 2 == 0)
        c++;
    return c;
}

int main()
{
    int n;
    cin >> n;
    cout << cifre_pare(n);
    return 0;
}

Verifică: cifra curentă este ultima cifră a lui n (n % 10); paritatea ei este n % 2 == 0.

Sarcina 2: Verificarea sortării unui vector recursiv

Cerință: Scrie un program C++ care verifică dacă un vector este sortat crescător, folosind o funcție recursivă. Pentru v = {1, 2, 3, 4} răspunsul este DA, pentru v = {1, 3, 2, 4} este NU.

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

int sortat(int v[], int i, int n)
{
    if (i == n - 1)
        return 1;
    if (v[i] > v[i + 1])
        return 0;
    return sortat(v, i + 1, n);
}

int main()
{
    int n, v[1001];
    cin >> n;
    for (int i = 0; i < n; i++)
        cin >> v[i];
    if (sortat(v, 0, n))
        cout << "DA";
    else
        cout << "NU";
    return 0;
}

Verifică: dacă orice pereche vecină este în ordine, vectorul este sortat; altfel funcția întoarce imediat 0.

Scrie pe caiet

Titlul lecției

Evaluare finală sumativă. A paisprezecea lecție din Modulul 5 te pregătește pentru evaluarea care încheie clasa a X-a.

Definiția lecției

Evaluarea finală sumativă verifică toate competențele clasei a X-a și este organizată pe două subiecte: Subiectul I cu teorie, de 30 de puncte, și Subiectul II cu trei probleme C++ integrate, de 70 de puncte, la care se adaugă 10 puncte din oficiu. Baremul punctează separat antetul funcției, cazul de bază, pasul recursiv și integrarea în main. O funcție corectă parțial primește puncte parțiale, iar un caz de bază corect aduce puncte chiar dacă restul are mici greșeli. Strategia de rezolvare recomandă scrierea întâi a sintaxei BAC complete, apoi a cazului de bază, apoi a pasului recursiv. Nu lăsa itemuri neîncercate: orice pas scris corect aduce puncte.

Definiții esențiale

Algoritmul cheie - pseudocod

Algoritm suma_pare(v, i, n): dacă i == n atunci returnează 0 s = suma_pare(v, i + 1, n) dacă v[i] este par atunci s = s + v[i] returnează s

Algoritmul cheie - cod C++

Program C++ - problemă integrată (suma parelor, recursiv)
#include <iostream>
using namespace std;

int suma_pare(int v[], int i, int n)
{
    if (i == n)
        return 0;
    int s = suma_pare(v, i + 1, n);
    if (v[i] % 2 == 0)
        s = s + v[i];
    return s;
}

int main()
{
    int n, v[1001];
    cin >> n;
    for (int i = 0; i < n; i++)
        cin >> v[i];
    cout << suma_pare(v, 0, n);
    return 0;
}

Greșeli comune de evitat

Exemplu practic

Scenariu real: la problema integrată din evaluare, pentru v = {1, 4, 3, 8} programul afișează Suma parelor = 12 și Maximul = 8. Funcția pentru suma parelor:

Program C++ - suma parelor (exemplu practic)
int suma_pare(int v[], int i, int n)
{
    if (i == n)
        return 0;
    int s = suma_pare(v, i + 1, n);
    if (v[i] % 2 == 0)
        s = s + v[i];
    return s;
}

Apelul suma_pare(v, 0, 4) pentru v = {1, 4, 3, 8} întoarce 12.

Sfaturi practice și trucuri