Pe scurt
Un program C++ conține declarațiile necesare și funcția main, de unde începe execuția. Bibliotecile sunt incluse prin directive, iar instrucțiunile dintr-un bloc sunt încadrate de acolade. Pentru intrarea și ieșirea standard folosim cin și cout din biblioteca iostream.
| Element | În C++ | De reținut |
|---|---|---|
| Tipuri întregi | int, long long |
int: până la 2147483647; long long: până la aproximativ 9 · 10¹⁸ |
| Tipuri reale | float, double |
double are precizie mai mare |
| Caracter, valoare logică | char, bool |
un char este, de fapt, un cod numeric ('A' are codul 65) |
| Operatori aritmetici | + - * / % |
între întregi, / dă câtul, iar % restul |
| Operatori relaționali | < <= > >= == != |
rezultatul este 1 (adevărat) sau 0 (fals) |
| Operatori logici | && || ! |
„și”, „sau”, „nu” |
| Citire, afișare | cin >> x;, cout << x; |
biblioteca iostream |
| Structura alternativă | if (cond) … else … |
ramura else e opțională |
În Python, print(3+5) afișează 8 direct; în C++, instrucțiunea de afișare se pune în funcția main() și cere biblioteca de intrare și ieșire.
În detaliu
Structura unui program
Un program C++ este alcătuit din directive de preprocesare, declarații și funcții; execuția începe în funcția main. Directiva #include <nume> adaugă declarațiile unei biblioteci și nu se încheie cu ;. Biblioteca <iostream> oferă cin și cout; <cmath> oferă funcții matematice (sqrt, pow, floor); <algorithm> oferă min, max și sort; <fstream> oferă ifstream și ofstream pentru fișiere; <cstring> oferă funcții pentru șiruri de caractere în stil C. using namespace std; scutește prefixul std:: pentru cin și cout. Corpul unei funcții este un bloc încadrat de acolade, iar fiecare declarație sau instrucțiune simplă se încheie cu ;. return 0; indică încheierea normală a programului. Comentariile încep cu // sau stau între /* și */.
Tipuri de date și variabile
Fiecare variabilă are un tip, care stabilește ce valori poate memora și ce operații se pot face cu ea. Când un calcul depășește domeniul unui tip întreg cu semn, rezultatul nu mai este garantat; alege un tip care acoperă valorile posibile din enunț. La Bacalaureat, baremul acceptă și un tip mai larg decât cel strict necesar, dacă programul funcționează corect.
Operatori și expresii
Între două numere întregi, / păstrează doar câtul, iar % dă restul; în C++, împărțirea întreagă trunchiază spre zero, deci -17 / 5 este -3, iar -17 % 5 este -2. Operatorii au priorități: întâi !, apoi * / %, apoi + -, apoi comparațiile, apoi && și la final ||. Când nu ești sigur, pui paranteze. La Bacalaureat, expresiile apar la Subiectul I; în 2026, chiar primul item.
Structura alternativă
Instrucțiunea if alege între două ramuri după valoarea unei condiții. Condițiile se combină cu && și ||; de exemplu, un an este bisect dacă se divide cu 4 și nu cu 100, sau dacă se divide cu 400. Pentru mai multe cazuri ale aceleiași variabile există și instrucțiunea switch.
Structurile repetitive
while, do … while și for repetă un grup de instrucțiuni. Diferențele dintre ele, traducerea din pseudocod și buclele cu număr cunoscut de pași sunt în lecția despre structurile repetitive.
Primul program: citire și afișare
#include <iostream>
using namespace std;
int main() {
int x;
cin >> x;
cout << x + 1;
return 0;
}
Pentru intrarea 7, variabila x primește valoarea 7 și programul afișează 8. Execuția urmează ordinea instrucțiunilor din main: declarația, citirea, afișarea. Directivele #include și using sunt tratate înainte de compilarea corpului funcției și nu produc ele însele valori afișate.
Exemplul 2 — funcții definite înaintea lui main. Programul poate avea și alte funcții, definite înainte de folosire:
#include <iostream>
using namespace std;
int succesor(int x) {
return x + 1;
}
int main() {
int a = 3;
cout << succesor(a) << ' ' << succesor(succesor(a));
return 0;
}
Programul afișează 4 5. Funcția succesor nu se execută până nu este apelată din main; apelul succesor(succesor(a)) evaluează întâi apelul interior, care dă 4, apoi pe cel exterior, care dă 5. Dacă funcția ar fi definită după main, ar trebui anunțată înainte printr-un antet, int succesor(int x);.
Exemplul 3 — fără using namespace std;. Fără această directivă, numele trebuie prefixate: std::cout << "Salut"; și std::cin >> x;. Prefixul arată că cout și cin fac parte din spațiul de nume std. Dacă omiți directiva #include <iostream>, compilarea eșuează, pentru că cin și cout nu sunt declarate; dacă omiți un ;, compilatorul semnalează eroare la linia respectivă sau la cea următoare. Variabila x din main există numai în acel bloc: o variabilă declarată între acolade nu este vizibilă după acolada de închidere.
Cele mai frecvente erori de structură sunt: lipsa lui #include <iostream> (cin și cout nu sunt declarate), un ; omis la sfârșitul unei instrucțiuni, acolade nepereche și o funcție apelată înainte de a fi declarată. Funcția main are tipul int; instrucțiunea return 0; poate lipsi la sfârșitul ei, caz în care compilatorul o adaugă. Ordinea directivelor #include nu contează, dar toate trebuie să apară înaintea folosirii numelor pe care le declară.
Exemplul 4 — două citiri și mai multe afișări. Programul citește două numere întregi, separate prin spațiu sau prin linie nouă, și afișează suma și produsul pe linii diferite:
#include <iostream>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
cout << a + b << '\n' << a * b;
return 0;
}
Pentru intrarea 4 5 ieșirea este 9, pe prima linie, și 20, pe a doua. Un lanț de citiri cin >> a >> b este echivalent cu două instrucțiuni separate, iar '\n' mută afișarea pe rândul următor.
Exemplul 5 — tipul stabilește rezultatul. Împărțirea a două numere întregi dă un cât întreg, nu un număr real:
cout << 7 / 2 << ' ' << 7 % 2 << ' ' << 7 / 2.0;
Se afișează 3 1 3.5. Operatorul / între doi întregi aruncă partea fracționară, % dă restul, iar dacă unul dintre operanzi este real, rezultatul este real. Același program, cu variabile declarate double, ar produce alte valori, deci tipul fiecărei variabile se alege înainte de scrierea calculului.
Exemple rezolvate
Exemplul 1: expresii și o condiție compusă
Ce afișează programul de mai jos pentru anul 1900?
#include <iostream>
using namespace std;
int main() {
cout << 17 / 5 << " " << 17 % 5 << " " << 17 / 5.0 << " "
<< -17 / 5 << " " << -17 % 5 << "\n";
int a;
cin >> a;
if ((a % 4 == 0 && a % 100 != 0) || a % 400 == 0)
cout << "bisect\n";
else
cout << "nebisect\n";
return 0;
}
17 / 5este 3 și17 % 5este 2, pentru că 17 = 5 · 3 + 2.17 / 5.0are un operand real, deci rezultatul este 3.4.-17 / 5este -3 și-17 % 5este -2: câtul se trunchiază spre zero, iar restul are semnul deîmpărțitului.- 1900 se divide cu 100, dar nu cu 400, deci nu este bisect.
Pentru intrarea 1900, programul afișează:
3 2 3.4 -3 -2
nebisect
Pentru 2024 și pentru 2000, a doua linie este bisect.
Pentru admitere
În fragmentele de cod, urmărește doar instrucțiunile executate; directiva de includere nu produce ea însăși o valoare afișată. Identifică intrarea dată, tipurile variabilelor și ordinea instrucțiunilor. Dacă o variabilă este declarată în interiorul unui bloc, domeniul său se termină la acolada de închidere. Funcțiile se execută doar când sunt apelate, iar valoarea apelului imbricat se obține din interior spre exterior. Dacă fragmentul declară variabile în main și le folosește într-o altă funcție, acestea nu sunt vizibile acolo; apelul trebuie să le transmită ca parametri. Un subiect poate cere C în loc de C++: atunci biblioteca este <stdio.h>, citirea se face cu scanf, iar afișarea cu printf.
Exemplu în formatul examenului. Ce se afișează în urma executării programului de mai jos?
#include <iostream>
using namespace std;
int f(int x) { return x + 1; }
int main() {
int a = 3;
cout << f(a) << f(f(a));
return 0;
}
- a)
44 - b)
45 - c)
5 - d)
4 5
Răspunsul corect este b). Expresia f(a) are valoarea 4, iar f(f(a)) are valoarea f(4) = 5. Instrucțiunea cout << f(a) << f(f(a)) scrie cele două valori una lângă alta, fără separator, deci ieșirea este 45. Varianta d) ar apărea dacă între valori s-ar fi scris un spațiu, iar varianta c) ignoră primul apel.
Al doilea exemplu în formatul examenului. Ce se afișează în urma executării programului de mai jos?
#include <iostream>
using namespace std;
int main() {
int x = 2;
{
int x = 7;
cout << x;
}
cout << x;
return 0;
}
Răspunsul este 72. În blocul interior, variabila x declarată acolo ascunde variabila exterioară, deci se afișează 7. După acolada de închidere variabila interioară dispare, iar x se referă din nou la cea exterioară, cu valoarea 2.
Unde apare la examen
- Bacalaureatul, informatică, matematică-informatică: programa de examen are un capitol „Elementele de bază ale unui limbaj de programare (Pascal sau C, la alegere)”, cu vocabularul, tipurile de date, operatorii, expresiile, citirea și scrierea și structurile de control (programa de examen, anexa 2 la OMECTS 4800/2010). La sesiunea din iunie–iulie 2026, primul item al Subiectului I a cerut expresia C/C++ care are valoarea 1 exact când două numere au aceeași paritate (subiectele și baremele Bac 2026).
- Programa școlară: pe programa veche, elementele limbajului C/C++ sau Pascal sunt la clasa a X-a (programa de clasa a X-a, OMECI 5099/2009). Programa nouă de clasa a IX-a folosește Python. Programele noi pentru clasele X–XII (OMEC 4370/2026, aplicate din 2027–2028) păstrează Python ca limbaj de bază; C++ este limbaj de lucru numai la clasele cu predare intensivă a informaticii.
Greșeli frecvente
- Greșit: directiva
#includese încheie cu punct și virgulă.Corect: directivele de preprocesare nu au;, pe când declarațiile și instrucțiunile simple au. - Greșit: execuția unui program C++ pornește de la prima funcție definită.Corect: pornește de la funcția
main. - Greșit:
using namespace std;este necesar pentru ca programul să compileze.Corect: fără el, numele se scriu cu prefix:std::cout. - Greșit: acoladele și punctul și virgula au același rol.Corect: acoladele delimitează blocuri, iar punctul și virgula încheie instrucțiuni sau declarații.
- Greșit:
cout << x + 1schimbă valoarea luix.Corect: afișează expresia calculată.
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
Cât este 7 / 2 în C++?
Care este diferența dintre = și == în C++?
Ce tip de date folosesc pentru numere mari?
Surse și referințe
Redactare proprie, conform programei:
- OMEC 4370/2026, anexa 8, Informatică IX intensiv, p. 155–156
- OMECI 5099/2009, anexa 5, Informatică, p. 4–5, clasa X; plan de încadrare: OMECI 3410/2009, anexa 1, p. PDF 1–14; forum.isj.hd.edu.ro; filiera tehnologică: OMECI 3412/2009, anexa 2, tabel X, legislatie.just.ro
- OMECI 5099/2009, anexa 5, Informatică, p. 4–5, clasa X; 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 6930/2025, Informatică clasa a IX-a, MO 4 bis/2026, p. 1632–1633 și 1653–1654
- Programa școlară de informatică, clasa a X-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. 2–3; edu.ro
- Subiectele și baremele Bacalaureatului 2026; subiecte2026.edu.ro
Desene: Redactare proprie (desen original), conform Programa școlară de informatică, clasa a X-a (OMECI 5099/2009, anexa 5), CNCE; rocnee.eu
