Cu doar două superputeri — „dacă…atunci" și „repetă cât timp" — poți construi orice algoritm din lume. Serios: orice. Astăzi le stăpânești pe amândouă.
Programul ajunge la o răscruce, pune o întrebare cu răspuns DA/NU și alege drumul. Rulează-l pas cu pas!
| nota | — |
| Relațional | Înțeles |
|---|---|
| < > <= >= | comparații obișnuite |
| == | egal? (DOUĂ semne egal!) |
| != | diferit? |
| Logic (C++ / Python) | Înțeles |
|---|---|
| && / and | ambele condiții adevărate |
| || / or | măcar una adevărată |
| ! / not | inversează valoarea de adevăr |
Când drumurile sunt mai mult de două, legăm deciziile în lanț: prima condiție adevărată câștigă, restul nici nu se mai verifică.
| v | — |
Când compari aceeași variabilă cu mai multe valori exacte, ambele limbaje au o poartă cu mai multe ieșiri.
switch-ul „deschide" exact ușița potrivită — și linia de cod corespunzătoare se aprinde în ambele limbaje
⚙ C++ — switch
🐍 Python — match (3.10+)
După if / else, else-if și switch (secțiunile 1–3), consolidează pe aceste probleme din Lecția 10.1.
Regula sună ciudat: divizibil cu 4, dar nu cu 100 — sau divizibil cu 400. De unde vine? Din astronomie!
Un an real (o rotație completă în jurul Soarelui) durează 365,2422 zile — nu fix 365. Dacă am ignora restul, calendarul ar „aluneca": după câteva sute de ani, Crăciunul ar pica vara. Repararea s-a făcut în două etape:
| Cât durează anul real | 365,2422 zile |
| Eroarea lui Cezar: 365,25 − 365,2422 | +0,0078 zile/an → +3,12 zile în 400 de ani |
| Corecția lui Grigore: scoate 3 bisecți → (400 · 365 + 97) / 400 | 365,2425 zile/an |
| Eroarea rămasă: 365,2425 − 365,2422 | 0,0003 zile/an ≈ 26 s/an |
Trei unelte pentru aceeași treabă — diferă doar când se verifică condiția și cine numără.
Verifică înainte de fiecare pas. Poate să nu execute niciodată corpul.
Folosește-l când nu știi de câte ori repeți: „cât timp mai am cifre…"
Verifică după. Corpul se execută garantat măcar o dată.
Perfect pentru meniuri și validări. (Nu există în Python — se simulează cu while True + break.)
Contor integrat: inițializare, condiție, pas — toate pe o linie.
Folosește-l când știi numărul de repetări: „pentru fiecare i de la 1 la n".
| n | — |
Același program, scris în două feluri. Cele patru piese sunt aceleași, doar mutate.
cu for
cu while
Algoritmul-rege al capitolului. Privește cum se rotește bucla în schemă, în cod și în tabelul de urmărire — simultan.
| n | — |
| i | — |
| s | — |
| verificare i ≤ n | i | s |
|---|
Aproape fiecare problemă cu bucle începe la fel: ori citești până apare o valoare-semnal, ori ți se spune dinainte câte numere vin. Învață-le pe amândouă ca tipare — le vei scrie de sute de ori.
Nu știi dinainte câte numere vin — deci while. Zero e doar semnalul de oprire: nu se adună. Rulează-l pas cu pas și urmărește, în stânga, ce număr din fișier se consumă la fiecare pas.
Aici știi de câte ori repeți — deci for. Numărul n se citește o singură dată, în afara buclei. În fișier, n e pe prima linie și numerele pe a doua — exact cum apare la majoritatea problemelor.
După while, do-while și for (secțiunile 5–7), antrenează-te pe aceste probleme din Lecția 10.2.
Două programe pot da același răspuns muncind foarte diferit. Numără pașii cu noi.
Aceeași problemă — suma numerelor de la 1 la n — rezolvată în două feluri. Pune un n mare (încearcă 1000000) și apasă „Compară".
varianta 1 — cu buclă
varianta 2 — cu formula lui Gauss
Două cuvinte-cheie care schimbă cursul unei bucle: unul o oprește de tot, celălalt sare peste pasul curent.
Fără break ai parcurge tot șirul degeaba; cu break te oprești imediat ce l-ai găsit.
n e prima valoare din fișierul de intrare — câte numere urmează. Crește-l și în șir apare un număr nou; scade-l și ultimul dispare. Șirul are mereu exact n valori, exact ca în datele unei probleme.
| n | — |
| x | — |
| i | — |
| a | — |
| gasit | — |
| i | a citit | a = x ? |
|---|
Când întâlnești un număr impar, continue te trimite direct la următorul, fără să-l aduni.
n e prima valoare din fișierul de intrare — câte numere urmează. Crește-l și în șir apare un număr nou; scade-l și ultimul dispare. Șirul are mereu exact n valori, exact ca în datele unei probleme.
| n | — |
| i | — |
| a | — |
| suma | — |
| a citit | impar? | suma |
|---|
Cinci programe, cinci erori pe care le vezi în fiecare an la teze și la BAC. Click pe linia vinovată din fiecare.
Zece întrebări în stil BAC, fiecare construită pe o greșeală clasică: împărțire întreagă, punct-și-virgulă rătăcit, off-by-one, = în loc de ==, post-incrementare. Fă tabelul de urmărire pe hârtie înainte să alegi — variantele sunt amestecate la fiecare încărcare.
Ideile-temelie ale întregului an.
Toate cele 44 de probleme linkate mai sus, rezolvate în C++ și Python, cu aceleași metode predate în lecție. Zonă pentru profesor.
Rezolvările sunt pentru profesor. Elevii au mai sus enunțurile și toate uneltele de care au nevoie.