Ce vei învăța astăzi?
După această lecție vei ști să transformi un număr din baza 10 în baza 2 și din baza 2 în baza 10.
Reprezentarea în baza 2
Definiție: În baza 2 (sistemul binar) folosim doar cifrele 0 și 1. Calculatoarele lucrează cu valori binare, pentru că un circuit electric poate fi pornit (1) sau oprit (0).
Fiecare poziție din numărul binar reprezintă o putere a lui 2 (2 înmulțit cu el însuși de mai multe ori, de exemplu 8 = 2^3): de la dreapta la stânga, 1, 2, 4, 8, 16 si asa mai departe.
Analogie
Gândește-te la un întrerupător de lumină: poate fi aprins sau stins, adică 1 sau 0. Un număr binar este ca o linie de întrerupătoare, fiecare reprezentând o putere a lui 2.
Din baza 10 în baza 2
Algoritmul: Împărțim repetat numărul la 2 și reținem resturile împărțirilor. Cifrele binare se citesc în ordine inversă (de la ultimul rest la primul).
De exemplu: 10 : 2 = 5 rest 0; 5 : 2 = 2 rest 1; 2 : 2 = 1 rest 0; 1 : 2 = 0 rest 1. Citim resturile invers: 1010. Deci 10 = 1010(2).
Exemplu: conversia lui 10 în binar
n = 10
b = ""
while n > 0:
b = str(n % 2) + b
n = n // 2
print(b)
Observă: restul n % 2 se adaugă la stânga șirului, astfel încât ultimul rest ajunge primul. Rezultatul afișat: 1010.
Din baza 2 în baza 10
Algoritmul: Înmulțim fiecare cifră binară cu puterea lui 2 corespunzătoare poziției sale și adunăm rezultatele. Din stânga, folosim formula z = z * 2 + cifra.
De exemplu: 1011(2) = 1*8 + 0*4 + 1*2 + 1*1 = 8 + 0 + 2 + 1 = 11.
Exemplu: 1011(2) în baza 10
s = "1011"
z = 0
for ch in s:
z = z * 2 + int(ch)
print(z)
Observă: parcurgem șirul de la stânga la dreapta și construim valoarea pas cu pas. Rezultatul afișat: 11.
Exemple de conversii
| Baza 10 | Baza 2 |
|---|---|
| 0 | 0 |
| 1 | 1 |
| 2 | 10 |
| 4 | 100 |
| 10 | 1010 |
| 11 | 1011 |
Exercițiu de completare
Completează afirmațiile despre conversii:
Pentru a transforma un număr din baza 10 în baza 2 îl împărțim repetat la ______ și reținem ______urile împărțirilor. Restul se obține cu n ______ 2. Cifrele binare se citesc în ordine inversă.
Bancă de cuvinte:
Test de înțelegere
Test rapid - conversii:
1. Numărul 4 în baza 2 este:
2. Numărul 1010(2) este egal cu:
3. Pentru a converti un număr în baza 2, împărțim la:
Test de înțelegere - suplimentar
Test rapid suplimentar - conversii între baze:
1. Numărul 6 în baza 2 este:
2. Numărul 1101(2) este egal cu:
3. Resturile împărțirilor, la conversia în baza 2, se scriu:
Aprofundare
Cazul n = 0: bucla while n > 0 nu se execută pentru n = 0, iar șirul b rămâne gol. În realitate, 0 se reprezintă în binar tot cu cifra 0, deci problemele cer uneori tratarea specială: dacă n = 0, afișăm "0".
Conversia în alte baze: același algoritm funcționează pentru orice bază b (8, 16 etc.): împărțim la b și reținem resturile. Pentru bazele mai mari decât 10, cifrele 10, 11, 12, ... se notează cu litere (A, B, C, ...), deci la conversia în baza 16 trebuie să transformăm resturile mai mari decât 9 în caractere.
De ce computerul folosește baza 2: un circuit electric are două stări stabile - curent trece (1) sau nu trece (0). Orice valoare din memorie, orice imagine sau sunet este, la nivel fizic, un șir de biți. Înțelegerea conversiilor ne arată cum funcționează stocarea datelor.
Eficiența conversiei: numărul de resturi obținut este egal cu numărul de biți ai reprezentării, adică aproximativ log2(n). Pentru n sub un miliard, bucla rulează de cel mult 30 de ori, deci algoritmul este extrem de rapid.
Metoda înmulțirilor pentru baza 2: pentru conversia din baza 2 în baza 10 putem folosi și formula cu puteri: 1011(2) = 1*2^3 + 0*2^2 + 1*2^1 + 1*2^0 = 11. Metoda z = z * 2 + cifra este echivalentă și mai ușor de scris în cod.
PbInfo - Conversia în baza 2
Enunț:
Cerință: Se citește un număr natural n. Să se afișeze reprezentarea în baza 2 a lui n.
Date de intrare:
Programul citește de la tastatură numărul n.
Date de ieșire:
Programul va afișa pe ecran reprezentarea binară a lui n.
Restricții și precizări:
Numerele citite sunt numere naturale, cu valori mai mici decât 10^9.
Exemplu:
Intrare:
10
Ieșire:
1010
Cum gândim soluția:
- Pornim cu un șir gol b = ""
- Cât timp n > 0, adăugăm la stânga restul n % 2
- Eliminăm ultima cifră cu n = n // 2
- Afișăm șirul b
Scrie soluția în Python:
Soluție corectă:
n = int(input())
b = ""
while n > 0:
b = str(n % 2) + b
n = n // 2
print(b)
Ce învățăm: resturile împărțirilor la 2 se adaugă la stânga șirului, pentru a le citi în ordinea corectă.
PbInfo - Conversia din baza 2 în baza 10
Enunț:
Cerință: Se citește un șir de cifre 0 și 1, reprezentând un număr în baza 2. Să se afișeze valoarea numărului în baza 10.
Date de intrare:
Programul citește de la tastatură șirul binar.
Date de ieșire:
Programul va afișa pe ecran valoarea numărului în baza 10.
Restricții și precizări:
Numerele citite sunt numere naturale, cu valori mai mici decât 10^9.
Exemplu:
Intrare:
1011
Ieșire:
11
Cum gândim soluția:
- Citim șirul s cu
input() - Parcurgem fiecare caracter și aplicăm formula
z = z * 2 + int(cifra) - Afișăm valoarea z
Scrie soluția în Python:
Soluție corectă:
s = input()
z = 0
for ch in s:
z = z * 2 + int(ch)
print(z)
Ce învățăm: parcurgând șirul de la stânga la dreapta și înmulțind cu 2 la fiecare pas reconstruim valoarea în baza 10.
Exercițiul Practic: Conversii între baze
Sarcini de lucru
Completează următoarele sarcini pentru a-ți consolida cunoștințele despre conversii
Sarcina 1: Transformă n în baza 2 ca număr
Cerință: Scrie un program care citește un număr n și afișează reprezentarea în baza 2 ca număr (fără zerouri în față), construind oglinditul resturilor.
Soluție pentru Sarcina 1:
n = int(input())
og = 0
p = 1
while n > 0:
r = n % 2
og = og + r * p
p = p * 10
n = n // 2
print(og)
Verifică: pentru n = 10 se afișează 1010. Construim numărul binar cu ajutorul puterilor lui 10.
Sarcina 2: Validează și transformă un șir binar
Cerință: Scrie un program care citește un șir de caractere, verifică dacă este un șir binar valid (doar 0 și 1) și, dacă este valid, îl transformă în baza 10.
Soluție pentru Sarcina 2:
s = input()
valid = True
for ch in s:
if ch != "0" and ch != "1":
valid = False
if not valid:
print("SIR INVALID")
else:
z = 0
for ch in s:
z = z * 2 + int(ch)
print(z)
Verifică: pentru 1011 se afișează 11; pentru 1021 se afișează SIR INVALID.
Scrie pe caiet - De reținut
Titlul lecției
Transformarea numerelor dintr-o bază în alta.
Definiția lecției
Lecția ne învață să transformăm numere dintr-o bază de numerație în alta, în special între baza 10 și baza 2, sistemul binar folosit de calculatoare. Din baza 10 în baza 2 împărțim repetat numărul la 2 și reținem resturile, care se citesc de la ultimul la primul; din baza 2 în baza 10 reconstruim valoarea cu formula z = z * 2 + cifra, parcurgând șirul de la stânga la dreapta. În baza 2 folosim doar cifrele 0 și 1, iar fiecare poziție reprezintă o putere a lui 2. În viața reală, conversiile explică stocarea datelor în memorie: orice valoare, imagine sau sunet este, la nivel fizic, un șir de biți. De exemplu, 10 în baza 2 este 1010, iar 1011 în baza 2 este 11 în baza 10.
Definiții esențiale
- Baza 2 (binar) folosește doar cifrele 0 și 1; fiecare poziție reprezintă o putere a lui 2.
- Din baza 10 în baza 2: împărțiri repetate la 2, resturile se citesc de la ultimul la primul.
- Din baza 2 în baza 10:
z = z * 2 + cifra, parcurgând șirul de la stânga la dreapta. - Exemple: 10 = 1010(2), 11 = 1011(2), 1011(2) = 11.
Algoritmul cheie - pseudocod
Algoritmul cheie - cod Python
n = int(input())
b = ""
while n > 0:
b = str(n % 2) + b
n = n // 2
print(b)
s = input()
z = 0
for ch in s:
z = z * 2 + int(ch)
print(z)Greșeli comune de evitat
- Adăugarea restului la dreapta șirului:
b = b + str(n % 2)dă cifrele în ordine greșită. - Uitarea conversiei la șir:
b = str(n % 2) + b, nub = (n % 2) + b. - Confuzia între
% 2(restul = cifra binară) și// 2(elimină ultima cifră binară). - La conversia inversă, folosirea lui
int(s)în loc de parcurgerea cifră cu cifră cuint(ch).
Sfaturi practice și trucuri
- Verifică pe hârtie: 10 : 2 = 5 r 0; 5 : 2 = 2 r 1; 2 : 2 = 1 r 0; 1 : 2 = 0 r 1; resturile invers: 1010.
- Puterile lui 2 de reținut: 2^0=1, 2^1=2, 2^2=4, 2^3=8, 2^4=16, 2^5=32, 2^6=64.
- Orice număr de forma 2^k are în binar un 1 urmat de k zerouri: 8 = 1000(2).
- Același algoritm al împărțirilor repetate funcționează pentru orice bază, nu doar pentru 2.
Exemplu practic
Transformăm 13 din baza 10 în baza 2, exact cum un calculator stochează valoarea în memorie:
n = 13
b = ""
while n > 0:
b = str(n % 2) + b
n = n // 2
print(b)Programul afișează 1101, adică 13 = 1101(2).