🖥️ Introducere în Informatică

Capitol 0 — Ce este informatica, cum func ioneaz un calculator, primul program C++, tipuri de date, structuri de control i programa BAC 2026

Programa BAC 2026Ce este informaticaPrimul program C++Tipuri de dateStructuri de control
📖 12 min
0
💡

Ce este Informatica?

🧠 Informatica — ştiinţa rezolvării problemelor

Informatica este ştiinţa care studiază prelucrarea automată a informaţiei cu ajutorul calculatoarelor. Dacă matematica se ocupă de numere şi relaţii, informatica se ocupă de cum rezolvăm problemele sistematic, pas cu pas.

Imaginează-ţi că eşti un bucatar. O reţetă de gătit este practic un algoritm: o listă de paşi clari şi ordonaţi care transformă ingredientele (date de intrare) într-un fel de mâncare (date de ieşire).

ℹ️ Informaţie

Date cu sens şi context. Calculatoarele stochează informaţia în binar (0 şi 1), dar o organizează în structuri mai complexe.

⚙ Algoritm

O secvenţă finită de paşi bine definiţi pentru rezolvarea unei probleme. Orice program este un algoritm transformat în cod.

💻 Program

Un algoritm scris într-un limbaj de programare pe care calculatorul îl poate executa. Noi vom folosi C++.

📊 Date

Informaţiile cu care lucrează un program: numere, text, imagini, sunete. Datele se citesc, se prelucrează şi se afişează.

De ce studiem informatica?

În lumea modernă, orice domeniu (medicină, economie, arte, biologie) utilizează software. Abilitatea de a programa îţi permite să automatizezi sarcini repetitive, să analizezi date mari şi să construieşti soluţii digitale.

🖥️

Cum funcţionează un calculator?

🧠 Analogie: Calculatorul ca un birou

Imaginează-ţi calculatorul ca un birou de lucru:
CPU (Procesorul) = angajatul care face calculele — extrem de rapid
RAM (Memoria) = biroul de lucru — ţine datele la îndemână, dar se goaleşte când închiţi calculatorul
HDD/SSD (Stocarea) = un dulap cu dosare — păstrează datele permanent
SO (Sistemul de operare) = managerul — coordonează toate resursele

💻 CPU (Procesor)

Execută instrucţiunile programului. Viteza se măsoară în GHz (miliarde de operaţii/secundă). Programe moderne rulează pe mai multe nuclee simultan.

Ex: Intel i7, AMD Ryzen 9
🧮 RAM (Memorie)

Stochează datele şi programele în execuţie. Volatilă (se şterge la închidere). Variabilele din programul nostru stau în RAM.

Ex: 8GB, 16GB, 32GB DDR5
💾 HDD/SSD

Stocare permanentă. Fişierele şi programele sunt salvate aici. SSD-urile sunt mult mai rapide decât HDD-urile.

Ex: SSD 512GB NVMe
🖥️ Sistemul de Operare

Gestionează resursele hardware şi oferă o interfaţă utilizatorului. Windows, Linux, macOS sunt sisteme de operare.

Ex: Windows 11, Ubuntu 24

Cum rulează un program C++?

// Pasii de la codul sursa la executie:

// 1. Scriem codul sursa (.cpp)
#include <iostream>
using namespace std;
int main() { cout << "Salut!"; return 0; }

// 2. Compilatorul (g++, MinGW) traduce in cod masina (.exe/.out)
// 3. SO incarca .exe in RAM
// 4. CPU executa instructiunile una cate una
// 5. Rezultatele apar pe ecran

Medii de lucru recomandate

🌐 OnlineGDB

Rulează direct în browser, fără instalare. Perfect pentru început.

Deschide →
🔧 Code::Blocks

IDE gratuit, complet, cu compilator MinGW inclus. Recomandat pentru BAC.

Descarcă →
⚡ Dev-C++

IDE clasic, simplu şi uşor de instalat. Foarte popular în licee româneşti.

Descarcă →
✏️ VS Code

Editor modern, extensibil. Necesită configurare manuală a compilatorului g++.

Descarcă →
⚙️

Ce este un algoritm?

📝 Algoritm = reţetă de gătit

Un algoritm este o secvenţă finită de paşi precis definiţi care rezolvă o clasă de probleme într-un timp finit.

Proprietăţile unui algoritm bun:

  • Finitudine: se termină după un număr finit de paşi
  • Claritate: fiecare pas este precis şi fără ambiguităţi
  • Generalitate: rezolvă o clasă de probleme, nu doar un caz
  • Eficienţă: foloseşte resurse rezonabile (timp şi memorie)

Exemplu: Algoritm pentru maximul a 3 numere

Pseudocod
CITESTE a, b, c
max ← a
DACA b > max ATUNCI max ← b
DACA c > max ATUNCI max ← c
SCRIE max
Cod C++
int a, b, c;
cin >> a >> b >> c;
int mx = a;
if (b > mx) mx = b;
if (c > mx) mx = c;
cout << mx;

Complexitatea algoritmilor — pe scurt

Complexitatea măsoară cât de rapid creşte timpul de execuţie cu dimensiunea datelor de intrare. Se exprimă cu notaţia Big-O.

ComplexitateExemplun=1.000n=10.000n=100.000n=1.000.000
O(1)Accesare element vector1 op.1 op.1 op.1 op.
O(log n)Căutare binară10 op.13 op.17 op.20 op.
O(n)Parcurgere vector1.000 op.10.000 op.100.000 op.1.000.000 op.
O(n log n)Sortare eficientă10.000 op.130.000 op.1.700.000 op.20.000.000 op.
O(n²)Sortare bulă, 2 bucle10⁶ op.10⁸ op. ⚠️10¹⁰ op. ❌10¹² op. ❌

La BAC, limitele tipice sunt: n ≤ 1.000 permite O(n²), n ≤ 10.000 permite O(n²) cu constante mici, n ≤ 100.000 necesită O(n log n) sau O(n).

🚀

Structura unui program C++

// Programul minim C++ — "Salut, lume!"
#include <iostream>    // biblioteca pentru cin/cout
using namespace std;  // evita scrierea "std::" inainte de cin, cout, etc.

int main() {           // functia principala — executia incepe INTOTDEAUNA de aici
    cout << "Salut, lume!" << endl;  // afisare pe ecran
    return 0;           // semnaleaza ca programul s-a terminat cu succes
}
// Output: Salut, lume!

Biblioteci standard esentiale la BAC

LibraryConţineUtilizare
<iostream>cin, cout, cerr, endlIntrare/ieşire standard
<fstream>ifstream, ofstreamCitire/scriere fişiere
<cmath>sqrt, pow, abs, floor, ceilFuncţii matematice
<algorithm>sort, min, max, reverse, findAlgoritmi standard
<cstring>strlen, strcpy, strcmp, strcatŞiruri de caractere C
<cctype>isalpha, isdigit, toupper, tolowerOperaţii pe caractere
<vector>vector<T>Vectori dinamici

Citire şi afişare (consolă)

#include <iostream>
using namespace std;
int main() {
    // Citire o variabila
    int n;
    cout << "Introduceti un numar: ";
    cin >> n;

    // Citire mai multe variabile pe o linie
    int a, b;
    cin >> a >> b;         // a si b separate de spatiu sau Enter

    // Afisare formatata
    cout << "Suma: " << a+b << endl;

    // Operatorul ternar (conditie ? val_adevarat : val_fals)
    // Este o prescurtare a lui if-else pe o singura linie
    cout << "Max: " << (a > b ? a : b) << endl;
    return 0;
}

Citire şi scriere din fişiere (BAC)

#include <iostream>
#include <fstream>    // #include TREBUIE sa fie in afara lui main()!
using namespace std;
int main() {
    ifstream fin("date.in");
    ofstream fout("date.out");
    int a, b;
    fin >> a >> b;
    fout << a + b;
    return 0;
}
La BAC

Datele sunt întotdeauna citite din fişier (date.in sau similar) şi scrise în fişier (date.out). Antrenaţi-vă cu ifstream/ofstream!

▶️ Testează codul C++ direct în browser

Editorul de mai jos îţi permite să rulezi cod C++ fără să instalezi nimic. Modifică exemplul şi apasă Run!

📦

Tipuri de date fundamentale în C++

📦 Tipuri de date — “cutii” pentru informaţie

O variabilă este o “cutie” în memorie cu un nume, un tip şi o valoare. Tipul decide câtă memorie ocupă şi ce valori poate stoca.

TipDimensiuneDomeniuExempluUtilizare BAC
int4 bytes-2.147.483.648 la 2.147.483.647int n = 42;Contoare, indici, numere întregi
long long8 bytes±9.2 × 10¹⁹long long x = 1e18;Numere mari, sume de vectori mari
double8 bytes±1.7 × 10³⁰⁸double pi = 3.14;Calcule reale, geometrie
float4 bytes±3.4 × 10³⁸float x = 3.14f;Mai puţin precis ca double — evitati la BAC
char1 byte-128 la 127 (cod ASCII)char c = 'A';Caractere, procesare texte
bool1 bytetrue / falsebool ok = true;Condiţii, flaguri
char[]n bytesşir de caracterechar s[100] = "bac";Texte, şiruri de caractere (BAC)

Constante şi converşii

// Constante — valori care nu se modifica
const int MAX = 100000;
const double PI = 3.14159265;

// Conversii intre tipuri
int a = 7, b = 2;
double rez1 = a / b;              // 3.0 (impartire intreaga!)
double rez2 = (double)a / b;      // 3.5 (conversie explicita)
double rez3 = (double)a / (double)b; // 3.5

// Dimensiunile tipurilor
cout << sizeof(int);       // 4
cout << sizeof(double);    // 8
cout << sizeof(char);      // 1

// INT_MAX si INT_MIN (din <climits>)
cout << INT_MAX;  // 2147483647
cout << INT_MIN;  // -2147483648
Atentie la overflow! int poate stoca maxim ~2 miliarde. Dacă suma sau produsul depăşeşte, folosiţi long long. Exemplu: 100.000 * 100.000 = 10¹⁰ > INT_MAX!

Operatori în C++

Aritmetici
+Adunare
-Scădere
*Înmulţire
/Împărţire (cât)
%Rest (modulo)
Relaţionali (compară)
==Egal
!=Diferit
<Mai mic
>Mai mare
<=Mai mic sau egal
>=Mai mare sau egal
Logici
&&ŞI logic (AND)
||SAU logic (OR)
!NEGATIE (NOT)
Atribuire şi prescurtat
=Atribuire
+=a += b ⇔ a = a+b
-=a -= b ⇔ a = a-b
++Incrementare (+1)
--Decrementare (-1)

Exemple practice cu operatorul %

// Modulul (%) — cel mai util operator la BAC
7 % 3   // = 1  (restul impartirii 7 la 3)
10 % 2  // = 0  (10 este par)
15 % 5  // = 0  (15 este multiplu de 5)

// Verificare par/impar
if (n % 2 == 0) cout << "par";
else cout << "impar";

// Ultima cifra a unui numar
int ultimaCifra = n % 10;

// Verificare divisibilitate
if (n % k == 0) cout << "n este divizibil cu k";
Operatorul ternar ? :

Este o prescurtare a structurii if-else pe o singură linie.

Sintaxa: conditie ? valoare_daca_adevarat : valoare_daca_fals

Exemplu: int maxim = (a > b) ? a : b; este echivalent cu:
if (a > b) maxim = a; else maxim = b;

Operatorul ternar — exemple

// Operatorul ternar (? :) — prescurtare if-else
// Sintaxa: conditie ? val_daca_true : val_daca_false
int maxim = (a > b) ? a : b;     // echivalent cu if(a>b) maxim=a; else maxim=b;

// Alt exemplu — verificare par/impar
const char* tip = (n%2==0) ? "par" : "impar";
cout << tip;
🔀

Structuri de control — fluxul programului

if / else if / else — Structuri decizionale

// if simplu
if (x > 0)
    cout << "pozitiv";

// if-else
if (n % 2 == 0)
    cout << "par";
else
    cout << "impar";

// Lant if-else if-else
if      (nota >= 9) cout << "Excelent";
else if (nota >= 7) cout << "Bine";
else if (nota >= 5) cout << "Suficient";
else                 cout << "Insuficient";

switch — mai clar pentru valori discrete

switch (ziua) {
    case 1: cout << "Luni";     break;
    case 2: cout << "Marti";    break;
    case 3: cout << "Miercuri"; break;
    default: cout << "Alta zi"; break;
}
// ATENTIE: fara break, executia "cade" in case-ul urmator!

Bucle — repetitie

// for — cand stim numarul de iteratii
for (int i=1; i<=10; i++)
    cout << i << " ";        // 1 2 3 4 5 6 7 8 9 10

// for descendent
for (int i=10; i>=1; i--)
    cout << i << " ";        // 10 9 8 ... 1

// while — cand conditia e verificata inainte
int n;
cin >> n;
while (n > 0) {
    cout << n % 10;          // afiseaza cifrele invers
    n /= 10;
}

// do-while — executat cel putin o data
int suma = 0;
do {
    int x; cin >> x;
    suma += x;
} while (x != 0);         // citeste pana la 0

// break si continue
for (int i=1; i<=100; i++) {
    if (i % 2 == 0) continue;  // sare numerele pare
    if (i > 20) break;           // iese din bucla
    cout << i << " ";             // 1 3 5 ... 19
}
📋

Programa BAC 2026 — Informatică

📋 Ce se examinează la BAC Informatică?

Examenul de Bacalaureat la Informatică testează înţelegerea algoritmilor, capacitatea de a rezolva probleme şi abilităţile de programare în C++. Structura examenului: 3 probleme din capitolele de mai jos în 3 ore.

Capitolele din programa de Informatică

⏱️ Cap 1: Complexitatea algoritmilor

Notatie Big-O, analiza timpului de executie, compararea eficientei algoritmilor. Recursivitate vs iteratie.

Include: O(1), O(log n), O(n), O(n log n), O(n²)
🔄 Cap 2: Recursivitate

Funcţii recursive, cazuri de bază şi recursiv, stiva de apeluri. Factoria, Fibonacci, turnurile Hanoi.

Include: factorial, combinari, Fibonacci, Hanoi
🌳 Cap 3: Backtracking

Generare sistematică a solutiilor, explorare şi revenire. Permutări, combinaţii, generare subset.

Include: permutari, dame, subsets, combinari
📐 Cap 4: Vectori

Array-uri 1D, sortare, căutare, algoritmi clasici pe vectori.

Include: sortare, cautare binara, interclasare, deduplicare
🔲 Cap 5: Matrici

Array-uri 2D, parcurgeri, diagonale, rotatie, operatii pe coloane/linii.

Include: parcurgere, diagonale, spirala, inmultire matrici
🔤 Cap 6: Şiruri de caractere

Prelucrarea textelor: palindrom, anagramă, căutare, funcţii cctype şi cstring.

Include: strlen, toupper, palindrom, anagrama, Caesar
📁 Cap 7: Fişiere

Citire/scriere fişiere text şi binare. Toate problemele BAC cer date din fişiere!

Include: ifstream, ofstream, getline cu fisiere

Ce trebuie să ştii înainte de BAC — checklist

✅ Elemente de bază (obligatoriu)

  • ☑ Tipuri de date: int, double, char, char[], bool
  • ☑ Operatori: aritmetici, logici, relaţionali, %
  • ☑ if/else, switch, for, while, do-while
  • ☑ Funcţii cu parametri şi valoare returnata
  • ☑ Vectori 1D: declarare, parcurgere, sortare
  • ☑ Matrici 2D: declarare, parcurgere, diagonale
  • ☑ Şiruri char[], strlen, strcpy, strcmp
  • ☑ Citire/scriere fişiere (ifstream/ofstream)

⚠️ Subiecte dificile (pct. 5-10)

  • ☐ Recursivitate: factorial, Fibonacci, Hanoi
  • ☐ Backtracking: permutări, combinaţii
  • ☐ Complexitate: Big-O, analiza buclelor
  • ☐ Căutare binară şi interclasare
  • ☐ Algoritmi pe şiruri: palindrom, anagramă
  • ☐ Sortare manuală: bubble, insert, select
  • ☐ Parcurgere spirala a matricii
  • ☐ Funcţii din <cctype>: toupper, isdigit

Structura subiectului BAC Informatică

📌 Conform programei oficiale MEN

Examenul de bacalaureat la Informatică (profil Matematică-Informatică) durează 3 ore şi are 3 subiecte, totalizând 90 puncte + 10 puncte din oficiu = 100 puncte.

SubiectNr. cerințeConţinutPunctaj
I 5 cerințe
(câte 6p)
Cerința 1: Evaluare/scriere expresii C++ (operatori, tipuri de date)
Cerința 2: Trasare algoritm — determinare valoare afișată
Cerința 3: Completare/corectare secvență de cod
Cerința 4: Analiză subprogram (recursiv sau iterativ)
Cerința 5: Complexitate algoritm (Big-O, eficiență)
30 pct
II 2-3 cerințe Scriere cod C++ complet — prelucrare vectori, matrici, şiruri de caractere, fişiere.
Se cere funcție sau program complet, compilabil şi corect. Datele se citesc din fişier.
30 pct
III 2-3 cerințe Tehnici avansate: recursivitate (trasare + scriere funcție recursivă), backtracking (generare soluții), eventual programare dinamică.
Probleme complexe cu mai multe sub-cerințe.
30 pct
10 puncte din oficiu10 pct
TOTAL100 pct
Important:

La Subiectele II și III se scrie cod C++ compilabil. Codul trebuie să includă #include, using namespace std;, funcţia main() şi citire/scriere din fişier (nu cin/cout). Punctajul se acordă parţial dacă logica este corectă dar codul nu compilează.

Sfat strategic:

Subiectul I este mai “teoretic” — studiază complexitate şi trasare algoritm. Subiectele II şi III cer cod C++ complet, compilabil şi corect. Exersează zilnic probleme de pe pbinfo.ro sau infoarena.ro!

📚 Resurse oficiale & platforme de exersare

🏛️ edu.ro — Subiecte oficiale

Subiecte şi bareme de la examenele de bacalaureat anterioare.

→ edu.ro/bacalaureat
💻 pbinfo.ro

Mii de probleme clasificate pe capitole, cu testare automată. Ideal pentru pregătire BAC.

→ pbinfo.ro
🏆 infoarena.ro

Arhivă de probleme de concurs şi olimpiadă. Nivel mediu—avansat.

→ infoarena.ro
📖 Manuale digitale

Manuale aprobate de Ministerul Educaţiei, disponibile gratuit online.

→ manual.edu.ro
⚠️

Greşeli frecvente la BAC

Acestea sunt cele mai comune greşeli pe care le fac elevii la examen. Cunoaşterea lor îţi poate salva puncte preţioase!

⚠️ int overflow — rezultat greşit fără eroare de compilare
int a = 100000, b = 100000;
cout << a * b; // rezultat: -1794967296 (greşit!)

✅ Fix: foloseşte long long când rezultatele pot depăşi ~2 miliarde.
⚠️ = în loc de == în condiţii
if (x = 5) { ... } // ATRIBUIRE, nu comparaţie!
✅ Fix: if (x == 5) — dublu egal pentru comparaţie.
⚠️ Lipsa break în switch
switch(x) { case 1: cout << "unu"; case 2: cout << "doi"; } // afişează "unudoi"!
✅ Fix: adaugă break; după fiecare case.
⚠️ Citire cu cin după getline
cin >> n; getline(cin, s); // s va fi gol — newline-ul rămas în buffer!
✅ Fix: adaugă cin.ignore(); între ele.
⚠️ Array out-of-bounds — acces în afara vectorului
int v[10]; v[10] = 5; // index valid: 0..9, nu 10!
✅ Fix: indexarea porneşte de la 0 — ultimul element valid este v[n-1].
⚠️ Împărţire întreagă în loc de reală
int a = 5, b = 2; double r = a / b; // r = 2.0, nu 2.5!
✅ Fix: double r = (double)a / b; sau double r = 1.0 * a / b;
⚠️ Uitarea datelor din fişier la BAC
cin >> n; // GREŞIT la BAC — datele vin din fişier!
✅ Fix: ifstream fin("date.in"); fin >> n;
📝

Exerciţii interactive — testează cunoştinţele de bază