Primul item din Subiectul II de la BAC informatică pornește întotdeauna de la un algoritm scris în pseudocod. Nu e un limbaj de programare propriu-zis, ci o notație în limba română, cu câteva simboluri fixe. Dacă le cunoști exact, poți urmări orice algoritm fără ezitări. Dacă le interpretezi „aproximativ”, pierzi puncte la toate cele patru cerințe ale itemului.
Atribuirea: ←
Săgeata înseamnă „primește valoarea”. s ← s + c se citește „s primește valoarea lui s plus c”. În pseudocodul de BAC, semnul = nu atribuie niciodată nimic — este doar comparație, ca în matematică. Așadar dacă x = 0 atunci întreabă dacă x este 0.
Operatorii de comparație sunt cei din matematică: =, ≠, <, ≤, >, ≥. Condițiile compuse folosesc cuvintele și, sau: dacă x > 0 și x % 2 = 0 atunci.
Citire și afișare
citește n înseamnă că n primește o valoare de la tastatură. De obicei, lângă variabilă apare o precizare între paranteze, de exemplu citește n (număr natural) — reține-o, pentru că îți spune ce valori pot apărea și ce tip de date alegi în C++.
scrie s afișează valoarea lui s. Mai multe valori se separă prin virgulă, iar textul sau caracterele apar între apostrofuri sau ghilimele: scrie a, ' ', b afișează a, un spațiu, apoi b.
Partea întreagă [x] și restul %
[x] înseamnă partea întreagă a lui x. Pe numere naturale, [a/b] este pur și simplu câtul împărțirii: [17/5] = 3, [7/10] = 0. a % b este restul împărțirii întregi: 17 % 5 = 2.
Combinate cu 10, cele două operații sunt baza algoritmilor pe cifre:
n % 10— ultima cifră a lui n (pentru 3254, cifra 4);[n/10]— n fără ultima cifră (pentru 3254, numărul 325);n % 100— ultimele două cifre;[n/100]— n fără ultimele două cifre.
Un detaliu de matematică: pentru numere negative, partea întreagă este cel mai mare întreg mai mic sau egal cu x, deci [−3.7] = −4. La BAC, însă, algoritmii lucrează aproape întotdeauna cu numere naturale, unde problema nu apare.
Structura alternativă: dacă … atunci … altfel
Funcționează exact cum te aștepți: dacă condiția e adevărată se execută ramura atunci, altfel ramura altfel (care poate lipsi).
dacă a > b atunci
max ← a
altfel
max ← b
Cele trei structuri repetitive
cât timp … execută
Condiția se verifică înainte de fiecare pas. Cât timp e adevărată, se execută corpul. Dacă e falsă de la început, corpul nu se execută deloc.
repetă … până când
Corpul se execută mai întâi, apoi se verifică condiția. Bucla se oprește când condiția devine adevărată. Consecință importantă: corpul se execută cel puțin o dată.
citește x (număr natural)
k ← 0
repetă
x ← [x/2]
k ← k + 1
până când x = 0
scrie k
Pentru x = 13: x devine 6, 3, 1, 0, iar k ajunge la 4 — exact numărul de cifre ale lui 13 în baza 2 (1101). Pentru x = 0 bucla se execută o dată, deci se afișează 1. Dacă ai fi scris aceeași idee cu cât timp x ≠ 0, pentru x = 0 s-ar fi afișat 0 — de aici vin multe capcane.
pentru i ← a, b, p execută
Variabila i ia pe rând valorile a, a+p, a+2p, … cât timp nu depășește b. Dacă pasul p lipsește, e 1. Cu pas negativ, i scade:
pentru i ← 1, 5 execută s ← s + i*i— i ia valorile 1, 2, 3, 4, 5; dacă s pornește de la 0, ajunge la 1+4+9+16+25 = 55;pentru i ← 10, 1, -3 execută scrie i, ' '— afișează10 7 4 1.
Cum arată blocurile în subiecte
În subiectele oficiale, corpul unei structuri nu e marcat prin acolade, ci printr-o linie verticală trasă în stânga instrucțiunilor, care se termină cu un mic pătrat ■. Tot ce se află în interiorul liniei aparține structurii. Un algoritm complet arată cam așa:
citește n (număr natural)
s ← 0
┌cât timp n > 0 execută
│ c ← n % 10
│ ┌dacă c % 2 = 0 atunci
│ │ s ← s + c
│ └■
│ n ← [n/10]
└■
scrie s
Aici dacă conține doar atribuirea s ← s + c, iar n ← [n/10] se execută la fiecare pas al buclei, indiferent de paritatea cifrei. Când un algoritm are trei-patru niveluri de imbricare, urmărește liniile cu creionul — e cel mai simplu mod de a nu încurca ce aparține fiecărei structuri.
Exemplu urmărit pas cu pas
Să vedem ce afișează algoritmul de mai sus pentru n = 3254.
| Pas | n (la început) | c | c par? | s | n (la final) |
|---|---|---|---|---|---|
| 1 | 3254 | 4 | da | 4 | 325 |
| 2 | 325 | 5 | nu | 4 | 32 |
| 3 | 32 | 2 | da | 6 | 3 |
| 4 | 3 | 3 | nu | 6 | 0 |
Când n devine 0, condiția n > 0 e falsă și bucla se oprește. Se afișează 6 — suma cifrelor pare ale numărului citit.
Alte convenții de reținut
- Uneori, două atribuiri scurte apar pe același rând, separate prin punct și virgulă:
x ← 0; y ← 1. - Valorile citite respectă întotdeauna restricțiile din paranteză — nu trebuie să tratezi date invalide.
- Variabilele nu se declară în pseudocod; tipul îl deduci din context când scrii programul C++.
De reținut
- ●
←este atribuire;=este comparație. - ●
[x]este partea întreagă,%este restul împărțirii întregi;[n/10]taie ultima cifră,n%10o extrage. - ●
cât timptestează condiția înainte și poate să nu execute nimic;repetă … până cândexecută cel puțin o dată și se oprește când condiția devine adevărată. - ●
pentru i←a,b,pmerge de la a la b cu pasul p (implicit 1); cu pas negativ numără descrescător. - ● Blocurile sunt delimitate prin linii verticale terminate cu ■ — urmărește-le ca să știi unde se termină o structură.