Variabile si tipuri de date
Variabilele sunt locatii in memoria calculatorului care stocheaza date. Gandeste-te la o variabila ca la o cutie etichetata: cutia are un nume (eticheta), un tip (ce fel de lucruri poti pune in ea) si o valoare (ce se afla efectiv in cutie la un moment dat).
Tipuri de date principale:
| Tip | Descriere | Exemple |
|---|---|---|
| Integer (intreg) | Numere fara zecimale | 5, -3, 100, 0 |
| Real (float) | Numere cu zecimale | 3.14, -2.5, 0.001 |
| String (sir) | Text intre ghilimele | "Salut", "Ana", "123" |
| Boolean | Valori logice (adevarat/fals) | True, False |
Operatii cu variabile: Putem face operatii matematice (+, -, *, /) sau sa concatenam siruri de caractere. Important: impartirea intreaga (DIV) pastreaza doar partea intreaga, iar restul impartirii (MOD) returneaza restul. De exemplu: 17 DIV 5 = 3, iar 17 MOD 5 = 2.
💡 Sfat pentru examen:
Atentie la diferenta intre impartirea reala (/) si impartirea intreaga (DIV). La evaluarea nationala, intrebarile verifica frecvent daca stii sa faci aceasta distinctie!
Expresii si ordinea operatiilor
Expresiile sunt combinatii de variabile, constante si operatori care produc un rezultat. La fel ca in matematica, ordinea in care se executa operatiile conteaza enorm.
Ordinea operatiilor (prioritate):
- Parantezele ( ) - se evalueaza primele, de la cele mai interioare
- Inmultire *, Impartire /, DIV, MOD - se evalueaza de la stanga la dreapta
- Adunare +, Scadere - - se evalueaza de la stanga la dreapta
- Operatori de comparare (<, >, =, <=, >=, !=) - ultimii
Exemplu pas cu pas:
Expresia: (3 + 2) * 4 - 10 / 2
Pas 1: (3 + 2) = 5 (paranteza primul)
Pas 2: 5 * 4 = 20 (inmultire)
Pas 3: 10 / 2 = 5 (impartire)
Pas 4: 20 - 5 = 15 (scadere)
Rezultat: 15
Operatori logici:
SI (AND), SAU (OR), NU (NOT) sunt folositi pentru conditii complexe. Expresia
x > 5 SI x < 10
este adevarata doar cand x este intre 6 si 9.
⚠ Greseala frecventa:
Expresia
3 + 2 * 4
NU este 20! Inmultirea se face inainte de adunare, deci: 2*4=8, apoi 3+8=
11
. Daca vrei 20, scrie
(3 + 2) * 4
.
Structuri conditionale (DACA-ATUNCI-ALTFEL)
Structurile conditionale permit programului sa ia decizii. Programul verifica o conditie si executa instructiuni diferite in functie de rezultat - exact ca in viata reala: "DACA ploua, ATUNCI iau umbrela, ALTFEL merg fara".
Structura simpla (fara ALTFEL):
DACA conditie ATUNCI
instructiuni (se executa DOAR daca conditia e adevarata)
SFARSIT DACA
Structura completa (cu ALTFEL):
DACA conditie ATUNCI
instructiuni_A (conditia e adevarata)
ALTFEL
instructiuni_B (conditia e falsa)
SFARSIT DACA
Operatori de comparare:
-
=(egal),!=sau<>(diferit) -
<(mai mic),>(mai mare) -
<=(mai mic sau egal),>=(mai mare sau egal)
Structuri imbricate: Poti pune un DACA in interiorul altui DACA. De exemplu, pentru a clasifica un numar: "DACA x > 0 ATUNCI scrie pozitiv, ALTFEL DACA x = 0 ATUNCI scrie zero, ALTFEL scrie negativ".
💡 Exercitiu mental:
Daca x = 7 si y = 3, ce afiseaza: DACA x MOD y = 1 ATUNCI scrie "DA" ALTFEL scrie "NU"? Raspuns: 7 MOD 3 = 1, deci se afiseaza "DA".
Bucla PENTRU (FOR) - cand stim numarul de pasi
Bucla PENTRU se foloseste cand stim exact de cate ori vrem sa repetam o operatie. Este cea mai simpla structura repetitiva si cea mai frecvent intalnita la evaluarea nationala.
Sintaxa:
PENTRU contor DE LA valoare_initiala LA valoare_finala EXECUTA
instructiuni
SFARSIT PENTRU
Cum functioneaza:
- Contorul primeste valoarea initiala
- Se verifica daca contorul <= valoarea finala
- Daca da: se executa instructiunile, contorul creste cu 1, se revine la pasul 2
- Daca nu: bucla se termina
Exemplu concret - suma numerelor de la 1 la n:
citeste n
suma = 0
PENTRU i DE LA 1 LA n EXECUTA
suma = suma + i
SFARSIT PENTRU
scrie suma
Daca n = 4: suma = 0+1+2+3+4 = 10
⚠ Atentie la numarare:
PENTRU i DE LA 1 LA 5 se executa de 5 ori (valorile 1,2,3,4,5). PENTRU i DE LA 0 LA 4 se executa tot de 5 ori (valorile 0,1,2,3,4). Numarul de executii = valoare_finala - valoare_initiala + 1.
Bucla CAT TIMP (WHILE) - cand nu stim numarul de pasi
Bucla CAT TIMP se foloseste cand NU stim dinainte de cate ori se va repeta operatia. Repetarea continua atat timp cat o conditie ramane adevarata.
Sintaxa:
CAT TIMP conditie EXECUTA
instructiuni
SFARSIT CAT TIMP
Diferenta fata de PENTRU: Conditia se verifica INAINTE de fiecare executie. Daca conditia e falsa de la inceput, corpul buclei NU se executa niciodata (zero executii).
Exemplu - cifre unui numar:
citeste n // n = 1234
contor = 0
CAT TIMP n > 0 EXECUTA
contor = contor + 1
n = n DIV 10
SFARSIT CAT TIMP
scrie contor // afiseaza 4 (numarul are 4 cifre)
Trasarea pas cu pas: n=1234, contor=0 | n=123, contor=1 | n=12, contor=2 | n=1, contor=3 | n=0, contor=4 | 0>0 fals, STOP.
⚠ Bucla infinita:
Daca conditia nu devine niciodata falsa, bucla se executa la infinit si programul se blocheaza! Asigura-te ca in corpul buclei exista o instructiune care modifica variabilele din conditie.
Bucla REPETA...PANA CAND (DO...UNTIL)
Bucla REPETA...PANA CAND este similara cu CAT TIMP, dar cu o diferenta fundamentala: conditia se verifica DUPA executarea instructiunilor, nu inainte. Asta garanteaza ca instructiunile se executa cel putin o data .
Sintaxa:
REPETA
instructiuni
PANA CAND conditie_de_oprire
Comparatie intre cele 3 bucle:
| Bucla | Cand o folosesti | Executii minime |
|---|---|---|
| PENTRU | Stii exact cate repetitii | 0 (daca start > final) |
| CAT TIMP | Nu stii cate, verifici inainte | 0 (conditie falsa de la inceput) |
| REPETA | Nu stii cate, verifici dupa | 1 (mereu cel putin o data) |
Exemplu - citirea unui numar valid:
REPETA
scrie "Introdu un numar intre 1 si 100:"
citeste n
PANA CAND n >= 1 SI n <= 100
Bucla cere numarul pana cand utilizatorul introduce o valoare valida.
Tablouri (vectori) - colectii de date
Tablourile (numite si vectori) sunt structuri care stocheaza mai multe valori de acelasi tip sub un singur nume. Gandeste-te la un tablou ca la un dulap cu sertare numerotate: fiecare sertar are un numar (index) si contine o valoare.
Declarare si accesare:
numere = [10, 20, 30, 40, 50]
// Indexuri: 0 1 2 3 4
numere[0] = 10 (primul element)
numere[2] = 30 (al treilea element)
numere[4] = 50 (ultimul element)
Regula de aur: Indexarea incepe de la 0 ! Daca tabloul are n elemente, indexurile valide sunt de la 0 la n-1. Accesarea unui index care nu exista cauzeaza eroare!
Parcurgerea unui tablou cu PENTRU:
PENTRU i DE LA 0 LA lungime(tablou) - 1 EXECUTA
scrie tablou[i]
SFARSIT PENTRU
Operatii comune: citirea elementelor, afisarea, modificarea, adaugarea, stergerea, cautarea si sortarea.
Algoritmi de baza pe tablouri
Majoritatea algoritmilor pe tablouri urmeaza un tipar comun: parcurgi elementele cu o bucla si faci o operatie pe fiecare element. Hai sa vedem cei mai importanti:
1. Suma elementelor:
suma = 0
PENTRU i DE LA 0 LA n-1 EXECUTA
suma = suma + tablou[i]
scrie suma
2. Gasirea maximului:
max = tablou[0]
PENTRU i DE LA 1 LA n-1 EXECUTA
DACA tablou[i] > max ATUNCI max = tablou[i]
scrie max
3. Numararea elementelor care indeplinesc o conditie:
contor = 0
PENTRU i DE LA 0 LA n-1 EXECUTA
DACA tablou[i] MOD 2 = 0 ATUNCI contor = contor + 1
scrie contor // numarul elementelor pare
4. Media aritmetica: media = suma / n (unde n este numarul de elemente)
💡 Tipar universal:
Initializeaza o variabila de acumulare (suma=0, contor=0, max=tablou[0]), parcurge tabloul cu FOR, aplica operatia pe fiecare element. Acest tipar rezolva 90% din problemele cu tablouri!
Algoritmi pe numere - cifre si numere prime
Unii dintre cei mai frecventi algoritmi la evaluare lucreaza cu cifrele unui numar . Doua operatii sunt esentiale:
- n MOD 10 = ultima cifra a lui n (exemplu: 1234 MOD 10 = 4)
- n DIV 10 = numarul fara ultima cifra (exemplu: 1234 DIV 10 = 123)
Exemplu - suma cifrelor unui numar:
citeste n // n = 1234
suma = 0
CAT TIMP n > 0 EXECUTA
cifra = n MOD 10 // extrage ultima cifra
suma = suma + cifra
n = n DIV 10 // elimina ultima cifra
SFARSIT CAT TIMP
scrie suma // 1+2+3+4 = 10
Verificare numar prim:
Un numar este prim daca are exact 2 divizori: 1 si el insusi. Pentru a verifica, cautam un divizor intre 2 si radical din numar:
este_prim = true
DACA n < 2 ATUNCI este_prim = false
PENTRU d DE LA 2 LA radical(n) EXECUTA
DACA n MOD d = 0 ATUNCI este_prim = false
SFARSIT PENTRU
💡 De retinut pentru examen:
Algoritmii cu cifre (suma cifrelor, inversul unui numar, numarul de cifre) sunt printre cele mai frecvente intrebari la evaluarea nationala!
Recapitulare - Cum trasezi un algoritm
La evaluarea nationala vei primi frecvent cerinte de tipul "Ce afiseaza urmatorul algoritm?" sau "Ce valori primeste variabila x?". Pentru a raspunde corect, trebuie sa stii sa trasezi un algoritm - adica sa-l executi pas cu pas pe hartie.
Pasii pentru trasarea unui algoritm:
- Noteaza toate variabilele si valorile lor initiale
- Parcurge instructiunile una cate una, in ordine
- Actualizeaza valorile variabilelor dupa fiecare instructiune
- La bucle: verifica conditia, executa corpul, actualizeaza, verifica din nou
- Noteaza ce se afiseaza (instructiunile "scrie")
Exemplu complet de trasare:
x = 1; s = 0
CAT TIMP x <= 4 EXECUTA
s = s + x * x
x = x + 1
scrie s
| Pas | x | s | x<=4? |
|---|---|---|---|
| Init | 1 | 0 | DA |
| 1 | 2 | 1 (0+1*1) | DA |
| 2 | 3 | 5 (1+2*2) | DA |
| 3 | 4 | 14 (5+3*3) | DA |
| 4 | 5 | 30 (14+4*4) | NU |
Rezultat afisat: 30 (suma patratelor: 1+4+9+16 = 30)
🏆 Sfaturi pentru evaluarea nationala:
- Fa mereu tabele de trasare pe ciorna - nu incerca sa calculezi in minte
- Atentie la ordinea operatiilor (inmultirea inaintea adunarii)
- Verifica daca bucla include sau nu valoarea finala
- La CAT TIMP, verifica daca conditia e adevarata INAINTE de executie
Exercitii practice
Exercitiul 1 (Nivel minim) - Analiza si trasare algoritmi
Traseaza urmatoarele fragmente de cod si raspunde la intrebari:
- Ce afiseaza algoritmul: n=2468; s=0; CAT TIMP n>0 EXECUTA s=s+n MOD 10; n=n DIV 10; SFARSIT; scrie s. Explica pas cu pas.
- Cate executii are bucla: PENTRU i DE LA 3 LA 15 EXECUTA DACA i MOD 3 = 0 ATUNCI scrie i? Ce valori se afiseaza?
- Ce tip de bucla ai folosi pentru a citi numere de la utilizator pana cand introduce 0? De ce nu PENTRU?
- Scrie un algoritm care gaseste cel mai mic element par dintr-un tablou de numere intregi. Ce se intampla daca tabloul nu contine niciun element par?
- Care este diferenta intre a initializa max cu tablou[0] vs. a initializa max cu 0 cand cautam maximul? In ce caz da gresit max=0?
Raspunde numerotat: 1. ... 2. ... 3. ... 4. ... 5. ...
Exercitiul 2 (Nivel standard) - Mini-proiect: Colectie de algoritmi rezolvati
Creeaza un document Word cu rezolvarea completa a 5 probleme de algoritmi, fiecare cu trasare pas cu pas.
Cerinte obligatorii:
⭐ Bonus (pentru nota maxima):
- Adauga si varianta in C++ sau Python pentru fiecare algoritm
- Creeaza o sectiune cu "greseli frecvente" la fiecare problema
- Include o problema rezolvata de tip Evaluare Nationala (din modele de subiecte)
- Creeaza un "cheat sheet" de o pagina cu toti algoritmii importanti
Exercitiul 3 (Nivel performanta) - Compunere - Ghidul algoritmilor
Cerinta: Scrie o compunere de 15-20 randuri cu titlul "Ce am invatat despre algoritmi" in care explici unui coleg ce sunt algoritmii, ce structuri de control exista si cum se rezolva o problema algoritmica.
Indicii pentru structura:
- Incepe cu definitia: ce este un algoritm si de ce e important
- Prezinta cele 3 tipuri de structuri: secventiala, conditionala, repetitiva
- Explica diferentele intre cele 3 bucle (PENTRU, CAT TIMP, REPETA)
- Mentioneaza algoritmii frecventi: suma, maxim, cifre, numere prime
- Incheie cu sfaturi pentru trasarea algoritmilor la evaluare
Cuvinte cheie de folosit: algoritm, variabila, conditie, bucla, PENTRU, CAT TIMP, REPETA, tablou, index, MOD, DIV, trasare, evaluare nationala