Pe scurt
Pseudocodul descrie un algoritm fără să îl lege de sintaxa unui limbaj de programare. Folosește instrucțiuni pentru citire, atribuire, afișare, alegere și repetare. Un enunț în pseudocod trebuie citit după convențiile lui: „” schimbă valoarea lui , pe când „” ca egalitate matematică nu ar fi adevărată. Un tabel de urmărire arată valoarea fiecărei variabile după pasul executat.
| Pseudocod | C++ | Observații |
|---|---|---|
citește a, b |
cin >> a >> b; |
|
scrie s, ' ', k |
cout << s << ' ' << k; |
|
x ← x + 1 |
x = x + 1; |
săgeata înseamnă atribuire |
[a / b], a % b |
a / b, a % b |
parte întreagă și rest, pentru numere naturale |
=, ≠, ≤, ≥ |
==, !=, <=, >= |
|
și, sau, not |
&&, ||, ! |
|
dacă c atunci … altfel … |
if (c) { … } else { … } |
|
cât timp c execută … |
while (c) { … } |
testul este la început |
repetă … până când c |
do { … } while (!(c)); |
se execută cel puțin o dată; se oprește când c devine adevărată |
pentru i ← a, b execută … |
for (i = a; i <= b; i++) { … } |
include ambele capete |
pentru i ← a, b, -1 execută … |
for (i = a; i >= b; i--) { … } |
pasul este al treilea termen |
Pentru intrările și , descrierea „citește ; ; scrie ” produce și afișează 7. Același algoritm poate fi implementat în C++ sau Python fără să schimbe ideea de calcul. La repetări verifici unde se află testul și dacă semnifică oprire ori continuare.
În detaliu
Convențiile din subiectele de Bacalaureat
Fiecare structură începe cu ┌ și se închide cu └■ pe aceeași verticală, iar liniile dintre ele, marcate cu │, sunt instrucțiunile din interiorul structurii. La repetă, linia de închidere este chiar └până când condiție. Atribuirea se scrie cu săgeata ←, partea întreagă cu paranteze drepte, iar restul împărțirii cu %. Lângă citește, între paranteze, se precizează ce fel de numere se citesc („număr natural nenul”); aceste precizări fac parte din enunț. Programa nouă de clasa a IX-a folosește aceleași convenții și admite și varianta în care structura se închide în cuvinte (sfârșit dacă, sfârșit cât timp, sfârșit pentru).
Schema logică
Același algoritm se poate desena ca schemă logică, din blocuri legate prin linii de flux. Programa nouă de clasa a IX-a folosește următoarele blocuri:
| Blocul | Rolul |
|---|---|
| Terminal (oval) | începutul (START) sau sfârșitul (STOP) algoritmului |
| Intrare/ieșire (paralelogram) | citirea sau scrierea datelor |
| Proces (dreptunghi) | un calcul sau o atribuire |
| Decizie (romb) | o condiție, cu două ieșiri: Da și Nu |
| Subprogram | apelul unui subprogram descris printr-o schemă separată |
| Conector (cerc mic) | leagă două puncte ale schemei |
| Linie de flux (săgeată) | ordinea în care se execută blocurile |
O structură repetitivă apare în schemă ca o decizie de la care o săgeată se întoarce înapoi, deasupra ei. Pseudocodul e mai ușor de scris și de tradus în cod, de aceea subiectele de examen îl folosesc pe el.
Urmărirea valorilor variabilelor
Ca să afli ce afișează un algoritm, faci un tabel cu o coloană pentru fiecare variabilă și scrii o linie nouă de fiecare dată când o variabilă se schimbă. Nu sări pași „pe intuiție”: majoritatea greșelilor apar la ultima trecere prin buclă sau la o condiție scrisă cu < în loc de ≤.
Algoritmi echivalenți
Doi algoritmi sunt echivalenți dacă, pentru aceleași date de intrare, afișează aceleași rezultate. Transformările cerute cel mai des:
- pentru → cât timp:
i ← aînainte de buclă, condițiai ≤ bșii ← i + 1la sfârșitul corpului. - cât timp → repetă:
repetăexecută corpul cel puțin o dată, deci îl pui într-undacă c atunci, ca să nu se execute când condiția e falsă de la început; condiția de oprire devinenot c. - repetă → cât timp: corpul se execută o dată înainte de buclă (sau te asiguri că prima testare e adevărată), iar condiția devine negația condiției de la
până când.
Un exemplu cu cele două feluri de test
- alternativa:
dacă condiție atunci instrucțiuni altfel instrucțiuni, cu ramuraaltfelopțională; - repetarea cu test inițial:
cât timp condiție execută instrucțiuni, care poate executa corpul de zero ori; - repetarea cu număr cunoscut de pași:
pentru i←a,b execută instrucțiuni, unde ia valorile ; - repetarea cu test final:
repetă instrucțiuni până când condiție, care oprește ciclul când condiția devine adevărată, sauexecută instrucțiuni cât timp condiție, care îl continuă cât timp condiția este adevărată. Ambele execută corpul cel puțin o dată.
Pentru a verifica un algoritm îl urmărești: scrii într-un tabel valorile variabilelor după fiecare instrucțiune sau după fiecare execuție a corpului. Același algoritm se poate transpune în C++ sau Python fără să schimbe ideea de calcul.
Exemplul 1 — suma cifrelor. Algoritmul:
citește n
s ← 0
cât timp n > 0 execută
s ← s + n % 10
n ← [n / 10]
scrie s
Pentru tabelul valorilor după fiecare execuție a corpului este: la început , apoi , și . Testul este fals, ciclul se oprește și se scrie 16. Transpus în C++, algoritmul este:
#include <iostream>
using namespace std;
int main() {
int n, s = 0;
cin >> n;
while (n > 0) {
s += n % 10;
n /= 10;
}
cout << s;
return 0;
}
Exemplul 2 — repetare cu test final. Algoritmul a ← 1, repetă a ← a * 2 până când a > 50, scrie a calculează cea mai mică putere a lui 2 mai mare decât 50. Valorile lui sunt 2, 4, 8, 16, 32 și 64. După a cincea execuție testul este fals, deci ciclul continuă; după a șasea, este adevărat și se scrie 64. Condiția din pseudocod este de oprire; în C++ ciclul do { a *= 2; } while (a <= 50); folosește condiția de continuare, negația ei.
Tabelul de urmărire are o coloană pentru fiecare variabilă și un rând pentru fiecare execuție a corpului; pentru ciclurile cu test se adaugă o coloană cu rezultatul condiției. Dacă ultimul rând arată o condiție adevărată de continuare, algoritmul încă nu s-a oprit și trebuie urmărit mai departe.
Exemple suplimentare
Exemplul 3 — alternativa. Secvența citește x, dacă x % 2 = 0 atunci scrie "par" altfel scrie "impar" afișează „par” pentru și „impar” pentru . Egalitatea din condiție se scrie =, iar atribuirea se scrie cu săgeată: expresia este o comparație, pe când este o atribuire.
Exemplul 4 — repetarea cu număr cunoscut de pași. Algoritmul
s ← 0
pentru i←1,4 execută
s ← s + i * i
scrie s
execută corpul de 4 ori. Perechile după fiecare execuție sunt , , și , deci se scrie 30, suma pătratelor . Contorul nu se modifică în corpul ciclului, iar numărul de execuții este , adică 4 pentru limitele 1 și 4. Dacă limitele sunt inversate, ca la pentru i←5,2, corpul nu se execută nicio dată, iar rămâne 0. Dacă limitele sunt egale, ca la pentru i←3,3, corpul se execută o singură dată.
Exemple rezolvate
Exemplul 1: un algoritm de tip Bac, cu toate cerințele
Se consideră algoritmul:
citește n (număr natural)
k ← 0; s ← 0
┌cât timp n > 0 execută
│ c ← n % 10
│ ┌dacă c % 2 = 0 atunci
│ │ s ← s * 10 + c
│ │altfel
│ │ k ← k + 1
│ └■
│ n ← [n / 10]
└■
scrie s, ' ', k
a) Ce se afișează pentru n = 52816? Cifrele se iau de la dreapta la stânga:
| c | paritate | s | k | n după pas |
|---|---|---|---|---|
| 6 | pară | 6 | 0 | 5281 |
| 1 | impară | 6 | 1 | 528 |
| 8 | pară | 68 | 1 | 52 |
| 2 | pară | 682 | 1 | 5 |
| 5 | impară | 682 | 2 | 0 |
Se afișează 682 2: s este format din cifrele pare, în ordinea inversă, iar k numără cifrele impare.
b) Câte numere de trei cifre pot fi citite, astfel încât să se afișeze 0 3? Pentru k = 3 trebuie ca toate cele trei cifre să fie impare; atunci s rămâne 0. Fiecare cifră se alege din 1, 3, 5, 7, 9, deci sunt 5 · 5 · 5 = 125 de numere. Atenție: s = 0 se obține și când singurele cifre pare sunt zerouri (pentru 7300 se afișează 0 2), dar la trei cifre k = 3 nu lasă loc pentru niciun zero.
c) Programul C++ corespunzător:
#include <iostream>
using namespace std;
int main() {
int n, k = 0, s = 0, c;
cin >> n;
while (n > 0) {
c = n % 10;
if (c % 2 == 0)
s = s * 10 + c;
else
k = k + 1;
n = n / 10;
}
cout << s << ' ' << k;
return 0;
}
Pentru intrarea 52816, programul afișează:
682 2
d) Un algoritm echivalent, cu structura repetă … până când:
citește n (număr natural)
k ← 0; s ← 0
┌repetă
│ c ← n % 10
│ ┌dacă c % 2 = 0 atunci
│ │ s ← s * 10 + c
│ │altfel
│ │ k ← k + 1
│ └■
│ n ← [n / 10]
└până când n = 0
scrie s, ' ', k
Verifici singurul caz în care cele două structuri se pot purta diferit: n = 0. Algoritmul inițial nu intră în buclă și afișează 0 0. Cel nou intră o dată, cu c = 0, care e par, deci s = 0 · 10 + 0 = 0, apoi n rămâne 0 și bucla se oprește: afișează tot 0 0. De aceea aici nu e nevoie de dacă n > 0 atunci în jurul buclei; în general, trebuie verificat de fiecare dată.
În Python (clasa a IX-a, programa nouă), același algoritm se scrie:
n = int(input())
k = 0
s = 0
while n > 0:
c = n % 10
if c % 2 == 0:
s = s * 10 + c
else:
k = k + 1
n = n // 10
print(s, k)
682 2
Rezultatul de mai sus este pentru intrarea 52816. În Python, câtul împărțirii întregi se scrie //, iar / dă un număr real.
Numărul 125 de la punctul b) se poate verifica și în C++, rulând algoritmul pe toate numerele de trei cifre:
#include <iostream>
using namespace std;
int main() {
int total = 0;
for (int x = 100; x <= 999; x++) {
int n = x, k = 0, s = 0;
while (n > 0) {
int c = n % 10;
if (c % 2 == 0) s = s * 10 + c;
else k++;
n = n / 10;
}
if (s == 0 && k == 3)
total++;
}
cout << total << "\n";
return 0;
}
125
Exemplul 2: de la pentru la cât timp
citește a, b (numere naturale, a ≤ b)
s ← 0
┌pentru i ← a, b execută
│ ┌dacă i % 3 = 0 atunci
│ │ s ← s + i
│ └■
└■
scrie s
- Algoritmul adună multiplii lui 3 dintre a și b, inclusiv capetele. Pentru a = 4 și b = 20: 6 + 9 + 12 + 15 + 18 = 60.
- Varianta cu
cât timp:i ← aînainte de buclă, condițiai ≤ b, iari ← i + 1ca ultimă instrucțiune din corp.
#include <iostream>
using namespace std;
int main() {
int a, b, s1 = 0, s2 = 0;
cin >> a >> b;
for (int i = a; i <= b; i++) // pentru i <- a, b
if (i % 3 == 0)
s1 = s1 + i;
int i = a; // cat timp, echivalent
while (i <= b) {
if (i % 3 == 0)
s2 = s2 + i;
i = i + 1;
}
cout << s1 << " " << s2 << "\n";
return 0;
}
Pentru intrarea 4 20, ambele variante dau același rezultat:
60 60
Exemplul 3: când repetă și cât timp nu sunt echivalente
Algoritmul de mai jos numără cifrele lui n:
citește n (număr natural)
nr ← 0
┌repetă
│ nr ← nr + 1
│ n ← [n / 10]
└până când n = 0
scrie nr
- Pentru n = 2026 se fac patru treceri și se afișează 4.
- Pentru n = 0 se face o trecere și se afișează 1, ceea ce e corect: 0 are o cifră.
- Dacă înlocuiești structura cu
cât timp n ≠ 0 execută, pentru n = 0 corpul nu se mai execută și se afișează 0. Varianta cucât timpe echivalentă numai dacă adaugi tratarea separată a lui n = 0.
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int x = n, nr1 = 0;
do { // repeta ... pana cand x = 0
nr1++;
x = x / 10;
} while (!(x == 0));
x = n;
int nr2 = 0;
while (x != 0) { // cat timp x != 0
nr2++;
x = x / 10;
}
cout << nr1 << " " << nr2 << "\n";
return 0;
}
Pentru intrarea 0, programul afișează rezultatele diferite ale celor două variante:
1 0
Pentru intrarea 2026, ambele variante dau 4.
Pentru admitere
La un algoritm dat în pseudocod, stabilește mai întâi ce fel de ciclu este și ce condiție folosește. Nu transpune mecanic „până când ” în while (x >= n): dacă sensul este oprirea, continuarea este x < n. Urmărește și ultima execuție a corpului: testul se evaluează cu valoarea rezultată după ea. În expresii, % și / au prioritate față de + și -, iar trunchiază: și . Variabilele a căror valoare nu se schimbă în corp nu pot face condiția să devină falsă. Numărul de execuții se poate afla fără tabel: pentru , ciclul cu se execută de atâtea ori câte cifre are , adică 3 ori pentru 583 și 4 ori pentru 2345.
Exemplu în formatul examenului. Se citește numărul . Ce se scrie în urma executării algoritmului de mai jos?
citește n
c ← 0
cât timp n ≠ 0 execută
dacă (n % 10) % 2 = 1 atunci
c ← c + 1
n ← [n / 10]
scrie c
- a) 1
- b) 2
- c) 3
- d) 4
Răspunsul corect este b). Cifrele se extrag în ordinea 5, 4, 3, 2, iar valorile lui sunt 2345, 234, 23, 2, 0. Cifra 5 este impară (), deci ; 4 este pară; 3 este impară, deci ; 2 este pară. Când ciclul se oprește și se scrie 2. Algoritmul numără cifrele impare ale lui . Varianta d) numără toate cifrele, iar varianta c) ar rezulta dacă s-ar număra și una dintre cifrele pare.
Unde apare la examen
- Bacalaureatul, informatică, matematică-informatică: programa de examen cuprinde „Descrierea algoritmilor (programe pseudocod)”, iar printre competențele evaluate sunt reprezentarea algoritmilor prin pseudocod și prin programe, urmărirea evoluției valorilor variabilelor și construirea algoritmilor echivalenți (programa de examen, anexa 2 la OMECTS 4800/2010). La sesiunea din iunie–iulie 2026, primul exercițiu al Subiectului al II-lea a pornit de la un algoritm în pseudocod și a cerut, ca în exemplul 1: valoarea afișată pentru date date (6 puncte), un set de date de intrare pentru un rezultat dat (6 puncte), programul C/C++ corespunzător (10 puncte) și un algoritm echivalent, cu altă structură repetitivă (6 puncte) (subiectele și baremele Bac 2026). Formatul descris este cel din 2026; potrivit proiectului de ordin pentru Bacalaureatul 2027, programa rămâne aceeași.
- Programa școlară: pseudocodul și structurile de bază sunt la clasa a IX-a, pe ambele programe; programa nouă precizează convențiile de scriere și simbolurile schemei logice (OMEC 6930/2025, anexa 42).
Greșeli frecvente
- Greșit: „până când” și „cât timp” au același sens al condiției.Corect: „până când” dă condiția de oprire, iar „cât timp” condiția de continuare;
repetă … până când n = 0devinedo { … } while (n != 0);, nuwhile (n == 0). - Greșit: compară două expresii.Corect: atribuie lui valoarea veche plus 1.
- Greșit: la „repetă … până când” corpul poate fi omis.Corect: se execută cel puțin o dată; la transformarea lui
cât timpînrepetă, verifici datele pentru care condiția e falsă de la început (de obicei n = 0). - Greșit:
pentru i ← 1, nse scrie în C++ cui < n.Corect: corpul se execută și pentru i = n, deci condiția estei <= n. - Greșit: partea întreagă
[n / 10]se copiază ca atare în C++.Corect: pentru variabile întregi esten / 10în C++ șin // 10în Python. - Greșit: precizările de lângă
citeștese ignoră.Corect: „număr natural nenul” sau „a ≤ b” spun ce date sunt corecte, iar răspunsul trebuie să le respecte. - Greșit: urmărirea sare pași.Corect: faci tabelul complet, cu o linie la fiecare modificare; la Bac se punctează numai rezultatul exact.
Testează-te pe această lecție
Lecția o citești aici, fără cont. Testele pe lecții și capitole sunt în cont, cu grile originale Didaxis și explicația fiecăreia: gratuit 10 grile pe zi, fără limită cu Premium, 49 de lei pe lună pentru fiecare copil.
Înainte și după
Întrebări frecvente
Ce înseamnă └■ în pseudocod?
Cum se traduce repetă … până când în C++?
Ce înseamnă parantezele drepte [x] în pseudocod?
Surse și referințe
Redactare proprie, conform programei:
- OMEC 6930/2025, MO 4 bis/2026, Informatică CS, p. 1632–1633 și 1653–1654; OMEC 4370/2026, anexa 8, p. 155–156; rocnee.eu
- OMEC 4370/2026, anexa 8, Informatică IX intensiv, p. 155–156
- OMEC 6930/2025, MO 4 bis/2026, Informatică CS, p. 1632–1633; rocnee.eu
- OMEC 6930/2025, anexa 66, Informatică IX CS militar, Monitorul Oficial nr. 4 bis/8.01.2026, pp. 2563–2578; cdn.edupedu.ro; centralizator oficial actualizat prin OMEC 3224/2026, legislatie.just.ro
- OMEC 6930/2025, MO 4 bis/2026, Informatică CS, p. 1653–1654; rocnee.eu
- UNSTPB, Regulament admitere licență 2026, Anexa II-1.2 p. Anx II-14 și Anexa XI-3 p. Anx XI-6–7 (PDF p. 64, 120–121); admitere.pub.ro
- OMECTS 4800/2010, anexa 2, Informatică, p. 3 și 6; aplicabilitatea 2027: OMEC 5211/2026, art. 3 alin. (10); edu.ro
- OMECTS 4800/2010, anexa 2, Informatică, p. 3–4; edu.ro
- OMECTS 4800/2010, anexa 2, Informatică, p. 5–6; edu.ro
Documente consultate
- OMEC 4370/2026, anexa 8, p. 155–156; UNSTPB, admitere 2026, anexa XI-3, p. Anx XI-6–7
- Programa școlară de informatică, clasa a IX-a, matematică-informatică (OMEC 6930/2025, anexa 42), p. 1632–1633 și 1653–1654; rocnee.eu
- Programa școlară de informatică, clasa a IX-a (OMECI 5099/2009, anexa 5), CNCE; rocnee.eu
- Programa de bacalaureat la informatică, matematică-informatică (anexa 2 la OMECTS 4800/2010), Ministerul Educației, p. 3 și 6; edu.ro
- Subiectele și baremele Bacalaureatului 2026; subiecte2026.edu.ro
Desene: Redactare proprie (desen original)
