Sunteți pe pagina 1din 19

Conversii

! Sisteme de numera!ie
! Conversii ntre dou" baze de numera!ie
! Opera!ii cu numere naturale n diverse baze de
numera!ie
! Criterii de divizibilitate n diverse baze de numera!ie
! Implement"ri sugerate
! Probleme propuse
! Solu!iile problemelor
Capitolul
5



5.1. Sisteme de numera!ie
Prin sistem de numera!ie n!elegem ansamblul regulilor de grupare a elementelor unei
mul!imi finite cu scopul num"r"rii lor #i a regulilor de reprezentare simbolic" a num"-
rului ob!inut.
Simbolurile (semnele grafice) cu ajutorul c"rora se reprezint" numerele se numesc
cifre.
n func!ie de modul de grupare #i de ordonare a semnelor care se folosesc pentru
reprezentarea simbolic" a numerelor, deosebim sistemele aditive de sistemele pozi!io-
nale.
Printre sistemele de numera!ie aditive se num"r" sistemul de numera!ie egiptean #i
sistemul de numera!ie roman.
Sistemul de numera!ie roman folose#te #apte semne distincte, numite cifre romane.

I V X L C D M
1 5 10 50 100 500 1000

Dintre cele #apte, cifrele I, X, C #i M nu se pot repeta (scriind al"turat) de mai mult
de trei ori n descrierea unui num"r.
Ini!ial sistemul de formare a numerelor romane era bazat strict pe adunare. Cifrele
unui num"r se a#ezau n ordine descresc"toare a valorilor, iar valoarea num"rului se
calcula prin nsumarea tuturor valorilor cifrelor.

Exemplu
MDXXI = 1000 + 500 + 10 + 10 + 1 = 1521
5. Conversii 103

Astfel, unele numere aveau o reprezentare foarte lung" #i pentru a le scurta, s-a in-
trodus varianta de reprezentare prin diferen!". Dac" una din cifrele I, X sau C se afl"
naintea unei cifre cu valoare mai mare, atunci valoarea cifrei respective va fi sc"zut"
din valoarea cifrei mai mari.

Exemple
IV = 5 1 = 4; IX = 10 1 = 9; XL = 50 10 = 40

Aceste forme de reprezentare sunt supuse ctorva restric!ii, care asigur" unicitatea
reprezent"rii unui num"r. De exemplu:
1. Cifrele I, X, C sau M nu se pot repeta pe mai mult de trei pozi!ii consecutive;
2. Cifrele V, L #i D nu se pot repeta;
3. Numai cifrele I, X, #i C pot fi sc"zute;
4. Numai valoarea unei singure cifre poate fi sc"zut" (de exemplu num"rul IIIV nu
exist");
5. Cifra sc"zut" trebuie s" aib" o valoare de cel pu!in o zecime din cifra din care se
scade (de exemplu num"rul ID nu exist").

Cel mai mare num"r pe care l putem reprezenta, folosind aceste simboluri #i res-
pectnd regulile de mai sus este: MMMCMXCIX = 3999. Datorit" faptului c" numerele
romane sunt foarte lungi, opera!iile cu numere astfel reprezentate se efectueaz" greoi.
Observ"m c" o cifr" din cadrul unui astfel de num"r are aceea"i valoare absolut#
indiferent de pozi!ia pe care o ocup#.

Cel mai r"spndit sistem de numera!ie n zilele noastre este sistemul zecimal care
utilizeaz" zece simboluri: 0,1, 2, 3, 4, 5, 6, 7, 8, 9, numite cifre arabe.
Num"rul simbolurilor reprezint" baza sistemului de numera!ie.
Sistemul zecimal este un sistem de numera!ie pozi!ional, adic" pozi!ia unei cifre n
num"r indic" rangul acesteia. Valoarea rangului precizeaz" cu ce putere a lui 10 se va
nmul!i cifra pentru a determina valoarea num"rului.
Pentru a nu se produce confuzii ntre dou" numere scrise n sisteme de numera!ie
pozi!ionale diferite, s-a convenit ca fiec"rui num"r s" i se ata#eze un indice corespun-
z"tor bazei de numera!ie n care este scris.

Exemplu
273
10
= 2 ! 10
2

+ 7 ! 10
1

+ 3 ! 10
0
(se va citi: dou" sute #apte zeci #i trei)

Orice num"r natural n poate fi scris n sistemul zecimal n mod unic n forma:
n = a
n
a
n 1
a
0
, unde a
i
(i = 1, 2, ..., n) sunt cifre din mul!imea {0, 1, 2, , 9}, iar
valoarea lui n este dat" de suma: a
n
! 10
n
+ a
n 1
! 10
n 1
+ + 10
0
! a
0
.

104 5. Conversii

Pentru a defini un sistem de numera!ie se descrie mul!imea de simboluri folosit" n
reprezentare, regulile de grupare a simbolurilor n num"r #i se prezint" opera!iile defi-
nite pe mul!imea numerelor reprezentate n sistemul de numera!ie respectiv.

n sistemul de numera!ie zecimal, pentru a num"ra obiectele, acestea se grupeaz"
cte 10. Num"rul grupurilor reprezint" de cte ori se cuprinde 10 n num"r. Acestea,
grupate din nou cte zece ne dau num"rul sutelor etc. n mod similar, ntr-un sistem
pozi!ional avnd baza b, obiectele se vor grupa cte b. Regulile de reprezentare a unui
num"r n orice sistem de numera!ie pozi!ional sunt similare regulilor care func!ionea-
z" n sistemul zecimal.

Sistemul de numera!ie binar este caracterizat de:
" Baza sistemului de numera!ie este 2.
" Mul!imea de simboluri care st" la baza sistemului este {0, 1}.

De exemplu, num"rul 1110
2
reprezint" valoarea 1 ! 2
3
+ 1 ! 2
2
+ 1 ! 2
1
+ 0 ! 2
0
= 13
10
.

Sistemul de numera!ie octal are urm"toarele caracteristici:
" Baza sistemului este 8.
" Mul!imea de simboluri care st" la baza sistemului este {0, 1, 2, 3, 4, 5, 6, 7}.

De exemplu, num"rul 2673
8
reprezint" valoarea 2 ! 8
3
+ 6 ! 8
2
+ 7 ! 8
1
+ 3 ! 8
0
=
1467
10
.

Un alt sistem de numera!ie frecvent utilizat n lumea calculatoarelor este sistemul
de numera!ie hexazecimal. Caracteristicile acestuia sunt:
" Baza sistemului este 16.
" Valorile cu care lucreaz" acest sistem de numera!ie sunt numerele de la 0 la 15. De-
oarece numerele mai mari dect 9 sunt combina!ii de simboluri (spre exemplu 10
se formeaz" din 1 #i din 0) ele nu pot fi utilizate la rndul lor ca simboluri. Exist"
ns" o conven!ie prin care se folose#te litera A pentru valoarea 10, litera B pentru
valoarea 11 #i a#a mai departe. n aceste condi!ii simbolurile care stau la baza aces-
tui sistem de numera!ie sunt 0, 1, ..., 9, A, B, C, D, E #i F.

5. Conversii 105

5.2. Conversii ntre dou" baze de numera!ie

5.2.1. Conversia unui num"r dintr-o baz" dat" n baza 10

A. Algoritm de conversie pentru numere ntregi
Efectund calculele cerute de descompunerea dup" puterile bazei, putem ob!ine n ca-
zul oric"rui sistem de numera!ie valoare num"rului dat n baza 10.

Exemplu
2673
8
= 2 ! 8
3
+ 6 ! 8
2
+ 7 ! 8
1
+ 3 ! 8
0
=
= 2 ! 512 + 6 ! 64 + 7 ! 8 + 3 ! 1 =
= 1024 + 384 + 56 + 3 =
= 1467
10

Tragem concluzia c" pentru a ob!ine reprezentarea n baza 10 a unui num"r natural
reprezentat ntr-o baz" b, trebuie s" descompunem num"rul dup" puterile bazei #i s"
efectu"m calculele n baza 10.

B. Algoritm de conversie pentru partea frac!ionar" a unui num"r
Pentru a converti un num"r frac!ionar dintr-o baz" b n baza 10 aplic"m acela#i algo-
ritm ca #i pentru partea ntreag": dezvolt"m num"rul cifr" cu cifr" dup" puterile bazei
#i apoi efectu"m calculele n baza 10.

Exemplu
0,24
5
5 5
2 1
1
4
1
2 ! $ ! % = 0,56
10


5.2.2. Conversia din baza 10 ntr-o alt" baz" de numera!ie

A. Algoritm de conversie pentru numere ntregi
Conversia unui num"r natural reprezentat n baza 10 ntr-o alt" baz" de numera!ie b se
face prin mp"r!iri succesive la b, valoarea num"rului fiind nlocuit" la fiecare pas prin
ctul mp"r!irii. Resturile scrise n ordine invers" reprezint" cifrele num"rului c"utat.

Exemplu
1467 = 8 ! 183 + 3
183 = 8 ! 22 + 7
22 = 8 ! 2 + 6
2 = 8 ! 0 + 2
deci 1467
10
= 2673
8
106 5. Conversii

B. Algoritm de conversie pentru partea frac!ionar" a unui num"r
Conversia unui num"r frac!ionar reprezentat n baza 10 ntr-o baz" b se face prin n-
mul!iri succesive cu b. La fiecare pas, partea ntreag" a rezultatului nmul!irii ne d" c-
te o cifr" din rezultat, nmul!irea continund cu partea frac!ionar" a rezultatului. Algo-
ritmul va avea at!ia pa#i cte cifre zecimale dorim s" determin"m.

Exemplu
Vom converti num"rul 0,23
10
din baza 10 n baza 5, cu trei zecimale.

Num"r n baza 10 Calcul Produs Nu m"r n baza 5
0,23
10
0,23
10
! 5 1,15
0,15
10
0,15
10
! 5 0,75
0,75
10
0,75
10
! 5 3,75 0,103
5


5.2.3. Algoritm de conversie din baza 2 ntr-o baz" de forma 2
k
#i invers
Pentru a ar"ta coresponden!a dintre numerele scrise n sistemul binar #i simbolurile
sistemelor de numera!ie cu baza 2
k
, prezent"m urm"torul tabel:

k = 1 k = 2 k = 3 k = 4 valoare
zecimal" baza 2 baza 4 baza 8 baza 16
0 0 0 0 0
1 1 1 1 1
2 10 2 2 2
3 11 3 3 3
4 100 10 4 4
5 101 11 5 5
6 110 12 6 6
7 111 13 7 7
8 1000 20 10 8
9 1001 21 11 9
10 1010 22 12 A
11 1011 23 13 B
12 1100 30 14 C
13 1101 31 15 D
14 1110 32 16 E
15 1111 33 17 F


5. Conversii 107

A. Algoritm de conversie din baza 2 n baza 2
k

Pentru a converti, de exemplu, num"rul 10111,01
2
n baza 8 (= 2
3
), se completeaz" nu-
m"rul cu 0-uri nesemnificative n stnga #i n dreapta pn" cnd avem grupuri comple-
te de cte trei cifre. Grupurile de cifre se formeaz" pornind de la virgula zecimal" spre
stnga, respectiv spre dreapta. Num"rul devine 010 111 , 010. La pasul urm"tor nlo-
cuim fiecare grup de cte trei cifre binare cu simbolul bazei 8 corespunz"toare grupu-
lui (vezi valorile din tabel) #i ob!inem num"rul convertit n baza 8 ca fiind 27,2
8
.

Generalizare
Pentru a converti un num"r scris n baza 2 ntr-o baz" de numera!ie de forma 2
k
se
completeaz" num"rul cu cifre 0, astfel nct att num"rul de cifre al p"r!ii ntregi, ct #i
num"rul de cifre al p"r!ii frac!ionare s" fie multiplu de k, apoi aceste grupuri de cte k
cifre binare se nlocuiesc cu simbolul corespunz"tor din tabelul de codificare.

B. Algoritm de conversie din baza 2
k
n baza 2
Pentru a converti un num"r reprezentat n baza 2
k
n reprezentarea corespunz"toare
bazei 2, se efectueaz" o simpl" nlocuire a simbolurilor bazei 2
k
cu grupul de k cifre
binare care corespunde simbolului conform tabelului prezentat. Atunci cnd n tabel
nu sunt trecute k cifre binare, reprezentarea se va completa cu 0-uri n fa!" pn" la ob-
!inerea a exact k cifre. n final 0-urile nesemnificative vor fi ignorate.

Exemplu
4A5,8
16
= 0100 1010 0101,1000
2
= 10010100101,1
2


4 A 5 8
Observa!ie
Un num"r dat n baza b
1
poate fi convertit direct n baza b
2
(ambele baze fiind dife-
rite de baza 10) f"r" a se intermedia trecerea prin baza de numera!ie 10. Algoritmul es-
te acela#i ca n cazul conversiei n baza 10, cu deosebirea c" toate calculele se vor
efectua n baza b
2
.

5.3. Opera!ii cu numere naturale n diverse baze de
numera!ie

5.3.1. Adunarea
Pentru a aduna dou" numere naturale scrise ntr-o baz" de numera!ie b, vom aduna ci-
frele de acela#i rang, de la dreapta la stnga. Dac" num"rul rezultat din adunarea a
dou" cifre se reprezint" cu o singur" cifr", atunci am ob!inut cifra rezultat. Dac" rezul-
tatul adun"rii este format din dou" simboluri, atunci restul mp"r!irii la b este cifra re-
zultat #i vom avea cifr" de transport (n cazul a dou" numere aceasta este egal cu 1).
108 5. Conversii

Exemplu
2367
8
+ Adun"m cifrele de rang 0: 7
8
+ 7
8
= 7
10
+ 7
10
= 14
10
= 1 ! 8
10
+ 6
10
= 16
8
3707
8
Cifra 6 este cifra de rang 0 n rezultat, 1 este cifr" de transport.
6276
8
Adun"m cifrele de rang 1: 6
8
+ 0
8
+ 1
8
= 7
10
= 7
8

Cifra 7 este cifra de rang 1 n rezultat, nu avem cifr" de transport.


Adun"m cifrele de rang 2: 3
8
+ 7
8
= 10
10
= 1 ! 8 + 2 = 12
8
Cifra 2 este cifra de rang 1 n rezultat, 1 este cifr" de transport.
Adun"m cifrele de rang 3: 2
8
+ 3
8
+ 1
8
= 6
10
= 6
8

Cifra 6 este cifra de rang 3 n rezultat, nu avem cifr" de transport.


5.3.2. Sc"derea
Opera!ia de sc"dere se efectueaz" asem"n"tor sc"derii n baza 10, cu deosebirea c"
unitatea mprumutat" va con!ine b subunit"!i #i nu 10.

Exemplu
6276
8
Calcul"m cifra de rang 0: ca s" putem efectua 6 7, mprumut"m 1 din
2367
8
cifra de rang 1, ob!inem 8 + 6 7 = 7
8

3707
8
Calcul"m cifra de rang 1: (7 1) 6 = 0
Calcul"m cifra de rang 2: ca s" putem efectua 2 3, mprumut"m 1 din
cifra de rang 3, ob!inem 8 + 2 3 = 7
8
Calcul"m cifra de rang 3: (6 1) 2 = 3
8

5.3.3. nmul!irea
nmul!irea a dou" numere scrise ntr-o baz" de numera!ie b se efectueaz" asem"n"tor
nmul!irii n baza 10, dar se va !ine cont de tabla adun"rii #i nmul!irii n baza b.

Exemplu
Tabla nmul!irii n baza 4 se completeaz" efectund calculele n baza 4. De exem-
plu, 3
4
! 3
4
= 3
10
! 3
10
= 9
10
= 21
4
.
0 1 2 3
0 0 0 0 0
1 0 1 2 3
2 0 2 10 12
3 0 3 12 21
Vom calcula 103
4
& 13
4
:
103
4
& 13
4
Calcul"m cifra de rang 0: 3
4
! 3
4
= 9
10
= 21
4
, scriem 1, transport 2
321 Calcul"m cifra de rang 1: 3
4
! 0
4
+ 2
4
= 2
4
, scriem 2, transport 0
103

Calcul"m cifra de rang 2: 3
4
* 1
4
+ 0 = 3
4
, scriem 3, transport 0
2011
4
103
4
! 1 = 103
4
; adunnd 321
4
cu 1030
4
, ob!inem 2011
4
.
5. Conversii 109

5.3.4. mp"r!irea
Pentru efectuarea mp"r!irii a dou" numere scrise n baza b, vom utiliza acelea#i reguli
din sistemul zecimal, !innd cont de tabla nmul!irii #i tabla adun"rii n baza b.

Exemplu
2011
4
: 13
4
= 103
4
13
4
se cuprinde n 20
4
de 1 ori.
13 20
4
13
4
= 1
4

=11 se coboar" urm"toarea cifr": 13 n 11 se cuprinde de 0 ori.
00 se mai coboar" o cifr": 13 n 111 se cuprinde de 3 ori
111 3
4
! 13
4
= 111
4
111
===

5.4. Criterii de divizibilitate n diverse baze de
numera!ie
Consider"m ca fiind important" cunoa#terea #i utilizarea criteriilor de divizibilitate n
preg"tirea elevilor pentru concursurile #colare de programare, motiv pentru care am
inclus aceast" prezentare. Rezultatele au fost preluate (f"r" demonstra!iile aferente) din
lucrarea Sisteme de numera!ie, autor Ilie Diaconu, Editura Studium, 1996. Cei care
doresc s" aprofundeze aceast" tem" pot consulta bibliografia de specialitate.
n cele ce urmeaz" not"m cu b o baz" de numera!ie oarecare.

5.4.1. Divizibilitatea cu num"rul b 1
Un num"r natural scris n baza b se divide cu b 1 dac" #i numai dac" suma cifrelor
sale este un num"r multiplu de b 1.

5.4.2. Divizibilitatea cu b + 1
Un num"r natural scris n baza b se divide cu b + 1 dac" #i numai dac" diferen!a dintre
suma cifrelor de ordin impar #i suma cifrelor de ordin par este multiplu de b + 1.

5.4.3. Divizibilitatea cu b n baze de forma b ! k + 1
Un num"r natural scris n baza b ! k + 1 se divide cu b dac" #i numai dac" suma cifre-
lor sale este un num"r multiplu de b.

5.4.4. Divizibilitatea cu b n baze de forma b ! k 1
Un num"r natural scris n baza b ! k 1 se divide cu b dac" #i numai dac" diferen!a
dintre suma cifrelor de ordin impar #i suma cifrelor de ordin par este multiplu de b.
110 5. Conversii

5.4.5. Divizibilitatea cu b, b
2
, b
3
,, n baza b
Un num"r natural scris n baza b se divide cu b, b
2
, b
3
, dac" #i numai dac" num"rul
se termin" cu 0, doi de 0, .

5.4.6. Divizibilitatea cu b n baze de forma b ! k
Un num"r natural scris n baza b ! k se divide cu b dac" #i numai dac" ultima cifr" a
num"rului este un multiplu de b.

5.4.7. Divizibilitatea cu b ! k 1 sau b ! k + 1 n baza b
Un num"r natural scris n sistemul de numera!ie avnd baza b se divide cu b ! k 1 /
b ! k + 1 dac" #i numai dac" suprimndu-i ultima cifr" #i sc"znd, respectiv adunnd
de k ori cifra suprimat" se ob!ine un num"r divizibil cu b ! k 1, respectiv b ! k + 1.

5.4.8. Criteriul de divizibilitate cu 2 n diverse baze de
numera!ie
Un num"r natural este divizibil cu 2 n baza de numera!ie:
a) b = 2k dac" #i numai dac" ultima sa cifr" este multiplu de 2;
b) b = 2k + 1 dac" #i numai dac" suma cifrelor sale este multiplu de 2.

5.4.9. Criteriul de divizibilitate cu 3 n diverse baze de
numera!ie
Un num"r natural este divizibil cu 3 n baza de numera!ie:
a) b = 3k dac" #i numai dac" ultima sa cifr" este multiplu de 3
b) b = 3k + 1 dac" #i numai dac" suma cifrelor sale este multiplu de 3;
c) b = 3k 1 dac" #i numai dac" diferen!a dintre suma cifrelor de ordin impar #i suma
cifrelor de ordin par este multiplu de 3

5.4.10. Criteriul de divizibilitate cu 4 n diverse baze de
numera!ie
Un num"r natural este divizibil cu 4 n baza de numera!ie:
a) b = 4k dac" #i numai dac" ultima sa cifr" este multiplu de 4;
b) b = 4k + 1 dac" #i numai dac" suma cifrelor sale este multiplu de 4;
c) b = 4k + 2 dac" #i numai dac" suma dintre dublul penultimei cifre #i ultima cifr"
este multiplu de 4;
d) b = 4k 1 dac" #i numai dac" diferen!a dintre suma cifrelor de ordin impar #i suma
cifrelor de ordin par este multiplu de 4; (cifrele se consider" num"rate de la dreapta la
stnga).
5. Conversii 111

5.4.11. Criteriul de divizibilitate cu 5 n diverse baze de
numera!ie
Num"rul natural n = a
n
a
n-1
a
1
a
0
,

scris n baza b se divide cu 5 n sistemele de nume-
ra!ie cu baza:
1. b = 5k, k ' N
*
, dac" #i numai dac" ultima cifr" se divide cu 5;
2. b = 5k + 1, k ' N
*
, dac" #i numai dac" suma tuturor cifrelor se divide cu 5;
3. b = 5k + 2, k ' N
*
, dac" #i numai dac" (a
0
a
2
+ a
4
) + 2(a
1
a
3
+ a
5
) se
divide cu 5;
4. b = 5k + 3, k ' N
*
, dac" #i numai dac" (a
0
a
2
+ a
4
) + 3(a
1
a
3
+ a
5
) se
divide cu 5;
5. b = 5k + 4, k ' N
*
, dac" #i numai dac" (a
0
a
2
+ a
4
) (a
1
+ a
3
+ a
5
+ ) se
divide cu 5.

5.5. Implement"ri sugerate
Pentru a v" familiariza cu modul n care se rezolv" problemele n care intervin imple-
ment"ri ale conversiilor, v" suger"m s" ncerca!i s" realiza!i algoritmi pentru:
1. conversie din baza 10 n baza 2;
2. conversie din baza 2 n baza 10;
3. conversie din baza 2 n baza 8 (16);
4. conversie din baza 8 #i 16
*)
n baza 2;
5. conversie din baza 10 n baza b < 10;
6. conversie din baza b < 10 n baza 10;
7. conversie din baza a < 10 n baza b < 10;
8. conversie din baza 16 n baza 10
*)
;
9. conversie din baza 10 n baza 16
*)
;
10. conversie din baza a < 36 n baza b < 36
*)
;
11. conversie din baza 10 n baza b (orict de mare)
*)
;
12. conversie din baza b (orict de mare) n baza 10
*)
;
13. conversie din baza a (orict de mare) n baza b (orict de mare)
*)
.

*)
Se pot amna dup" nv"!area prelucr"rii #irurilor de caractere.
112 5. Conversii

5.6. Probleme propuse

5.6.1. Conversie
S" se converteasc" un num"r natural n, scris ntr-o baz" de numera!ie b
1
, ntr-o alt" ba-
z" de numera!ie b
2
. nainte de a se efectua conversia, se va verifica dac" num"rul dat
este corect scris (n scrierea lui s-au folosit cifre permise de baza de numera!ie n care
se presupune c" a fost scris).

Date de intrare
Cele dou" baze de numera!ie b
1
#i b
2
se citesc de pe prima linie a fi#ierului de intrare
CONV.IN. Pe linia urm"toare se afl" num"rul natural care trebuie convertit.

Date de ie#ire
Num"rul convertit se va scrie n fi#ierul CONV.OUT. n cazul n care num"rul nu este
corect scris, n fi#ierul de ie#ire se va scrie mesajul 'numar incorect'.

Restric!ii #i preciz"ri
" numerele vor avea cel mult 9 cifre n ambele baze b
1
#i b
2

" 2 ( b
1
, b
2
( 10.

Exemple
CONV.IN
2 8
10101010
CONV.OUT
252

CONV.IN
5 9
4001252
CONV.OUT
numar incorect

5.6.2. Opera!ii ntr-o baz" de numera!ie dat"
S" se efectueze opera!ia de adunare sau de sc"dere (conform cerin!ei din fi#ierul de in-
trare) a dou" numere naturale date, reprezentate ntr-o baz" de numera!ie dat" b, f"r"
s" se efectueze conversii n baza 10.

Date de intrare
Pe prima linie a fi#ierului de intrare OPER.IN se afl" un num"r natural b, reprezentnd
baza de numera!ie n care se va efectua opera!ia. Pe urm"toarele linii ale aceluia#i fi-
#ier se afl" primul num"r, apoi operatorul + sau , iar pe ultima linie se afl" cel de-al
doilea num"r.

5. Conversii 113

Date de ie#ire
Rezultatul opera!iei se va scrie n fi#ierul OPER.OUT.

Restric!ii #i preciz"ri
" 1 ( num#r
1
, num#r
2
( 100000000
b
;
" num#r
1
) num#r
2
;
" 2 ( b ( 10.

Exemplu
OPER.IN
3
12
+
11
OPER.OUT
100

5.6.3. Criterii de divizibilitate ntr-o baz" de numera!ie dat"
Se consider" o baz" de numera!ie b #i un num"r natural scris n aceast" baz". S" se ve-
rifice dac" num"rul dat este divizibil cu 2, 3, 4 #i 5, utiliznd criterii de divizibilitate.

Date de intrare
Pe prima linie a fi#ierului de intrare NR.IN se afl" un num"r natural b, reprezentnd
baza de numera!ie. Pe linia urm"toare se afl" num"rul care urmeaz" s" fie analizat.

Date de ie#ire
n fi#ierul NR.OUT se vor scrie cifrele 2, 3, 4 #i/sau 5 n cazul n care num"rul dat este
divizibil cu acestea. n situa!ia n care num"rul este divizibil cu dou" sau mai multe
numere dintre cele enumerate, acestea vor fi separate prin cte un spa!iu. Dac"
num"rul nu este divizibil cu nici unul dintre numerele 2, 3, 4 #i 5, n fi#ierul de ie#ire
se va scrie 'NU'.

Restric!ii #i preciz"ri
" 1 ( n ( 1000000000
b
;
" 2 ( b ( 10.

Exemple
NR.IN
3
120
NR.OUT
3 5
NR.IN
10
311
NR.OUT
NU
114 5. Conversii

5.6.4. Sistemul de numera!ie Fibonacci
Cifrele sistemului de numera!ie Fibonacci sunt 0 #i 1. n acest sistem de numera!ie se
pot reprezenta numerele asem"n"tor sistemului zecimal. Num"rul m = c
n
c
n-1
c
3
c
2
c
1
,
scris n baza Fibonacci, n sistemul zecimal are valoarea c
n
! a
n
+ + c
2
! 2 + c
1
! 1,
unde a
i
sunt numere Fibonacci.
S" se scrie un program care converte#te un num"r dat n baza 10 n baza Fibonacci
#i un num"r dat n baza Fibonacci n sistemul zecimal.

Date de intrare
Pe prima linie a fi#ierului de intrare FIBO.IN se afl" un num"r natural m, reprezentat
n baza Fibonacci. Pe linia urm"toare se afl" un num"r n baza 10.

Date de ie#ire
Pe prima linie a fi#ierului FIBO.OUT se va scrie reprezentarea primului num"r din fi#i-
erul de intrare, reprezentat n baza 10. Pe cea de a doua linie se va scrie reprezentarea
celui de-al doilea num"r n baza Fibonacci.

Restric!ii #i preciz"ri
" 1 ( nr
1
, nr
2
( 1000000000.

Exemple
FIBO.IN
10101001
53
NR.OUT
53
10101001

5.7. Solu!iile problemelor propuse
nainte de a prezenta rezolv"rile problemelor, dorim s" clarific"m urm"toarele: n cal-
culator orice num"r este reprezentat n baza 2, iar imaginea pe care o vedem, afi#nd
un astfel de num"r este un num"r reprezentat n baza 10. n concluzie, atunci cnd n
aceste rezolv"ri vorbim despre conversii, de fapt construim imaginea numerelor
formate din cifre conform sistemului de numera!ie. Din acest motiv, n continuare prin
conversii n!elegem construirea numerelor n baza 10 care arat" ca "i cum ar fi n
baza b.

5.7.1. Conversie
Pentru a converti un num"r dintr-o baz" de numera!ie n alta exist", n principiu, dou"
posibilit"!i:
" se converte#te num"rul n baza 10 #i apoi acesta se converte#te n baza dorit";
" se converte#te num"rul n baza de numera!ie dorit" prin aplicarea algoritmului de
conversie clasic, cu condi!ia c" toate calculele se vor efectua n baza specificat".
5. Conversii 115

Algoritmul descris n pseudocod folose#te prima metod". Dac" baza b
1
este baza
10, nu este necesar" conversia num"rului din baza b
1
n baza 10 #i similar, dac" b
2
este
egal cu 10, nu este nevoie s" convertim rezultatul par!ial.

Algoritm Conversii:
cite!te b1,b2 { se citesc cele dou# baze de numera!ie }
cite!te num!r { se cite"te num#rul dat }
{ se verific# dac# num#rul este scris corect n baza dat# }
valid * adev#rat { presupunem c# num#rul este corect scris }
nr * num!r { copie a num#rului dat }
ct timp valid !i (nr + 0) execut":
dac" rest[nr/10] ) b1 atunci
valid * fals { num#rul corect scris are doar cifre mai mici dect b1 }
sfr!it dac"
nr * [nr/10]
sfr!it ct timp
dac" nu valid atunci
scrie 'numar incorect')
altfel
{ conversie din baza b1 n baza 10 }
dac" b1 = 10 atunci
par"ial * num!r
altfel
{ dac# b1 = 10, nu este necesar# etapa de conversie n baza 10 }
par"ial * 0 { rezultatul par!ial al conversiei (din b1 n 10) }
p * 1 { p p#streaz# puterile bazei }
ct timp num!r + 0 execut":
cifra * rest[num!r/10]
num!r * [num!r/10]
par"ial * par"ial + cifra*p
p * p*b1
sfr!it ct timp
sfr!it dac"
dac" b2 = 10 atunci { dac# b2 = 10, nu este necesar# conversia }
rezultat * par"ial
altfel { conversie din baza 10 n baza b2 }
rezultat * 0
p * 1 { p p#streaz# puterile bazei 10 }
repet"
cifra * rest[par"ial/b2]
par"ial * rest[par"ial/b2]
116 5. Conversii

rezultat * rezultat + cifra*p
p * p*10
pn" cnd par"ial = 0
sfr!it dac"
scrie rezultat
sfr!it dac"
sfr!it algoritm

5.7.2. Opera!ii ntr-o baz" de numera!ie dat"
n func!ie de opera!ia specificat" n fi#ier (adunare sau sc"dere), algoritmul va trebui
s" efectueze suma sau diferen!a numerelor date, opera!iile efectundu-se n baza de
numera!ie n care au fost scrise numerele.
Se vor urm"ri aceste opera!ii pe un exemplu:
Fie b = 3, num#r
1
= 21022
3
#i num#r
2
= 2011
3
.

Dac" operator = '+'

opera!ia transport vechi calcule cifr" rezultat" transport
21022
3
+
2011
3
100110
3


0
1
1
0
1
1
0+2
3
+1
3
=3
10
=10
3
1+2
3
+1
3
=4
10
=11
3
1+0
3
+0
3
=1
10
=1
3
0+1
3
+2
3
=3
10
=10
3
1+2
3
+0
3
=3
10
=10
3
1+0
3
+0
3
=1
10
=1
3

0
1
1
0
0
1
1
1
0
1
1
0

Dac" operator = '-'

opera!ia mprumut calcule cifra rezultat" transport
21022
3
-
2011
3
12011
3


0
10

0
10

0
10

3
10

0
10

0
10
+2
3
-1
3
=1
3
0
10
+2
3
-1
3
=1
3
0
10
+0
3
-0
3
=0
3
3
10
+1
3
-2
3
=2
3
0
10
+(2
3
-1
3
)=1
3
1
3

1
3

0
3

2
3

1
3

0
0
0
0
-1

Algoritmul care descrie aceste opera!ii este prezentat n continuare.

Algoritm Opera"ii:
cite!te b { baza de numera!ie n care se efectueaz# opera!ia }
cite!te num!r1
cite!te operator { '+' sau '-' }
cite!te num!r2
rezultat * 0 { ini!ializarea rezultatului }
5. Conversii 117

transport * 0 { ini!ializarea cifrei de transport }
p * 1 { p se ini!ializeaz# cu 10 la puterea 0 }
ct timp (num!r1 + 0) sau (num!r2 + 0) execut":
{ ct mai exist# cifre cel pu!in ntr-un num#r }
dac" operator = '+' atunci
{ se adun# ultimele cifre ale celor dou# numere }
par"ial * transport + rest[num!r1/10] + rest[num!r2/10]
dac" par"ial ) b atunci
par"ial * par"ial - b
transport * 1
altfel transport * 0
sfr!it dac"
altfel { se scad ultimele cifre ale celor dou# numere }
par"ial * rest[num!r1/10] - transport rest[num!r2/10]
dac" par"ial < 0 atunci { este nevoie de mprumut }
par"ial * par"ial + b
transport * 1
altfel transport * 0
sfr!it dac"
sfr!it dac"
rezultat * rezultat + p*par"ial
{ cifra ob!inut# se adaug# la rezultat }
p * p*10 { se preg#te"te puterea pentru pasul urm#tor }
num!r1 * [num!r1/10] { se trece la urm#toarea cifr# }
num!r2 * [num!r2/10]
sfr!it ct timp
dac" transport > 0 atunci
rezultat * rezultat + p { ultima cifr# de transport }
sfr!it dac"
scrie rezultat
sfr!it algoritm

5.7.3. Criterii de divizibilitate ntr-o baz" de numera!ie dat"
Programul poate fi realizat verificnd criteriile de divizibilitate cu 2, 3, 4 #i 5, criterii
care au fost prezentate n suportul teoretic al lec!iei. Condi!iile au fost grupate dup"
forma bazei de numera!ie, deoarece se observ" similitudini n definirea acestor criterii.
De exemplu, atunci cnd baza de numera!ie este multiplu de cifra, toate criteriile cer
condi!ia ca ultima cifr" a num"rului s" fie multiplu de cifra (s-a notat cu cifra valoarea
2, 3, 4 sau 5). De asemenea, n cazul n care baza de numera!ie este de forma k ! cifra,
toate criteriile pun condi!ia ca suma cifrelor num"rului s" se divid" la cifra.

118 5. Conversii

Se descrie n continuare un algoritm de rezolvare diferit de cel prezentat mai sus. n
subalgoritm vom trata doar divizibilitatea cu 5 a unui num"r reprezentat n baza b,
deoarece criteriul prezentat n partea teoretic" este valabil doar pentru baze mai mari
sau egale cu 5. Nu vom genera num"r n baza 10, doar ultima cifr" ne intereseaz", dar
calculele trebuie s" le efectu"m n baza 10, deoarece baza este mai mic" dect 5.

Subalgoritm verif(num!r):
nn * num!r
putere * 1
ct timp nn > 9 execut": { travers#m cifrele num#rului "i preg#tim }
nn * [nn/10] { putere pentru a ob!ine puterea cu care vom mp#r!i }
putere * putere*10
sfr!it ct timp
cifr! * [num!r/putere]
ct timp putere > 10 execut": { travers#m cifrele de la stnga la dreapta }
putere * [putere/10]
cifr! * rest[(cifr!*baza + [num!r/putere])/10]
sfr!it ct timp
dac" (cifr! = 0) sau (cifr! = 5) atunci
scrie 'Numarul se divide cu 5'
sfr!it dac"
sfr!it subalgoritm

5.7.4. Sistemul de numera!ie Fibonacci
Algoritmul de conversie se bazeaz" pe descompunerea unui num"r natural n sum" de
numere Fibonacci, prezentat n capitolul 4.
Subalgoritmul urm"tor transform" un num"r dat n sistemul de numera!ie Fibonacci
(nn) n num"r zecimal (n). Vom c"uta n num"rul nn cifre egale cu 1, deoarece ele re-
prezint" prezen!a n suma care reprezint" num"rul n, a unui num"r Fibonacci. n nu-
m"r doar anumi!i termeni din #ir particip", dar trebuie s"-i gener"m pe to!i, pn" cnd
mp"r!irea cu 10 se finalizeaz" cu un ct egal cu 0.

Subalgoritm DinFibon10(nn,n):
{ nn: num#r n sistemul de numera!ie Fibonacci, n: num#r n baza 10 }
n * 1
dac" nn + 1 atunci
dac" rest[nn/10] = 0 atunci
n * 0
sfr!it dac"
nn * [nn/10]

5. Conversii 119

a * 1
b * 1
c * a + b
ct timp nn > 0 execut": { ct timp mai avem cifre }
cifra * rest[nn/10]
dac" cifra = 1 atunci
{ cifra 1 aduce un num#r Fibonacci n valoarea num#rului n }
n * n + c
sfr!it dac"
a * b
b * c
c * a + b
nn * [nn/10]
sfr!it ct timp
sfr!it dac"
sfr!it subalgoritm

Subalgoritmul urm"tor transform" un num"r zecimal n num"r reprezentat n siste-
mul de numera!ie Fibonacci. Dac" num"rul dat este num"r Fibonacci, nseamn" c"
acesta (t
i
) s-a ob!inut adunnd doi termeni consecutivi (t
i-1
#i t
i-2
) din #ir. n acest caz t
i

nu are o reprezentare unic", deoarece poate fi scris #i sub forma m = 100...0, unde
num"rul 0-urilor este egal cu num"rul numerelor Fibonacci mai mici dect num"rul
dat, dar #i sub forma 1100..0 unde num"rul 0-urilor este egal cu num"rul numerelor
Fibonacci mai mici dect t
i-2
. Subalgoritmul va determina primul mod de afi#are.

Subalgoritm Din10nFibonacci(n,nn):
nn * 1 { dac# n este egal cu 1, "i nn va fi 1 }
dac" n + 1 atunci
a * 1 { ncepem generarea numerelor Fibonacci }
b * 1
c * a + b
putere * 1
ct timp b < n execut":
a * b
b * c
c * a + b
putere * putere*10
sfr!it ct timp
{ dac# n este num#r Fibonacci, nn este de forma 1 ! putere }
nn * putere

120 5. Conversii

dac" c + n atunci
{ dac# n nu este num#r Fibonacci, l descompunem n sum# de numere Fibonacci }
n * n - b
ct timp n > 0 execut": { ct timp mai avem rest }
ct timp b > n execut":
c * b
b * a
a * c - b
putere * [putere/10]
sfr!it ct timp
nn * nn + putere
n * n - b
sfr!it ct timp
sfr!it dac"
sfr!it dac"
sfr!it algoritm