Informatică BAC: parcurs cu 50 de lecții
Pregătește informatica pentru BAC în 50 de lecții: algoritmi, tablouri, texte, subprograme și grafuri. Exersează prin exemple, grile și fișe de verificare.
Înapoi la blog

21 octombrie 2026
6 min citire
Conversia între baze de numerație are două direcții pe care este bine să le separi: dintr-o bază în valoarea numerică a numărului și din valoarea numerică într-o reprezentare într-o altă bază. Prima direcție folosește valorile pozițiilor. A doua poate folosi împărțiri repetate și resturi.
Pentru exercițiile de algoritmică, vom lucra cu baze între doi și zece și cu numere naturale. Astfel, fiecare cifră se poate scrie folosind un caracter obișnuit între zero și nouă. Nu confundăm șirul de caractere care reprezintă numărul cu valoarea lui, distincție utilă când rezolvi subiecte de BAC la informatică.
În baza zece, pozițiile de la dreapta spre stânga au valorile unu, zece, o sută și așa mai departe. În baza doi, valorile sunt unu, doi, patru, opt, șaisprezece. Fiecare poziție are valoarea poziției din dreapta înmulțită cu baza.
Cifrele permise sunt strict mai mici decât baza. În baza doi poți folosi doar zero și unu. În baza cinci poți folosi cifrele de la zero la patru. O scriere care conține cifra șapte nu este validă în baza șase, indiferent dacă restul cifrelor sunt corecte.
De exemplu, scrierea 1011 în baza doi reprezintă valoarea unsprezece în baza zece. Contribuțiile pozițiilor sunt opt, zero, doi și unu. Nu este numărul o mie unsprezece: aceeași succesiune de simboluri primește altă valoare când schimbăm baza.
Pentru scrierea 2301 în baza patru, pornim de la dreapta. Ultima cifră contribuie cu unu. Următoarea cifră este zero și nu contribuie. Cifra trei se află pe poziția cu valoarea șaisprezece, deci contribuie cu 48. Prima cifră contribuie cu două ori 64, adică 128.
Totalul este 177. Tabelul te ajută să verifici ordinea puterilor fără să memorezi rezultatul.
| Cifră, de la stânga | Valoarea poziției | Contribuție |
|---|---|---|
| 2 | 64 | 128 |
| 3 | 16 | 48 |
| 0 | 4 | 0 |
| 1 | 1 | 1 |
Prima poziție din dreapta folosește întotdeauna puterea zero, adică unu. Dacă începi direct cu baza, toate contribuțiile sunt deplasate și rezultatul devine de un număr de ori mai mare egal cu baza.
Poți evita calcularea separată a puterilor. Pornești rezultatul de la zero. Pentru fiecare cifră, înmulțești rezultatul curent cu baza și adaugi cifra nouă. Pentru 2301 în baza patru, valorile succesive sunt doi, unsprezece, 44 și 177.
Regula funcționează deoarece adăugarea unei cifre la dreapta deplasează toate cifrele deja citite cu o poziție. Fiecare contribuție veche se înmulțește cu baza. Cifra nouă ocupă poziția unităților și se adaugă separat.
Dacă reprezentarea este citită ca șir de caractere, transformi fiecare caracter în cifra lui numerică și verifici că este permisă în baza aleasă. Cazurile cu reprezentări foarte lungi cer și verificarea depășirii tipului numeric. Metoda matematică rămâne corectă, dar un tip cu capacitate limitată nu poate păstra orice rezultat.
Împărțim 45 la doi. Restul este unu, iar câtul este 22. Împărțim apoi 22 la doi, obținând restul zero și câtul unsprezece. Continuăm până când câtul devine zero.
| Valoare împărțită | Cât | Rest |
|---|---|---|
| 45 | 22 | 1 |
| 22 | 11 | 0 |
| 11 | 5 | 1 |
| 5 | 2 | 1 |
| 2 | 1 | 0 |
| 1 | 0 | 1 |
Resturile apar de la cifra cea mai puțin semnificativă spre cea mai semnificativă. Citindu-le de jos în sus, obții 101101. Verificarea prin poziții dă 32 plus opt plus patru plus unu, adică 45.
Ordinea resturilor este principala capcană. Dacă le afișezi imediat, obții reprezentarea inversată. Unele numere au o reprezentare simetrică și pot ascunde eroarea; de aceea, nu testa programul numai pe astfel de exemple.
Programul citește un număr natural de cel mult un miliard și o bază între doi și zece. Memorează cifrele obținute într-un tablou, apoi le afișează în ordine inversă. Dimensiunea aleasă este suficientă pentru domeniul precizat.
#include <iostream>
using namespace std;
int main() {
unsigned int n, baza;
cin >> n >> baza;
unsigned int cifre[32];
int k = 0;
do {
cifre[k++] = n % baza;
n /= baza;
} while (n > 0);
for (int i = k - 1; i >= 0; --i)
cout << cifre[i];
return 0;
}
Bucla cu test final tratează direct și numărul zero: salvează o cifră zero, apoi se oprește. O buclă care ar testa de la început dacă numărul este pozitiv nu ar salva nicio cifră pentru această intrare.
Programul presupune că datele respectă domeniul declarat. Dacă baza ar fi unu, împărțirea nu ar reduce valoarea pozitivă și algoritmul nu s-ar termina. Dacă baza ar fi zero, operațiile de împărțire și rest nu ar fi valide. Condiția asupra bazei este deci parte din corectitudinea soluției.
O soluție fragilă încearcă să construiască un număr zecimal ale cărui cifre arată ca reprezentarea binară. Pentru valori mai mari, acea scriere poate avea prea multe cifre pentru tipul ales, chiar dacă valoarea inițială încape fără probleme.
Mai sigur este să păstrezi cifrele într-un tablou sau într-un șir de caractere, apoi să le afișezi. Cerința solicită de obicei o reprezentare, nu o nouă valoare interpretată în baza zece. De asemenea, dacă trebuie păstrat un număr fix de poziții, zerourile de la început au semnificație pentru afișare, chiar dacă nu schimbă valoarea numerică.
Pentru o conversie între baza trei și baza cinci, poți calcula întâi valoarea numerică folosind prima bază, apoi poți construi reprezentarea folosind a doua bază. De exemplu, 102 în baza trei înseamnă unsprezece în baza zece. Numărul unsprezece se scrie 21 în baza cinci.
Verificarea se poate face în ambele direcții: unu ori nouă plus zero ori trei plus doi este unsprezece, iar doi ori cinci plus unu este tot unsprezece. Nu schimbi cifrele printr-o corespondență izolată; conversia privește valoarea întregului număr.
Convertește 26 în baza trei. Împărțirile produc succesiv resturile doi, doi și doi. Reprezentarea este 222. Verificarea dă 18 plus șase plus doi, adică 26.
Interpretează 10010 în baza doi. Contribuțiile nenule sunt șaisprezece și doi, deci rezultatul este 18. Zerourile nu se elimină înainte de calcul, deoarece pozițiile lor stabilesc valorile celorlalte cifre.
Este validă scrierea 305 în baza cinci? Nu, deoarece cifra cinci nu este permisă. Verificarea cifrelor precedă conversia. Un program care calculează oricum o sumă nu a validat reprezentarea.
Cum se scrie zero în orice bază permisă? Ca o singură cifră zero, dacă nu se cere explicit un număr fix de poziții. Absența afișării nu este o reprezentare corectă a lui zero.
Pentru a fixa metodele, explică separat de ce extragi resturi și de ce inversezi ordinea. Acest tip de justificare urmează principiul din materialul despre memorare și înțelegere.
La împărțirea unui număr natural la o bază pozitivă, restul este între zero și baza minus unu. Acesta este exact intervalul cifrelor permise.
Există și alte variante, inclusiv construcția unui șir sau afișarea recursivă. Alege structura permisă și potrivită cerinței. Tabloul face ordinea cifrelor ușor de verificat.
Lucrează o conversie în fiecare direcție, un număr cu zerouri interioare și cazul zero. Dacă apar erori de poziționare, poți cere feedback punctual unui profesor de informatică.
Official curriculum reference
Official curriculum reference (www.edu.ro)Folosim cookie-uri pentru a îmbunătăți experiența ta pe Hola25. Cookie-urile esențiale sunt necesare pentru funcționarea platformei. Poți personaliza setările pentru cookie-uri de analiză și marketing.
Politica de cookies | Politica de confidențialitatePregătește informatica pentru BAC în 50 de lecții: algoritmi, tablouri, texte, subprograme și grafuri. Exersează prin exemple, grile și fișe de verificare.

Înțelege complexitatea buclelor la BAC. Compară parcurgeri succesive, imbricate și împărțiri repetate, apoi justifică timpul și memoria algoritmului.