💻
Pseudocod ↔ C++
Proba E.d) | Științele Naturii
Selectează un algoritm pentru a vedea pseudocodul BAC alături de echivalentul său în C++.
Suma cifrelor
Pseudocod BAC
n ← numărul dat
s ← 0
cât timp n ≠ 0 execută
s ← s + n mod 10
n ← n div 10
sfârşit cât timp
scrie s C++
int n, s = 0;
cin >> n;
while (n != 0) {
s = s + n % 10;
n = n / 10;
}
cout << s; 💡 n div 10 în pseudocod = n / 10 în C++ (împărțire întreagă). n mod 10 = n % 10.
Număr de cifre
Pseudocod BAC
n ← numărul dat
nr ← 0
cât timp n ≠ 0 execută
nr ← nr + 1
n ← n div 10
sfârşit cât timp
scrie nr C++
int n, nr = 0;
cin >> n;
while (n != 0) {
nr++;
n = n / 10;
}
cout << nr; 💡 Atenție: pentru n = 0 rezultatul este 0, nu 1. Dacă e necesar, tratează separat cazul n = 0.
CMMDC (Euclid)
Pseudocod BAC
a, b ← numerele date
cât timp b ≠ 0 execută
r ← a mod b
a ← b
b ← r
sfârşit cât timp
scrie a C++
int a, b, r;
cin >> a >> b;
while (b != 0) {
r = a % b;
a = b;
b = r;
}
cout << a; 💡 La final a conține CMMDC. CMMMC(a,b) = (a * b) / cmmdc(a,b). Atenție la overflow dacă a,b sunt mari — folosește long long.
Număr prim
Pseudocod BAC
n ← numărul dat
prim ← adevărat
dacă n < 2 atunci
prim ← fals
altfel
d ← 2
cât timp d * d ≤ n şi prim = adevărat execută
dacă n mod d = 0 atunci
prim ← fals
sfârşit dacă
d ← d + 1
sfârşit cât timp
sfârşit dacă
dacă prim = adevărat atunci scrie "DA"
altfel scrie "NU" C++
int n; bool prim = true;
cin >> n;
if (n < 2) {
prim = false;
} else {
for (int d = 2; d * d <= n; d++) {
if (n % d == 0) {
prim = false;
break;
}
}
}
cout << (prim ? "DA" : "NU"); 💡 Condiția d * d ≤ n este echivalentă cu d ≤ √n dar evită apelul sqrt(). Complexitate: O(√n).
Inversul unui număr
Pseudocod BAC
n ← numărul dat
inv ← 0
cât timp n ≠ 0 execută
inv ← inv * 10 + n mod 10
n ← n div 10
sfârşit cât timp
scrie inv C++
int n, inv = 0;
cin >> n;
while (n != 0) {
inv = inv * 10 + n % 10;
n = n / 10;
}
cout << inv; 💡 inv se construiește cifră cu cifră de la dreapta spre stânga. Zerorile de la final (ex: 1200 → 21) dispar automat.
Şirul Fibonacci
Pseudocod BAC
n ← numărul de termeni
a ← 0
b ← 1
scrie a, b
pentru i ← 3, n execută
c ← a + b
scrie c
a ← b
b ← c
sfârşit pentru C++
int n; cin >> n;
int a = 0, b = 1, c;
cout << a << " " << b;
for (int i = 3; i <= n; i++) {
c = a + b;
cout << " " << c;
a = b;
b = c;
} 💡 Varianta iterativă, O(n). Atenție: crește rapid — pentru n > 45 depășești int, folosește long long.
Sortare prin selecţie
Pseudocod BAC
v[1..n] ← vectorul dat
pentru i ← 1, n-1 execută
min ← i
pentru j ← i+1, n execută
dacă v[j] < v[min] atunci
min ← j
sfârşit dacă
sfârşit pentru
dacă min ≠ i atunci
aux ← v[min]
v[min] ← v[i]
v[i] ← aux
sfârşit dacă
sfârşit pentru C++
int v[101], n;
cin >> n;
for (int i = 1; i <= n; i++) cin >> v[i];
for (int i = 1; i <= n - 1; i++) {
int min = i;
for (int j = i + 1; j <= n; j++)
if (v[j] < v[min]) min = j;
if (min != i) {
int aux = v[min];
v[min] = v[i];
v[i] = aux;
}
} 💡 Complexitate: O(n²). La BAC vectorii sunt de obicei indexați de la 1. Schimbul se face cu o variabilă auxiliară aux.
Sortare prin inserţie
Pseudocod BAC
v[1..n] ← vectorul dat
pentru i ← 2, n execută
aux ← v[i]
j ← i - 1
cât timp j ≥ 1 şi v[j] > aux execută
v[j+1] ← v[j]
j ← j - 1
sfârşit cât timp
v[j+1] ← aux
sfârşit pentru C++
int v[101], n;
cin >> n;
for (int i = 1; i <= n; i++) cin >> v[i];
for (int i = 2; i <= n; i++) {
int aux = v[i], j = i - 1;
while (j >= 1 && v[j] > aux) {
v[j + 1] = v[j];
j--;
}
v[j + 1] = aux;
} 💡 Eficient pe date aproape sortate. Complexitate: O(n²) în cazul defavorabil, O(n) în cazul favorabil (deja sortat).
Căutare binară
Pseudocod BAC
v[1..n] ← vector sortat crescător
x ← valoarea căutată
st ← 1, dr ← n, poz ← -1
cât timp st ≤ dr execută
mij ← (st + dr) div 2
dacă v[mij] = x atunci
poz ← mij
st ← dr + 1
altfel dacă v[mij] < x atunci
st ← mij + 1
altfel
dr ← mij - 1
sfârşit dacă
sfârşit cât timp
scrie poz C++
int v[101], n, x;
cin >> n;
for (int i = 1; i <= n; i++) cin >> v[i];
cin >> x;
int st = 1, dr = n, poz = -1;
while (st <= dr) {
int mij = (st + dr) / 2;
if (v[mij] == x) {
poz = mij; st = dr + 1;
} else if (v[mij] < x) {
st = mij + 1;
} else {
dr = mij - 1;
}
}
cout << poz; 💡 Funcționează DOAR pe vector sortat. Complexitate: O(log n). poz = -1 înseamnă că x nu există în vector.