Se poate trece la capitolul următor cu tasta ► și se poate reveni la un capitol precedent cu tasta ◄

Conversia unui număr din decimal în orice bază (C++)


<

C
a
p
i
t
o
l
u
l

a
n
t
e
r
i
o
r

<

1. Algoritm

Conversia unui număr din zecimal în orice bază în C++

Conversia unui număr din zecimal în orice bază în C++

Conversia unui număr din zecimal în orice bază în C++

2. Discuție

Conversia în orice bază este simplă. Pur și simplu se împarte numărul dat la baza cerută și se ține minte restul, totul până când câtul devine 0. Apoi șirul resturilor se inversează, adică se citește de la coadă la început.

În primul rând pentru a fi ușor de lucrat, ținem minte restul ca și un caracter pe care îl adăugăm la rezultatul nostru (un șir de caractere). În C++ acest lucru e dificil fiindcă tipul de date string este de fapt un pointer la un șir. Ceea ce automat ne obligă să știm ce sunt pointer-ii și șirurile.

Funcția de conversie dintr-un număr întreg în caracter nu există. Asta și fiindcă tipul de dată char este de fapt tot un tip de date numeric. itoa este în cel mai bun caz un compromis ocazional.

Apoi concatenarea a doua șiruri de caractere se face prin strcat care acceptă doi pointer-i la char. Nu există o operațiune de genul șirA + șirB.

Iar apoi când baza este mai mare de 10, pentru a putea obține caracterele „A” până la „F” de exemplu pentru hexazecimal, trebuie să ne reamintim că literele sunt de fapt cifre, iar în variabila noastră temporară t vom memora de fapt indexul literei pe care vrem să o tipărim. În cazul în care restul este 11, vom avea 65 (poziția ASCII a caracterului „A”) + 11 (restul) - 10 (revenim 10 poziții, căci de la 0 la 9 avem deja valorile la îndemână) care este egal cu 66, ce în ASCII înseamnă „B”.

Algoritmul conversiei este ușor, însă limbajul C++ face toată munca dificilă. De aceea există și vorba: „Limbajul C face ușor să te împuști în picior, C++ îl face mai greu, dar când apeși trăgaciul, îți va zbura tot piciorul”.

Ți-a fost de ajutor ce am scris aici?
Hei, mersi de răspuns.