Sunteți pe pagina 1din 5

CONVERSII ÎNTRE BAZE DE NUMERAŢIE

Toate calculele pe care le efectuăm zi de zi sunt efectuate în sistemul de


numeraţe zecimal, sau altfel spus în baza 10 de numeraţie.

Un număr scris în baza b, 1<b<=10 conține doar cifre cuprinse între 0 și


b-1.
Ex1. 1001 poate reprezenta un număr scris în baza 2.
Ex2. numărul 21031 nu poate fi considerat că este scris în niciuna din bazele
2,3,4 ci doar în orice bază de la 5 la 10

În general un număr scris în baza b are următoarea formă generală:


xn-1xn-2 ...x1x0(b)= xn-1*b +xn-2*b + ...x1*b +x0*b , unde xn-1,xn-2,….x1,x0[0,b-1].
n-1 n-2 1 0

2 1 0
Exemplu: dacă b=10 atunci numărul 123=1*10 +2*10 +3*10 .

Conversia unui număr din baza 10 în baza b


Trecerea unui număr de la o bază la alta presupune aflarea unei secvenţe
unice de resturi conform algoritmului următor:
· numărul se împarte la bază şi se reţine restul obţinut. Acesta constituie
ultima cifră din reprezentarea în acea bază;
· câtul obţinut în urma acestei prime împărţiri este din nou împărţit la bază şi
se reţine iaraşi restul. Acest rest constituie a doua cifră, în ordinea de la
dreapta la stânga, a reprezentării în baza aleasă.
· algoritmul continuă până când câtul obţinut este zero. Ultimul rest al
împărţirii la bază va reprezenta cea mai semnificativă cifră (prima cifra) a
numărului în baza în care s-a facut conversia.

Obs: Se împarte numărul și câturile obținute la împărțirea anterioară


succesiv la bază, iar resturile obținute se iau in ordinea inversă obținerii
lor.

Tabelul următor prezinta paşii acestui algoritm pentru trecerea numarului 25


în baza 2:
Pentru a scrie un algoritm care să realizeze această conversie vom proceda
astfel:
 citim numărul de transformat
 citim baza în care dorim să facem conversia
 începem să împărţim numărul dat la bază, iar cu resturile obţinute
formăm un nou număr(care de fapt va fi scris după regula sistemului zecimal)

Algoritm în pseudocod: //conversia din baza 10 într-o bază b din [2,10]


citeşte n,b // numere naturale, n-numărul de transformat, b-baza
m=0 // va conţine rezultatul conversiei
p=1 // puterile lui 10 iniţial 10 =1
0

┌cât timp n≠0 execută


│ r=n%b // calculez restul împărţirii numărului la bază
│ m=m+r*p // adaug r ca cifră în fața numărului nou format m
│ p=p*10 // cresc puterea lui 10
│ n=n/b // calculez câtul împărţirii numărului la bază
└■
Scrie m // valoarea numărului în baza b

Obs:Această variantă de algoritm este una didactică şi se utilizează pentru


conversii de numere naturale relativ mici, valoarea variabilei p creşte
exponenţial şi nu poate depăşi 10 cifre (eventual 20 cifre daca se declară în C+
+ numărul nou format și puterea lui 10 de tip long long).

Conversia unui număr din baza 10 în baza b

De exemplu dacă baza de numeraţie este 2 şi valoarea numărului


n=(110011)2 atunci transformarea lui în baza 10 se face astfel:

(110011)2=1*2 +1*2 +0*2 +0*2 +1*2 +1*2 =1+2+16+32=(51)10


0 1 2 3 4 5

Obs: Fiecare cifră se înmulțește cu baza la puterea egală cu numărul de


cifre de după ea și se adună valorile astfel obținute

Operaţia de trecere a unui număr scris în baza b la baza 10 se realizează după


următorul algoritm în pseudocod:

//conversia unui număr n scris baza b, în baza 10

citeşte n,b // n – numărul de transformat, b baza în care este scris n

p=1 //la spargerea unui număr în cifre se obțin cifrele de la dreapta spre
stânga

m=0 // va contine numarul în baza 10

┌cât timp n≠0 execută

│ c=n%10 // extrag cate o cifra din numarul dat

│ m=m+c*p // formez numarul adunând cifrele extrase din n înmulțite cu


puteri ale

│ // bazei
│ p=p*b // cresc puterea bazei

│ n=n/10 // elimin ultima cifra din n

└■

scrie m // valoarea numărului în baza 10

Pentru a realiza conversia unui număr din baza b1 în baza b2 vom proceda


astfel:

o transformăm numărul din baza b1în baza 10;

o transformam numărul obţinut anterior din baza 10 în baza b2.

APLICAŢII REZOLVATE

1. Se dă un număr natural n, scris în baza 10. Sa se verifice dacă numărul de


cifre de zero este egal cu numărul de cifre de 1 în reprezentarea numărului în
baza doi.

Exemplu: dacă n=(49)10 =(110001)2 are trei cifre de 1 şi trei cifre de zero, deci
pe ecran trebuie afişat „Da”;

dacă n=(54)10 =(110110)2 are patru cifre de 1 şi două cifre de zero, deci pe ecran
trebuie afişat „Nu”.

Algoritmul în pseudocod: │ n=n/2 // împart n la baza 2 si


citeşte n //număr natural dat reiau str repet
nr0=0, nr1=0 └■
┌cât timp n≠0 execută ┌dacă nr0 = nr1 atunci
│ r = n%2 │ scrie ”Da”
│ ┌dacă r = 0 atunci │altfel
│ │ nr0=nr0+1 │ scrie ”Nu”
│ │altfel └■
│ │ nr1=nr1+1
│ └■
Programul C++: else
#include< iostream> nr1++;
using namespace std; n=n/2;
int n,m,nr0,r; }
int main() if(nr0==nr1)
{ cout<<"Da";
cin>>n; else
while(n!=0) cout<<"Nu";
{r=r%2; return 0;
if(r==0) }
nr0++;

2. Se citeşte un număr natural n scris în baza b1. Scrieţi un program care să


transforme numărul în baza b2 (b1, b2 numere naturale din [2,10]) .

Exemplu: dacă n=2301, b1= 4, iar b2= 9 atunci rezultatul va fi: (216)9 


adică: (2301)4=(177)10=(216)9

// transform n din baza b1 în baza


10
p=1
m=0
┌cât timp n≠0 execută
│ r = n%10
│ m = m+r*p
│ p = p*b1
│ n = n/10
└■
// transform m din baza 10 în baza
b2
p=1
n=0
┌cât timp m≠0 execută
│ r = n%b2
│ m = m+r*p
│ p = p*10
│ n = n/b2
└■
scrie n // afişez rezultatul
Algoritmul în pseudocod:
citeşte n,b1,b2
n=n/10;
Programul C++ }
#include<iostream> //conversia lui m din baza 10 in b2
long long n,m,r,p,b1,b2; p=1;
int main() while(n!=0)
{ cin>>n; {r=m%b2;
cin>>b1>>b2; n=n+r*p;
//conversia lui n din b1 in baza 10 p=p*10;
p=1; m=m/b2;
while(n!=0) }
{r=n%10; cout<<n;
m=m+r*p; return 0;
p=p*b1; }

O altă bază de numerație cu o semnificație majoră în informatică este baza 16


(sistemul de numerație hexazecimal) care folosește ca simboluri cifrele 0-9 și
literele A-F dar despre aceasta vom discuta într-o altă lecție.

S-ar putea să vă placă și