Didaxis
lecție · Informatică

Structura programului C/C++

C++ este unul dintre cele două limbaje, alături de Pascal, în care se pot scrie rezolvările de la proba de informatică a Bacalaureatului. Un program C++ are variabile de un anumit tip, citește date, le prelucrează prin expresii și structuri de control și afișează rezultatele. Pe programa veche, elementele limbajului se învață în clasa a X-a.

Se face în:
Clasa a IX-a
Clasa a X-a
Actualizat la: 30 octombrie 2026
1pe scurtstratul 1 din 3 · rezumatul lecției

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.

Desen la lecția „Structura programului C/C++”
2în detaliustratul 2 din 3 · pentru clasă și Bacalaureat

Î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;
}
  1. 17 / 5 este 3 și 17 % 5 este 2, pentru că 17 = 5 · 3 + 2.
  2. 17 / 5.0 are un operand real, deci rezultatul este 3.4.
  3. -17 / 5 este -3 și -17 % 5 este -2: câtul se trunchiază spre zero, iar restul are semnul deîmpărțitului.
  4. 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.

3pentru admiterestratul 3 din 3 · pentru examene

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 #include se î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 + 1 schimbă valoarea lui x.
    Corect: afișează expresia calculată.
în contul tăuPremium

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++?
3. Când ambii operanzi sunt întregi, operatorul / face împărțirea întreagă și păstrează doar câtul. Pentru rezultatul 3.5, cel puțin un operand trebuie să fie real, de exemplu 7 / 2.0.
Care este diferența dintre = și == în C++?
= este atribuirea: x = 5 pune valoarea 5 în x. == este comparația: x == 5 are valoarea 1 (adevărat) dacă x este 5 și 0 altfel. Scris din greșeală în if, if (x = 5) atribuie 5 lui x și este mereu adevărat.
Ce tip de date folosesc pentru numere mari?
Tipul int memorează valori până la 2147483647, adică aproximativ 2 miliarde. Pentru valori mai mari, până la aproximativ 9 · 10¹⁸, folosești long long.

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

lecțiile sunt gratuite

Ai citit lecția. Acum verifică-te.