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:

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:

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.

Pasn (la început)cc par?sn (la final)
132544da4325
23255nu432
3322da63
433nu60

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.

La BAC: după ce ai urmărit algoritmul o dată, formulează în cuvinte ce face („suma cifrelor pare”). Te ajută la punctul b), unde trebuie să găsești date de intrare pentru o valoare afișată dată, și îți confirmă rezultatul de la a).

Alte convenții de reținut

De reținut