InfoBook.ro ← Harta anului
Modul 01 · Principiile unui program
Modul 01 · Conținut 2.1

Cum se naște un program

Niciun programator bun nu începe cu tastatura. Începe cu o foaie de hârtie, câteva întrebări și un desen. Astăzi înveți drumul complet: de la problemă → la algoritm → la program care rulează.

🎯 Obiectiv 1Cunoști cele 5 etape ale elaborării unui program și le aplici pe o problemă concretă.
🎯 Obiectiv 2Citești și desenezi scheme logice; treci de la ele la pseudocod și la cod.
🎯 Obiectiv 3Scrii și înțelegi primul tău program C++ — linie cu linie.
1

Cele 5 etape ale unui program

Le urmărim pe o problemă reală: „Calculați media semestrială a unui elev din 3 note." Apasă pe fiecare etapă.

etapa 1🔍 Analiză
etapa 2📐 Proiectare
etapa 3⌨ Implementare
etapa 4🧪 Testare
etapa 5🔧 Depanare

▶ Etapele 3–5 în practică: rulează programul

Introdu trei note, alege împărțirea și apasă „Rulează". Vei vedea chiar bug-ul de la etapa de testare — și cum îl repari la depanare. Comută între C++ și Python: ambele limbaje au capcana împărțirii, doar că o poartă pe operatori diferiți.

note (1–10):
De reținut: etapele nu sunt „o singură trecere". Dacă testarea găsește o problemă, te întorci la implementare — uneori chiar la analiză. Programarea e un ciclu, nu o linie dreaptă.
2

Cum „scriem" un algoritm

Același algoritm poate fi exprimat în mai multe feluri — de la desen la cod-mașină. Fiecare are rostul lui.

🟦 Blocuri grafice

Schema logică: desenul algoritmului. Perfectă la început, pentru că vezi fluxul. Devine greoaie la algoritmi mari.

📜 Pseudocod

Românește + structură: „citește", „dacă…atunci", „scrie". Limbajul subiectelor de BAC — îl exersăm constant.

⚙ Limbaj de nivel înalt

C++ / Python — înțeles de oameni, tradus pentru mașină. Aici se scrie software-ul lumii reale.

Compilator vs. interpretor — cine traduce codul?

Procesorul înțelege doar cod-mașină (biții din Modulul 00!). Diferența dintre C++ și Python e când se face traducerea:

program.cpp→COMPILATOR
traduce tot, o singură dată
→program.exe→rulează foarte rapid ⚡
program.py→INTERPRETOR
traduce și execută linie cu linie
→rulare imediată, fără fișier .exe 🔁
Consecință practică: la C++ erorile de sintaxă apar înainte de rulare (la compilare); la Python apar în timpul rulării, când interpretorul ajunge la linia greșită. Mai există și limbaje de nivel scăzut (asamblare) — aproape de cod-mașină, rapide, dar greu de citit de oameni.
3

Python vs C++ — două unelte, un singur scop

Un limbaj de programare e un set de reguli sintactice și semantice prin care îi spunem calculatorului, exact și fără ambiguitate, ce să facă.

⚙ C++

Creat de Bjarne Stroustrup ca extensie a limbajului C (Dennis Ritchie & Brian Kernighan). Unul dintre cele mai folosite limbaje din industrie și limbajul în care s-a dat proba de BAC la informatică până acum.

Ai nevoie de un IDE (mediu integrat de dezvoltare) care compilează și rulează codul — cel mai folosit la școală: Code::Blocks.

🐍 Python

Gândit pentru lizibilitate: mai puțină sintaxă „de decor", aceeași putere de calcul. Îl folosim în paralel pentru că exprimă rapid ideea unui algoritm, înainte s-o traducem riguros în C++.

E suficient un editor cu interpretor integrat: Thonny, IDLE sau VS Code.

Scheletul minim — comparat linie cu linie

1#include <iostream> // unelte I/O
2using namespace std; // scurtături
3int main() {
4 // aici scriem algoritmul
5 return 0;
6}
1# Python nu are nevoie de include-uri
2# sau de o funcție main()
3# scriem algoritmul direct:
4print("Salut!")
De ce arată atât de diferit? C++ îți cere să pregătești „scena" (biblioteci, main, return) pentru că e compilat și strict. Python ascunde scena și te lasă direct la replici. Sub capotă, amândouă fac același lucru.
4

Variabile, tipuri de date, citire și afișare

O variabilă e o cutie cu etichetă din memoria calculatorului: eticheta e numele, în cutie stă valoarea, iar tipul decide cât de mare e cutia.

📦 Vizualizare: memoria calculatorului

Apasă pe o declarație și privește cum se rezervă octeții în memorie. Fiecare pătrățel = 1 octet (8 biți — îi știi din Modulul 00!).

memoria e goală — declară o variabilă 👆

📋 Regula tipurilor — care cutie, pentru ce

Șase tipuri acoperă tot ce vei scrie în clasa a IX-a. Citește-le pe rând; badge-ul din dreapta e mărimea cutiei.

int Numere întregi, fără virgulă: 5, −12, 0, 2000. Tipul pe care îl vei folosi în 9 probleme din 10. 4 octeți
long long Întregi uriași, peste ±2 miliarde. Îl scoți când înmulțești numere mari sau aduni multe valori. 8 octeți
float Numere reale, cu virgulă: 3.14, −0.5. Ține cam 7 cifre exacte — destul pentru medii și procente. 4 octeți
double Numere reale, precise. Cam 15 cifre exacte. Când ai dubii între float și double, alege double. 8 octeți
char Un singur caracter, între apostrofuri: 'A', '?', '7'. Atenție: '7' e un caracter, nu numărul 7. 1 octet
bool Doar două valori: true / false. Răspunsul unei întrebări cu DA sau NU. 1 octet
!
Cine alege tipul

În C++ îl pui tu. Scrii int x = 5; și cutia rămâne int până la finalul programului.

În Python nu scrii niciun tip. Scrii doar x = 5, iar Python se uită la valoare și decide singur că e întreg.

Mai mult: dacă apoi scrii x = "salut", aceeași variabilă devine text. În C++ așa ceva nu se poate.

La BAC dai în C++ — deci tipul greșit nu e o scăpare de stil, e punctaj pierdut.

🔒 De ce are int o limită — și de unde a apărut long long

Pasul 1 — cutia are un număr fix de biți. Un int are 4 octeți, adică 32 de biți. Unul singur se duce pe semn (+ sau −); ceilalți 31 țin cifrele.

32 de biți înseamnă 232 = 4 294 967 296 combinații posibile de 0 și 1. Atât. Nici una în plus. total
1 bit se duce pe semn — ca să poți scrie și numere negative, nu doar pozitive. semn
31 de biți rămân pentru valoarea propriu-zisă → maximul devine 231−1. valoare
rezultatul −2 147 483 648 … 2 147 483 647 — cam ±2 miliarde. Ăsta e plafonul de care te lovești. interval
!
De unde vine „−1"

Maximul e 231−1, nu 231, pentru că una dintre combinații e ocupată de zero.

Pe partea negativă nu se pierde nimic, deci intervalul e ușor asimetric: se coboară cu unu mai mult decât se urcă.

Pasul 2 — ce se întâmplă când depășești. Nu primești nicio eroare. Biții care nu încap se pierd pur și simplu, iar numărul „dă pagina" ca un odometru de mașină:

ultimul număr valid2 147 483 647
ce iese de fapt−2 147 483 648
În cod arată așa — și nimeni nu te avertizează:
1int mic = 10000000000; // zece miliarde
2cout << mic;
›1410065408
Programul nu crapă. Compilează, rulează, afișează liniștit un număr fără nicio legătură — și tu cauți greșeala în algoritm, unde nu e. De-asta depășirea e mai periculoasă decât o eroare pe față.

Pasul 3 — soluția e o cutie mai mare. Aceleași reguli, doar că de două ori mai mulți biți:

int

cutia obișnuită
octeți4
biți32
maxim231−1
± 2,1 miliarde

long long

cutia dublă
octeți8
biți64
maxim263−1
± 9,2 · 1018
Dublezi biții, dar nu dublezi intervalul — îl ridici la pătrat: de patru miliarde de ori mai mult decât int. Exact același număr, pus în cutia mare, iese corect:
›10000000000
Regula practică: dacă rezultatul poate trece de 2 miliarde — produse, sume peste multe valori, puteri — pui long long din start. Nu costă nimic și te scutește de o oră de căutat bug-ul.
🐍 În Python problema nu există. Acolo un întreg crește singur cât e nevoie — 10 ** 100 se calculează exact, cu toate cele 101 cifre. Comoditatea se plătește în memorie: până și un simplu 0 ocupă 24 de octeți, nu 4. Python cumpără liniște cu memorie; C++ cumpără viteză cu atenția ta.

Citire, afișare și comentarii — același program, cap la cap

Programul citește două numere și le adună. Comută pe 🐍 Python — acolo citirea e explicată bucată cu bucată, direct în cod.

Comentariile (// sau /* */ în C++, # în Python) sunt ignorate de compilator/interpretor — dar pentru colegul care îți citește codul (sau pentru tine, peste o lună) sunt aur curat.
5

Operatorii — verbele limbajului

Cu variabilele „substantive" și operatorii „verbe" poți forma primele propoziții. Apasă pe orice rând ca să vezi un exemplu calculat.

OperațiePseudocod🐍 Python⚙ C++
👆 apasă pe un rând din tabel

⚠ Împărțirea — marea diferență dintre cele două limbaje

Același semn /, două comportamente. Citește tabelul pe orizontală: aceeași expresie, două rezultate.

expresia⚙ C++🐍 Python
7 / 233.5
7.0 / 23.53.5
7 // 2nu există în C++3
7 % 211
−7 / 2−3−3.5
⚙ C++ / între doi întregi face împărțire întreagă și taie zecimalele. Ca să obții rezultat real, faci măcar un operand real: 7.0 / 2 sau (a + b) / 2.0. păstrează tipul
🐍 Python / dă mereu rezultat real, chiar și 4 / 2 → 2.0. Dacă vrei câtul întreg, îl ceri explicit cu //. păstrează valoarea
la fel % înseamnă rest în ambele limbaje, identic. Singurul operator aritmetic care nu te surprinde. fără capcane
!
Nu e o toană

E o alegere de proiectare. C++ păstrează tipul operanzilor: doi întregi intră, un întreg iese.

Python păstrează valoarea matematică: 7 împărțit la 2 chiar e 3,5, deci asta îți dă.

Aici pierzi puncte la BAC fără să-ți dai seama: media a trei note cu / 3 în loc de / 3.0 îți taie zecimalele în tăcere.

✂ Scurtături utile — aceeași treabă, scrisă mai scurt

Nu sunt obligatorii, dar le vei vedea peste tot — inclusiv în subiectele de BAC. Fiecare rând: scurtătura, ce înseamnă de fapt, și unde merge.

x += 3 înseamnă exact x = x + 3 — ia valoarea din x, adună 3, pune rezultatul înapoi în x. C++ și Python
x -= 3 înseamnă x = x - 3. La fel funcționează și *=, /=, %=. C++ și Python
x++ crește x cu 1, adică x = x + 1. Motorul oricărei bucle for. Există și x--, care scade 1. doar C++
(x > y) ? x : y operatorul ternar: „dacă x > y, ia x, altfel ia y" — un if/else scris pe o singură linie. În Python se scrie x if x > y else y. doar C++
2 ** 10 ridicare la putere: 210 = 1024. Merge și cu exponent fracționar — 2 ** 0.5 e radical din 2. În C++ nu există așa ceva. doar Python
De ce contează: x += 3 nu e doar mai scurt — arată clar că modifici x, nu că-i dai o valoare nouă din senin. Iar la BAC, un cod scris cu ele e un cod pe care corectorul îl citește fără efort.

🔺 Ridicarea la putere — unde cele două limbaje chiar se despart

Python are un operator dedicat. C++ nu are niciunul — și asta surprinde pe toată lumea prima dată.

vreau🐍 Python⚙ C++
2102 ** 10 → 1024pow(2, 10) → 1024.0
20,5 (radical)2 ** 0.5sqrt(2)
operator dedicat** — existănu există
de unde vinee în limbajdin <cmath>
🐍 Python ** e operator adevărat, ca + sau *. Cu exponent întreg dă întreg exact: 2 ** 100 are toate cele 31 de cifre, fără nicio pierdere. exact
⚙ C++ nu are operator de putere. Folosești funcția pow(a, b), după ce pui #include <cmath> sus, lângă <iostream>. funcție
pentru puteri mici nu-ți bate capul: x * x e mai scurt, mai rapid și mereu exact față de pow(x, 2). recomandat
!
Capcana lui pow

pow lucrează cu numere reale și întoarce double, nu întreg — chiar dacă îi dai doi întregi.

Iar numerele reale se stochează aproximativ. Așa că pow(10, 2) poate ieși 99.9999999, iar int p = pow(10, 2); taie zecimalele și îți lasă în cutie 99.

De-asta, la un BAC pe puteri întregi, nu folosi pow: fă înmulțirea într-o buclă, sau x * x pentru pătrat. Rezultatul e întreg și sigur.

🎯 Unsprezece întrebări — fiecare combină mai multe lucruri

Nu sunt de memorat, sunt de gândit: tipuri, prioritatea operațiilor, atribuiri compuse, ridicarea la putere. Aceleași situații, în ambele limbaje — și vei vedea că uneori răspunsul diferă. Ai o singură încercare la fiecare: după ce apeși, răspunsul rămâne înghețat.

Schimbând limbajul, grila se reia de la capăt — sunt alte întrebări, cu alte răspunsuri.

scor: 0 / 11

⚡ Antrenament nesfârșit

Aici întrebările vin la nesfârșit, una după alta. Bun de făcut două minute înainte de test.

…
scor: 0 / 0

🧮 Exersează operatorii & structura secvențială

🧮 Bancă de exerciții pe pbInfo — operatori & secvențial · 20 de probleme · click
6

Simulator: schema logică + pseudocod + cod, sincronizate

Algoritmul: maximul dintre două numere. Alege valorile, apoi execută Pas cu pas — schema, codul și variabilele se mișcă împreună.

a = b =
DA NU START citește a, b a > b ? max ← a max ← b scrie max STOP oval = start/stop · paralelogram = citire/scriere romb = decizie · dreptunghi = calcul
Variabile
a—
b—
max—
Ecran (consolă)
 
Apasă „Pas cu pas" ca să pornești execuția. 👣
Ce trebuie să observi: toate cele trei limbaje spun exact același lucru. Schema logică e desenul, pseudocodul e schița în cuvinte, iar în C++/Python am folosit operatorul ternar de la secțiunea 5 — forma condensată a alegerii: (a > b) ? a : b se citește „dacă a > b ia a, altfel ia b". Instrucțiunea if completă vine în Modulul 02.
7

Primul tău program, disecat

Același „Salut, clasa a IX-a!", scris în ambele limbaje. Comută între ele și apasă pe fiecare linie ca să afli ce face.

8

Testare și depanare

Un program netestat e un program greșit care încă n-a fost prins. Înveți să gândești ca un „vânător de erori".

Cum alegi testele — problema mediei a două note

Tip de testExemplu de dateCe verifică
Valori obișnuite7 și 9 → media 8Funcționează cazul normal?
Valori de limită1 și 1 · 10 și 10Merge la marginile intervalului?
Rezultat neîntreg7 și 8 → media 7.5Se pierde partea zecimală?
Date invalidenota 11 sau -3Programul validează intrarea?
Depanarea = urmărirea valorilor variabilelor pas cu pas, exact ca în simulatorul de mai sus. Când programul greșește, nu ghici — urmărește variabilele și găsești linia vinovată.

🐞 Vânătoarea de bug-uri: găsește linia greșită

Programul ar trebui să afișeze media lui 7 și 8 (adică 7.5), dar afișează 7. Click pe linia vinovată. Încearcă la ambele limbaje — bug-ul e același ca idee, dar se ascunde în alt loc.

9

Cum „vorbește" programul cu tine

Trei căi prin care un program primește și trimite date — le folosim pe toate în acest an.

⌨ Consola

Text simplu: cin/cout, input/print. Aici lucrăm cel mai des — și tot aici se dă BAC-ul.

🪟 Interfața grafică

Ferestre, butoane, casete text — le construim în Modulul 11 cu Tkinter.

📄 Fișiere

Programul citește și scrie date pe disc, fără om la tastatură — Modulul 09.

10

Fișa de sinteză

Opt idei de păstrat. Restul se construiește pe ele.

5 etape: analiză → proiectare → implementare → testare → depanare. Ciclu, nu linie.
Algoritmul e ideea; schema logică, pseudocodul și codul sunt doar haine diferite.
Simboluri: oval = start/stop, paralelogram = citire/scriere, romb = decizie, dreptunghi = calcul.
C++ e compilat (traducere completă, apoi rulare rapidă); Python e interpretat (linie cu linie).
Orice program C++ are #include, int main() și return 0;.
Testele bune acoperă: cazul normal, limitele, rezultatele „ciudate" și datele invalide.
Tipuri de date: int (întregi), float/double (reale), char (un caracter), bool (adevărat/fals) — tipul decide cât ocupă cutia în memorie.
Împărțirea și restul: în C++ 7/2 = 3 (întreg!); % dă restul — iar n % 2 == 0 înseamnă „n e par".
Ridicarea la putere: în Python 2 ** 10; în C++ operatorul nu există — pow() din <cmath>, dar dă double, deci pentru întregi folosește înmulțirea.
Exersează pe pbinfo.ro: categoria „Elemente de bază ale limbajului" — afișări simple și citiri de date. Țintă: 5 probleme cu 100 de puncte.
← anteriorModul 00 · Biți și baze urmează →Modul 02 · Instrucțiuni — decizie și repetiție