Ce vei învăța astăzi?
După această lecție vei cunoaște structura exactă a evaluării finale a modulului, vei rezolva exemple de probleme de examen și vei avea o strategie clară de lucru.
Structura evaluării finale
Definiție: Evaluarea finală a modulului are două subiecte. Subiectul I verifică teoria: definiții, complexități, pseudocod - 5 întrebări, în total 30 de puncte. Subiectul II conține două probleme rezolvate în Python: una de generare a unui șir și una de sortare - în total 70 de puncte.
Se punctează: corectitudinea algoritmului, respectarea formatului de ieșire (modul exact de afișare cerut de enunț: pe o linie, separate prin spații), gestionarea cazurilor limită (situațiile extreme ale datelor: n = 1, valori egale, listă deja sortată) și claritatea codului.
| Subiect | Conținut | Punctaj |
|---|---|---|
| Subiectul I | 5 întrebări de teorie: definiții, metode de sortare, complexități, pseudocod | 30 puncte |
| Subiectul II, problema 1 | Generare de șiruri: pătrate perfecte, pare, șir recurent, Fibonacci | 35 puncte |
| Subiectul II, problema 2 | Sortare: selecția minimului, bulele sau lista de frecvențe | 35 puncte |
| Total | Teorie + practică | 100 puncte |
Reține: nota se acordă după baremul (sistemul de punctaj oficial al testului) afișat în test; pentru fiecare problemă, jumătate din punctaj se obține pentru algoritm corect, iar jumătate pentru implementare și formatul de afișare.
Exemplu de problemă de examen: generare
Problemele de generare cer să produci termenii unui șir după o regulă. Exemplu de enunț: „Se citește n. Să se afișeze primele n numere pare, în ordine crescătoare, separate prin spații."
Rezolvarea urmează mereu același tipar: citire, buclă cu regula, afișare în formatul cerut.
Rezolvare ghidată: primele n numere pare
n = int(input())
for i in range(1, n + 1):
print(2 * i, end=" ")
Observă: termenul general al numerelor pare este 2 * i, iar end=" " ține valorile pe aceeași linie, exact cum cere enunțul.
Exemplu de problemă de examen: sortare
Problemele de sortare cer ordonarea unei liste. Exemplu de enunț: „Se citesc n note (valori între 1 și 10). Să se afișeze notele în ordine crescătoare."
Deoarece valorile sunt într-un interval mic, cea mai eficientă metodă este lista de frecvențe.
Rezolvare ghidată: note sortate cu frecvențe
n = int(input())
note = list(map(int, input().split()))
fr = [0] * 11
for x in note:
fr[x] = fr[x] + 1
for i in range(1, 11):
for _ in range(fr[i]):
print(i, end=" ")
Observă: lista de frecvențe este alegerea corectă pentru note de la 1 la 10: rapidă, simplă și fără interschimbări.
Exercițiu de completare
Completează despre evaluarea finală:
Subiectul I conține ______ întrebări de teorie, în valoare de 30 de puncte. Subiectul II conține ______ probleme de Python. Prima problemă cere ______ de șiruri, iar a doua ______. Totalul evaluării este de 100 de puncte.
Bancă de cuvinte:
Exercițiu de completare
Completează strategia de examen:
Înainte de a scrie codul, ______ enunțul integral de două ori. Verifică ______ și formatul de ieșire. Testează programul pe exemplul dat, apoi pe un caz ______. La final, citește codul încă o dată înainte de predare.
Bancă de cuvinte:
Test de înțelegere
Test rapid - pregătirea pentru evaluare:
1. Subiectul I al evaluării conține:
2. Prima problemă a Subiectului II cere:
3. Înainte de a scrie codul la o problemă de examen:
Aprofundare
Verificarea programelor este o tehnică ce se învață ca orice algoritm. Un program „corect pe exemplu" poate eșua la date diferite; de aceea, testezi întotdeauna cazurile limită înainte de a considera problema rezolvată.
- Valoarea minimă permisă: dacă restricțiile spun 1 <= n <= 1000, testează n = 1; buclele și listele trebuie să funcționeze fără erori la limita inferioară.
- Lista cu un singur element: sortarea cu n = 1 nu trebuie să iasă din limite; buclele cu range(n-1) devin goale, ceea ce este corect.
- Lista deja sortată: la bule, variabila schimbat permite oprirea devreme; la selecție, numărul de comparații rămâne același - ambele comportamente sunt corecte.
- Valori egale: elementele duplicate trebuie păstrate (selecția și frecvențele le grupează corect; bulele nu le „pierde").
- Formatul de ieșire: un spațiu în plus la final este acceptat în majoritatea verificărilor automate, dar o linie lipsă sau un \n în plus poate costa puncte - citește cerința.
- Rezolvarea pe hârtie întâi: scrie pașii și rezultatul așteptat pentru exemplul dat; programul trebuie să producă exact acel rezultat.
Model examen - Punctajele echipei
Enunț:
Cerință: Se citesc n punctaje obținute de echipa unei școli la concursuri (valori între 0 și 100). Să se afișeze punctajele în ordine descrescătoare, separate prin spații, folosind lista de frecvențe.
Date de intrare:
Programul citește de la tastatură numărul natural n, apoi n numere naturale, separate prin spații.
Date de ieșire:
Programul va afișa pe o singură linie punctajele în ordine descrescătoare, separate prin spații.
Restricții și precizări:
1 <= n <= 100, iar punctajele sunt numere naturale între 0 și 100.
Exemplu:
Intrare:
6 45 90 45 72 90 60
Ieșire:
90 90 72 60 45 45
Cum gândim soluția:
- Citim n și punctajele
- Construim lista de frecvențe cu 101 elemente
- Parcurgem pozițiile de la 100 în jos și afișăm fiecare valoare de câte ori apare
Scrie soluția în Python:
Soluție corectă:
n = int(input())
punctaje = list(map(int, input().split()))
fr = [0] * 101
for x in punctaje:
fr[x] = fr[x] + 1
for i in range(100, -1, -1):
for _ in range(fr[i]):
print(i, end=" ")
Ce învățăm: frecvențele parcurse în sens invers produc clasamentul direct; poziția 0 este inclusă pentru punctajul minim posibil.
Model examen - Șirul recurent a(n) = a(n-1) + n
Enunț:
Cerință: Se citește numărul natural n. Să se afișeze primii n termeni ai șirului definit prin a(1) = 1 și a(k) = a(k-1) + k, pentru k > 1.
Date de intrare:
Programul citește de la tastatură numărul natural n.
Date de ieșire:
Programul va afișa pe o singură linie primii n termeni ai șirului, separați prin spații.
Restricții și precizări:
1 <= n <= 1000, iar termenii șirului sunt numere naturale.
Exemplu:
Intrare:
5
Ieșire:
1 3 6 10 15
Cum gândim soluția:
- Inițializăm termenul cu a = 1 și îl afișăm
- Pentru k de la 2 la n, actualizăm a = a + k și afișăm
- Afișăm cu
end=" "pentru a rămâne pe aceeași linie
Scrie soluția în Python:
Soluție corectă:
n = int(input())
a = 1
print(a, end=" ")
for k in range(2, n + 1):
a = a + k
print(a, end=" ")
Ce învățăm: o recurență de adunare se generează cu o singură variabilă actualizată în buclă - primul termen se afișează separat.
Exercițiul Practic: Simulare de evaluare
Sarcini de lucru
Simulează condițiile de examen: rezolvă întrebările de teorie și problemele de programare fără a te uita la soluții.
Sarcina 1: Subiectul I - teorie
Cerință: Răspunde în scris la următoarele întrebări: 1) Ce este generarea sistematică a unei secvențe? 2) Care este regula șirului lui Fibonacci? 3) Ce complexitate are selecția minimului? 4) Când folosim lista de frecvențe? 5) Care este diferența dintre metoda bulelor și selecția minimului?
Răspunsuri model:
- 1. Generarea sistematică înseamnă producerea termenilor unei secvențe unul câte unul, după o regulă clară, de obicei cu o buclă.
- 2. F1 = 1, F2 = 1 și Fn = F(n-1) + F(n-2) pentru n > 2.
- 3. O(n): aproximativ n(n-1)/2 comparații.
- 4. Când valorile sunt numere întregi dintr-un interval mic (note, punctaje).
- 5. Bulele compară vecini și face multe interschimbări; selecția caută minimul și face cel mult o interschimbare pe pas.
Sarcina 2: Subiectul II - problemă completă
Cerință: Scrie un program complet pentru următoarea problemă de examen: se citește n, apoi n note (1-10). Să se afișeze pe o linie notele sortate crescător, iar pe a doua linie media notelor cu o zecimală.
Soluție:
n = int(input())
note = list(map(int, input().split()))
fr = [0] * 11
for x in note:
fr[x] = fr[x] + 1
for i in range(1, 11):
for _ in range(fr[i]):
print(i, end=" ")
print()
media = sum(note) / n
print(f"{media:.1f}")
Verifică: pentru notele 7 5 9 5 8 7 10 5, linia sortată este 5 5 5 7 7 8 9 10, iar media este 7.0.