„Scrieți valoarea afișată dacă se citește numărul…” — așa începe aproape întotdeauna itemul II.1a de la BAC informatică. Imediat după vine II.1b: „Scrieți două numere care pot fi citite astfel încât să se afișeze…”. Ambele se bazează pe aceeași abilitate: să urmărești execuția unui algoritm în pseudocod fără să greșești niciun pas. Cea mai sigură tehnică este metoda tabelului.
Metoda tabelului, pe scurt
- Fă un tabel cu o coloană pentru fiecare variabilă care se modifică, plus o coloană pentru condițiile importante (de exemplu, „c < x?”).
- Scrie pe primul rând valorile de după instrucțiunile dinaintea buclei.
- Pentru fiecare execuție a corpului buclei, adaugă un rând nou. Completează coloanele în ordinea în care se execută instrucțiunile.
- Înainte de fiecare rând nou, verifică explicit condiția buclei.
- La final, scrie ce se afișează — exact în formatul din algoritm.
Pare lent, dar e mai rapid decât să refaci totul pentru că ai pierdut o valoare pe drum. Și te scapă de cea mai periculoasă greșeală: calculul „din cap” care pare corect.
Exemplu complet: punctul a)
citește n (număr natural, n ≥ 10)
k ← 0
x ← n % 10
n ← [n/10]
cât timp n > 0 execută
c ← n % 10
dacă c < x atunci
k ← k + 1
x ← c
n ← [n/10]
scrie k
Cerința: ce se afișează pentru n = 52817?
Înainte de buclă: k = 0, x = 7 (ultima cifră), n = 5281. Acum tabelul:
| Pas | n (început) | c | c < x? | k | x (nou) | n (final) |
|---|---|---|---|---|---|---|
| — | — | — | — | 0 | 7 | 5281 |
| 1 | 5281 | 1 | 1 < 7 da | 1 | 1 | 528 |
| 2 | 528 | 8 | 8 < 1 nu | 1 | 8 | 52 |
| 3 | 52 | 2 | 2 < 8 da | 2 | 2 | 5 |
| 4 | 5 | 5 | 5 < 2 nu | 2 | 5 | 0 |
După pasul 4, n = 0, condiția n > 0 e falsă și bucla se oprește. Se afișează 2.
Observă coloana „c < x?”: scrisă explicit, cu ambele valori, îți arată imediat dacă ai comparat ce trebuia. Majoritatea greșelilor de urmărire apar exact în condiții, nu în calcule.
Pasul intermediar: ce face algoritmul?
Înainte de punctul b), oprește-te și formulează în cuvinte ce ai văzut. Variabila x reține mereu cifra din dreapta lui c. Așadar algoritmul compară fiecare cifră cu vecina ei din dreapta și numără de câte ori cifra din stânga e strict mai mică. Verificare pe 52817, citit de la stânga: (5, 2) nu, (2, 8) da, (8, 1) nu, (1, 7) da — două perechi. Rezultatul confirmă tabelul.
Pentru mulți algoritmi de BAC, scopul se recunoaște repede: suma cifrelor, oglinditul, numărul de divizori, cifra maximă. Dacă nu se vede din prima, mai urmărește-l pe un număr mic, de exemplu 123 sau 321, și compară rezultatele.
Punctul b): lucrul invers
Să zicem că cerința este: „Scrieți cel mai mic și cel mai mare număr de patru cifre care pot fi citite astfel încât, în urma executării algoritmului, să se afișeze 3.”
Încercările la întâmplare durează mult. Folosește proprietatea găsită: un număr de patru cifre are exact trei perechi de cifre vecine. Ca k să fie 3, toate perechile trebuie să respecte „stânga < dreapta”, adică cifrele trebuie să fie strict crescătoare de la stânga la dreapta.
- Cel mai mic astfel de număr: prima cifră nu poate fi 0, deci pornim de la 1 → 1234.
- Cel mai mare: ultima cifră e cel mult 9, deci → 6789.
Verifică rapid cu algoritmul: pentru 1234, perechile (1,2), (2,3), (3,4) sunt toate crescătoare, deci k = 3. Atenție la cifrele egale: pentru 1123, perechea (1, 1) nu respectă condiția strictă, iar algoritmul afișează 2, nu 3.
Variantă de cerință: „Câte numere din intervalul [10, 99] pot fi citite astfel încât să se afișeze 1?” Un număr de două cifre are o singură pereche, deci trebuie ca prima cifră să fie strict mai mică decât a doua. Prima cifră a poate fi de la 1 la 8, iar a doua mai mare decât ea: pentru a = 1 sunt 8 posibilități (2…9), pentru a = 2 sunt 7, …, pentru a = 8 una singură. Total: 8 + 7 + … + 1 = 36 de numere.
Capcane frecvente la urmărire
- Ordinea instrucțiunilor din corp. Dacă
x ← car fi fost scris înainte dedacă, condițiac < xar fi fost mereu falsă. Execută instrucțiunile exact în ordinea din algoritm. - Instrucțiunile dinaintea buclei. Aici, prima cifră a lui n e „consumată” înainte de
cât timp. Dacă o uiți, tot tabelul e decalat. repetă … până când. Condiția se verifică după corp, iar bucla se oprește când e adevărată. Execută mereu corpul măcar o dată.- Cifra 0. Numerele ca 1005 sau 900 produc cifre 0 care schimbă comparațiile și produsele. Enunțurile le aleg intenționat.
- Formatul de afișare. Dacă algoritmul scrie valori în buclă, scrie-le pe toate, în ordinea afișării, cu separatorii din algoritm.
Cum exersezi
Ia variante oficiale din anii trecuți și rezolvă doar itemii II.1a și II.1b, cronometrat — ținta este 8–10 minute pentru amândoi. După câteva zeci de algoritmi, vei observa că tiparele se repetă: prelucrarea cifrelor, divizori, numărări în intervale. Atunci vei recunoaște scopul algoritmului încă de la prima citire, iar tabelul va deveni doar verificarea.
De reținut
- ● O coloană pentru fiecare variabilă, un rând pentru fiecare pas al buclei; scrie valorile, nu le ține minte.
- ● Notează explicit rezultatul fiecărei condiții (da/nu) — acolo apar cele mai multe greșeli.
- ● După urmărire, formulează în cuvinte ce face algoritmul; te ajută la punctul b) și verifică punctul a).
- ● La punctul b), lucrează invers de la proprietate, nu prin încercări la întâmplare.
- ● Atenție la comparațiile stricte (< față de ≤) și la cifrele egale sau la cifra 0.