Limbajul de programare Pascal / C++ – noțiuni de bază
Introducere în sintaxa unui limbaj de programare structurat, variabile, tipuri de date și operatori.
Evaluarea Națională
De la pseudocod la un limbaj de programare adevărat
Pseudocodul e înțeles de oameni, dar calculatorul are nevoie de un limbaj de programare cu reguli stricte de scriere, numite sintaxă. În gimnaziu se folosește de regulă C++ (uneori Pascal) — ideile sunt identice, doar cuvintele diferă.
Un program C++ minimal are o structură fixă pe care trebuie să o știi pe de rost:
- #include <iostream> — aduce în program biblioteca pentru citire și scriere;
- using namespace std; — ne lasă să scriem cin și cout fără prefixe;
- int main() { ... return 0; } — funcția principală: de aici începe întotdeauna execuția programului, indiferent ce altceva mai există în fișier.
Fiecare instrucțiune se termină cu punct și virgulă (;) — lipsa lui este cea mai frecventă eroare de sintaxă a începătorilor. Acoladele { } grupează instrucțiunile în blocuri.
Distincție cerută la teste: eroarea de sintaxă (programul nici nu poate fi tradus — de exemplu lipsește un ;) apare la compilare, pe când eroarea de logică (programul rulează, dar dă rezultate greșite — de exemplu ai scris + în loc de *) se descoperă abia la testare. Compilatorul este programul care traduce codul sursă scris de tine în cod pe care procesorul îl poate executa.
Tipuri de date simple
Fiecare variabilă are un tip de date, care stabilește ce valori poate memora și ce operații se pot face cu ea:
- int (integer în Pascal) — numere întregi: -5, 0, 2026. Nu poate memora 3,5!
- float / double (real în Pascal) — numere reale, cu zecimale: 3.14, -0.5. În programare separatorul zecimal este punctul, nu virgula.
- char — un singur caracter, scris între apostrofuri: 'A', '7', '+'. Atenție: '7' este caracterul șapte, nu numărul 7 — cu el nu poți face direct calcule aritmetice.
- bool (boolean în Pascal) — valori logice: true (adevărat) sau false (fals).
De ce contează tipul? Pentru că împărțirea se comportă diferit: la două numere întregi, operatorul / în C++ face împărțire întreagă — 7 / 2 dă 3, nu 3.5! Restul împărțirii se obține cu operatorul % (mod): 7 % 2 dă 1. Ca rezultatul să fie 3.5, cel puțin unul dintre operanzi trebuie să fie real: 7.0 / 2.
Domeniul de valori este limitat: un int obișnuit memorează valori până la aproximativ 2 miliarde (2.147.483.647). Dacă un calcul depășește această limită, apare fenomenul de depășire (overflow) și rezultatul devine absurd — de aceea problemele cu numere mari cer tipul long long.
Variabile, constante și atribuirea
O variabilă este o zonă de memorie cu un nume, un tip și o valoare care se poate schimba pe parcursul programului. În C++ orice variabilă trebuie declarată înainte de a fi folosită: int n; sau, cu inițializare, int n = 10;
Regulile pentru numele variabilelor (identificatori): pot conține litere, cifre și liniuța de subliniere _, dar nu pot începe cu o cifră și nu pot fi cuvinte rezervate ale limbajului (int, if, while...). C++ face diferența între litere mari și mici: Suma și suma sunt variabile diferite!
O constantă este o valoare cu nume care nu se mai poate modifica după declarare: const float PI = 3.14; Dacă încerci să îi atribui altă valoare, compilatorul semnalează eroare.
Instrucțiunea de atribuire folosește semnul = în C++ (:= în Pascal): n = n + 1; înseamnă „calculează valoarea din dreapta cu vechea valoare a lui n, apoi memorează rezultatul în n”. Capcana cea mare: în C++, = este atribuire, iar == este compararea de egalitate. Dacă scrii if (n = 5) în loc de if (n == 5), programul compilează, dar face cu totul altceva: îi atribuie lui n valoarea 5 și condiția devine mereu adevărată. Este o eroare de logică celebră, nu de sintaxă — de aceea e atât de periculoasă.
O variabilă declarată dar neinițializată conține o valoare reziduală imprevizibilă (gunoi de memorie) — folosirea ei în calcule dă rezultate diferite la rulări diferite.
Operatori și expresii
Operatorii aritmetici din C++: + (adunare), - (scădere), * (înmulțire), / (împărțire; întreagă dacă ambii operanzi sunt întregi), % (restul împărțirii, definit doar pentru întregi).
Prioritatea operatorilor este ca la matematică: întâi , /, %, apoi + și -; parantezele rotunde schimbă ordinea. Expresia 2 + 3 4 valorează 14, nu 20.
Operatorii relaționali compară două valori și produc un rezultat logic: <, >, <=, >=, == (egal), != (diferit).
Operatorii logici combină condiții: && (și — ambele adevărate), || (sau — cel puțin una adevărată), ! (negație). În Pascal ei se scriu and, or, not.
Două scurtături specifice C++ apar frecvent în subiecte:
- n++ înseamnă n = n + 1, iar n-- înseamnă n = n - 1;
- operatorii compuși: s += x este s = s + x; p = 2 este p = p 2.
Capcană de examen: condiția matematică 1 ≤ x ≤ 10 NU se scrie 1 <= x <= 10 (aceasta compilă, dar se evaluează greșit, de la stânga la dreapta), ci obligatoriu cu operator logic: x >= 1 && x <= 10. Similar, „x este în afara intervalului” se scrie x < 1 || x > 10 — observă că negarea lui și produce sau.
Citirea și scrierea datelor
Programul comunică cu utilizatorul prin citire (preia date de la tastatură) și scriere (afișează pe ecran).
În C++:
- cin >> n; — citește o valoare de la tastatură și o pune în variabila n. Săgețile arată sensul: datele curg de la cin (tastatură) spre variabilă.
- cout << n; — afișează valoarea lui n. Datele curg de la variabilă spre cout (ecran).
- Se pot înlănțui: cin >> a >> b; citește două valori; cout << a << ' ' << b; le afișează separate printr-un spațiu.
În Pascal echivalentele sunt read/readln și write/writeln.
Detalii care aduc sau pierd puncte:
- La afișare, valorile nu sunt separate automat: dacă a = 3 și b = 5, instrucțiunea cout << a << b; afișează 35 (lipite), nu 3 5. Separatorul (spațiu sau rând nou — endl sau '\n') trebuie scris explicit.
- La citirea cu cin, spațiile și trecerile la rând nou dintre valori sunt sărite automat — utilizatorul poate scrie numerele pe același rând sau pe rânduri diferite.
- Ordinea citirii contează: cin >> a >> b; pune prima valoare tastată în a și a doua în b. Dacă problema spune „se citesc n și apoi cele n numere”, respecți exact această ordine.
Un program corect urmează aproape mereu tiparul: citește datele → prelucrează → afișează rezultatul — aceeași structură intrare–prelucrare–ieșire pe care o are orice algoritm.
De reținut
- sintaxă
- ansamblul regulilor stricte de scriere ale unui limbaj de programare; încălcarea lor produce erori semnalate la compilare
- compilator
- program care traduce codul sursă scris de programator în cod executabil de către procesor, semnalând erorile de sintaxă
- funcția main
- funcția principală a unui program C++, de la care începe întotdeauna execuția programului
- tip de date
- proprietate a unei variabile care stabilește ce valori poate memora și ce operații se pot efectua cu ea (int, float, char, bool)
- variabilă
- zonă de memorie identificată printr-un nume, care păstrează o valoare de un anumit tip, valoare ce se poate modifica în timpul execuției
- constantă
- valoare cu nume, declarată cu const, care nu mai poate fi modificată după inițializare
- operatorul %
- operatorul rest al împărțirii întregi în C++: 7 % 2 este 1; corespunde lui mod din pseudocod și este definit doar pentru operanzi întregi
- împărțirea întreagă
- în C++, operatorul / aplicat la doi operanzi întregi păstrează doar câtul: 7 / 2 este 3, nu 3.5
- == și =
- == este operatorul de comparare la egalitate, iar = este atribuirea; folosirea lui = într-o condiție este o eroare de logică, nu de sintaxă
- cin și cout
- fluxurile standard din C++ pentru citirea datelor de la tastatură (cin >>) și afișarea lor pe ecran (cout <<)
Greșeli frecvente
Greșit: Scrierea condiției de egalitate cu un singur egal: if (n = 5)
Corect: Compararea se face cu ==: if (n == 5); cu un singur =, lui n i se atribuie 5 și condiția devine mereu adevărată — programul compilează, dar logica e greșită
Greșit: Așteptarea rezultatului 3.5 din expresia 7 / 2
Corect: Ambii operanzi fiind întregi, / face împărțire întreagă și dă 3; pentru 3.5 e nevoie ca măcar un operand să fie real: 7.0 / 2
Greșit: Traducerea condiției 1 ≤ x ≤ 10 direct ca 1 <= x <= 10
Corect: Intervalul se scrie cu operator logic: x >= 1 && x <= 10; forma înlănțuită se evaluează de la stânga la dreapta și dă rezultat greșit
Greșit: Confundarea caracterului '7' cu numărul 7
Corect: '7' este un caracter (tip char), nu valoarea numerică 7; cu el nu se fac direct calcule aritmetice obișnuite
Greșit: Presupunerea că cout << a << b; afișează valorile separate prin spațiu
Corect: Valorile se afișează lipite; separatorul trebuie scris explicit: cout << a << ' ' << b;
Test — 6 întrebări ca la examen
1. Execuția unui program C++ începe întotdeauna cu:
- prima linie a fișierului sursă
- directiva #include
- funcția main
- prima instrucțiune cout
Vezi răspunsul
funcția main. Oriunde ar fi așezată în fișier, funcția main este punctul de start al execuției. Prima linie a fișierului — distractorul natural — conține de obicei #include, care este doar o directivă pentru compilator, nu o instrucțiune executată la rulare.
2. Care dintre următoarele este un nume corect de variabilă în C++?
- 2suma
- suma_note
- suma note
- int
Vezi răspunsul
suma_note. suma_note respectă toate regulile: începe cu literă și conține doar litere și liniuța de subliniere. 2suma începe cu cifră, suma note conține spațiu, iar int este cuvânt rezervat al limbajului — toate trei sunt respinse de compilator.
3. Ce valoare are expresia C++: 19 % 4 + 19 / 4?
- 7.75
- 3
- 7
- 8
Vezi răspunsul
7. 19 % 4 = 3 (restul) și 19 / 4 = 4 (câtul împărțirii întregi, nu 4.75), deci 3 + 4 = 7. Distractorul 7.75 apare dacă tratezi / ca împărțire reală — capcana standard a împărțirii între doi întregi.
4. Ce afișează secvența: int x = 3; x += 2; x++; cout << x;?
- 5
- 6
- 4
- 3
Vezi răspunsul
6. x += 2 îl duce pe x la 5, apoi x++ îl mai crește cu 1, deci se afișează 6. Răspunsul 5 e ales de cei care uită efectul lui x++ sau cred că el doar citește valoarea fără să o modifice.
5. Pentru x = 7, care este valoarea expresiei: (x % 2 == 0) || (x > 5 && x < 10)?
- true, pentru că 7 este în intervalul (5, 10)
- false, pentru că 7 este impar
- true, pentru că 7 este impar
- false, pentru că ambele condiții trebuie să fie adevărate
Vezi răspunsul
true, pentru că 7 este în intervalul (5, 10). Prima condiție e falsă (7 e impar), dar a doua e adevărată (7 > 5 și 7 < 10), iar || cere doar una adevărată. Ultimul distractor descrie operatorul && — confuzia dintre sau și și este exact ce testează întrebarea.
6. Un program citește două numere întregi cu cin >> a >> b; și utilizatorul tastează: 4 9. Ce afișează apoi cout << b << a;?
- 4 9
- 94
- 9 4
- 49
Vezi răspunsul
94. a primește 4, b primește 9, iar afișarea în ordinea b, a produce 9 și 4 lipite: 94. Variantele cu spațiu sunt tentante, dar cout nu pune niciun separator de la sine — spațiul trebuie afișat explicit.
Deschide varianta interactivă — cu AI care îți explică