InfoBook.ro ← Harta anului
Modul 05b · Funcții C++ & STL
Modul 05b · C++ STL

Nu reinventa roata: biblioteca standard C++

Sute de funcții gata scrise, testate de milioane de programatori: matematică, algoritmi pe vectori, formatare. Fiecare cu definiție, sintaxă și exemplu — plus laboratoare live în care le încerci chiar aici, în pagină.

🎯 Obiectiv 1Folosești funcțiile din cmath: sqrt, pow, rotunjiri, logaritmi.
🎯 Obiectiv 2Aplici algoritmii standard: min, max, swap, sort, find, count, reverse, fill.
🎯 Obiectiv 3Formatezi afișarea (setprecision) și cunoști limitele tipurilor (INT_MAX).
1

Funcții matematice — <cmath>

Se includ cu #include <cmath> la începutul programului.

abs(x) — valoare absolută

Distanța până la 0, fără semn.

abs(-7) // 7
abs(-2.8) // 2.8

sqrt(x) — radical

√x; argumentul trebuie ≥ 0; rezultatul e double.

sqrt(25) // 5
sqrt(2) // 1.41421

pow(baza, exp) — putere

bazaexp; argumente și rezultat double.

pow(2, 10) // 1024
pow(9, 0.5) // 3 = sqrt(9)

ceil / floor / round — rotunjiri

În sus · în jos · la cel mai apropiat (0.5 → sus).

ceil(3.2) // 4 floor(3.8) // 3
ceil(-3.2) // -3 round(3.5) // 4

trunc(x) — trunchiere

Taie zecimalele, fără rotunjire. Diferă de floor la negative!

trunc(3.9) // 3
trunc(-3.9) // -3 (floor: -4!)

fmod(x, y) — rest real

Restul împărțirii pentru numere reale (% merge doar pe întregi).

fmod(7.5, 2.0) // 1.5
fmod(10.3, 3.0) // 1.3

log(x), log10(x), log2(x) — logaritmi

Natural (baza e) · baza 10 · baza 2. Truc de BAC: numărul de cifre ale lui n = (int)log10(n) + 1.

log10(1000) // 3 log2(1024) // 10 log(1) // 0
int n = 4738; cout << (int)log10(n) + 1; // 4 cifre

🎛 Laborator cmath — încearcă orice funcție, live

x =
2

Algoritmi standard — <algorithm>

Operațiile pe care altfel le-ai scrie de mână: minim, maxim, interschimbare, sortare, căutare — gata făcute și rapide.

min(a, b) · max(a, b)

Minimul / maximul a două valori de același tip. Cu acolade (C++11): min din oricâte.

min(5, 3) // 3
min({5, 2, 8}) // 2

swap(a, b)

Interschimbă două variabile, orice tip — fără variabilă auxiliară scrisă de tine.

int a = 5, b = 3;
swap(a, b); // a=3, b=5

sort(v, v + n)

Sortează crescător [început, sfârșit). O(n·log n) — detalii în Modulul 09.

sort(v, v + n);
sort(v, v+n, greater<int>()); // desc
sort(v+1, v+4); // doar pozițiile 1..3

find(v, v + n, val)

Prima apariție a lui val; returnează pointer — sau v+n dacă nu există.

int *p = find(v, v+4, 30);
if (p != v+4) cout << p - v; // poziția

count(v, v + n, val)

De câte ori apare val în interval.

int v[] = {1,3,5,3,3,7};
count(v, v+6, 3) // 3

reverse · fill

Inversează ordinea · setează toate elementele la o valoare.

reverse(v, v+5); // {5,4,3,2,1}
fill(v, v+10, 0); // toate = 0

🧪 Laborator <algorithm> — operează pe un vector viu

v = x =
alege o operație 👆
3

Alte biblioteci utile

Nu au nevoie de un capitol întreg — dar le vei folosi mereu.

<climits> — limitele tipurilor

INT_MAX = 2 147 483 647 · INT_MIN = −2 147 483 648 · LLONG_MAX ≈ 9,2·10¹⁸

int minim = INT_MAX;
int maxim = INT_MIN;
// inițializări sigure pt. min/max

<iomanip> — formatare

fixed + setprecision(n) = exact n zecimale · setw(n) = lățime minimă (coloane).

cout << fixed << setprecision(2)
<< 3.14159; // 3.14
cout << setw(5) << i;

📚 Tabel recapitulativ — ce bibliotecă include ce

BibliotecăFuncții principale
<cmath>abs, sqrt, pow, ceil, floor, round, fmod, log, log10, log2, trunc
<algorithm>min, max, swap, sort, find, count, reverse, fill
<climits>INT_MAX, INT_MIN, LLONG_MAX
<iomanip>fixed, setprecision, setw
În clasa a X-a se adaugă la trusă: <cstring> și <string> (șiruri de caractere), <cctype> (teste pe caractere) și <sstream> — le înveți odată cu șirurile.
4

Exerciții rezolvate

Două probleme complete care combină funcțiile de mai sus — exact ca la laborator.

1 · Distanța dintre două puncte (sqrt, pow, setprecision)

1double x1, y1, x2, y2;
2cin >> x1 >> y1 >> x2 >> y2;
3double dist = sqrt(pow(x2-x1, 2)
4 + pow(y2-y1, 2));
5cout << fixed << setprecision(2) << dist;

Input: 0 0 3 4 → Output: 5.00

2 · Sortare + afișare formatată (sort, setprecision)

1int n; cin >> n;
2double v[100];
3for (int i = 0; i < n; i++) cin >> v[i];
4sort(v, v + n);
5cout << fixed << setprecision(1);
6for (int i = 0; i < n; i++) {
7 if (i > 0) cout << ", ";
8 cout << v[i]; }

3.7 1.2 5.0 2.8 → 1.2, 2.8, 3.7, 5.0

5

Test interactiv — funcții C++ & STL

5 întrebări rapide. Fiecare are răspunsul într-una din secțiunile de mai sus.

6

Fișa de sinteză

Biblioteca standard, pe scurt.

cmath: abs, sqrt, pow, ceil/floor/round/trunc, fmod, log10 — nr. de cifre = (int)log10(n)+1.
algorithm: min, max, swap, sort(v, v+n), find, count, reverse, fill — jumătate din BAC-ul practic.
swap(a, b) interschimbă două variabile — fără variabilă auxiliară scrisă de tine.
climits: INT_MAX / INT_MIN — inițializări sigure pentru min/max.
iomanip: fixed + setprecision(n) pentru zecimale exacte — cerință frecventă în enunțuri.
Regulă de aur: înainte să scrii o funcție de mână, întreabă-te: nu există deja în STL?
Exersează pe pbinfo.ro — câte o problemă pentru fiecare familie de funcții:
#10 · ușoară

maxim2

Se citesc două numere — afișați maximul lor. (min/max)

Rezolvă pe pbinfo.ro →
#113 · ușoară

distanta

Distanța dintre două puncte date prin coordonate. (sqrt, pow)

Rezolvă pe pbinfo.ro →
#390 · medie

ordonare

Sortați un vector de numere întregi crescător. (sort)

Rezolvă pe pbinfo.ro →
#192 · ușoară

rotunjire

Rotunjiri și trunchieri ale numerelor reale. (ceil, floor, round)

Rezolvă pe pbinfo.ro →
← anteriorModul 05a · Subprograme urmează →Modul 05c · Funcții Python & clasa list