Școala Româno-Britanică
Modulul 3 Clasa a IX-a | Python

Ora 6: Transformarea numerelor dintr-o bază în alta

Ce vei învăța astăzi: Din baza 10 în baza 2 și invers

Rezultat practic: Transformi numere între baza 10 și baza 2, înțelegând reprezentarea în memorie (Competența 2.2).

Competența 2.2 Săptămâna 15

Înainte de a începe

De ce contează? Sistemele de numerație cu baza 2 (sistemul binar, care folosește doar cifrele 0 și 1) stau la baza întregii tehnologii informatice: procesoarele lucrează cu valori binare (reprezentate prin 0 și 1), iar conversiile apar în mod constant în programe și la concursuri.

Ce știi deja?

Știi deja cum funcționează % și // de la operațiile cu cifre. Calculează resturile împărțirilor succesive ale lui 10 la 2: ce succesiune de resturi obții?

Ideea-cheie: Din baza 10 în baza 2 coborâm numărul cu împărțiri repetate la 2, iar resturile, citite de la ultimul la primul, formează reprezentarea binară; invers, z = z * 2 + cifra reconstruiește numărul.
SINTEZĂ TEORETICĂ ȘI EXEMPLE GHIDATE

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 numerelor în baza 2
Din baza 10 în baza 2 prin împărțiri
Din baza 2 în baza 10
Exemple: 10 = 1010(2), 1011(2) = 11

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

ALGORITMUL Conversia din baza 10 în baza 2 citește n b <- "" // șirul binar, inițial gol cât timp n > 0 execută b <- (n % 2) + b // adăugăm restul la stânga n <- n // 2 sfârșit cât timp scrie b
Python - conversia în baza 2 (ca șir de caractere)
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

Python - conversia din baza 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:
2 rest %

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:

Ai grijă la: resturile împărțirilor la 2 se citesc în ordine inversă: primul rest este cifra cea mai puțin semnificativă. Dacă le afișezi în ordinea obținerii, pentru 10 obții 0101 în loc de 1010(2).

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.

APLICARE ȘI REZOLVARE DE PROBLEME

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:
  1. Pornim cu un șir gol b = ""
  2. Cât timp n > 0, adăugăm la stânga restul n % 2
  3. Eliminăm ultima cifră cu n = n // 2
  4. 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:
  1. Citim șirul s cu input()
  2. Parcurgem fiecare caracter și aplicăm formula z = z * 2 + int(cifra)
  3. 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ȚII PRACTICE

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

Algoritmul cheie - pseudocod

ALGORITMUL Conversia din baza 10 în baza 2 citește n b <- "" cât timp n > 0 execută b <- (n % 2) + b n <- n // 2 sfârșit cât timp scrie b ALGORITMUL Conversia din baza 2 în baza 10 citește s (șir binar) z <- 0 pentru fiecare cifră c din s execută z <- z * 2 + c sfârșit pentru scrie z

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

Sfaturi practice și trucuri

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).