Sunteți pe pagina 1din 12

BAZE DE NUMERAȚIE

Sistem de numerație
Până acum toate numerele utilizate
Sistem Bază
au fost în baza 10, folosind cifrele 0,1..9.
  Binar 2
Pentru un sistem de numerație în baza b   Ternar 3
unde 2<=b<=10 cifrele ce pot fi folosite   Cuaternar 4

sunt 0, 1,… , b-1.   Octal 8

  Zecimal 10

  Duodecimal 12

  Hexazecimal 16

  Vigesimal 20

  Sexazecimal 60

Trecerea unui număr natural din baza 10 în baza b.


Se împarte repetat numărul la b și se obține un rest r1, apoi câtul se împarte din nou la
b până când se obține un cât 0 și ultimul rest este rk. Numărul cu cifrele rk rk-1 ....r1 este
corespondentul în baza b a numărului inițial scris în baza 10. Trecerea unui număr
din baza 10 în baza 2.

121=60*2+1 r1=1

60=30*2+0 r2=0

30=15*2+0 r3=0

15=7*2+1 r4=1 121(10)=1111001(2)

7=3*2+1 r5=1

3=1*2+1 r6=1 121 din baza 10 în baza 3 -> 121(10)=11111(3)

1=0*2+1 r7=1 121 din baza 10 în baza 4 -> 121(10)=1321(4)

121 din baza 10 în baza 5 -> 121(10)=441(5)

Trecerea din baza 10 în baza b.

#include <iostream>
using namespace std; #include <iostream>

int n,b,r,x,p; using namespace std;

int main() int n,b,r,x,p;

{cin>>n>>b; int main()

p=1; {cin>>n>>b;

x=0; p=1;

while(n) x=0;

{ r=n%b; while(n)

x=x+r*p; { r=n%10;

p=p*10; x=x+r*p;

n=n/b; p=p*b;

} n=n/10;

cout<<x; }

return 0; cout<<x;

} return 0;
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.

Obs. Pentru a realiza operații cu diverse baze, transformă m numerele în


baza 10, realiză m operațiile, după care rezultatul îl transformă m în baza
Trecerea . baza b în baza 10.
doritădin

Conversia din baza 10 în baza b

//conversia din baza 10 în baza b


citeşte n,b     // numere naturale, n-numărul de transformat, b-baza

x=0             // va conţine rezultatul conversiei

p=1             // puterile lui 10 iniţial 100=1

┌cât timp n≠0 execută

│  r=n%b        // calculez restul împărţirii numărului la bază

│  x=x+r*p      // formez valoarea noului număr

│  p=p*10       // cresc puterea lui 10

│  n=n/b        // calculez câtul împărţirii numărului la bază

└■

scrie x         // valoarea numărului în baza b

Conversia din baza b în baza 10

//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             // b0=1

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

┌cât timp n≠0 execută

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

│   x=x+r*p     //formez numarul adunând cifrele extrase din n cu puteri


│               // ale bazei   

│   p=p*b       // cresc puterea bazei

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

└■

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

Conversia din baza 10 în baza b #include <iostream>


using namespace std; #include <iostream>

int r[100],n,b,k,i,aux,x,p; using namespace std;

int main() int r[100],n,b,k,i,aux,x,p;

{cin>>n>>b; int main()

{cin>>n>>b;
aux=n;
k=0;
k=0;
aux=n;
p=1;
p=1;
x=0;
x=0;
if(aux==0)
if(aux==0)
{k++;
{k++;
r[k]=0;}
r[k]=0;}
while(aux)
while(aux)
{k++;
{k++;
r[k]=aux%b;
r[k]=aux%10;
aux=aux/b; }
aux=aux/10; }
for(i=1;i<=k;i++)
for(i=1;i<=k;i++)
{x=x+r[i]*p; {x=x+r[i]*p;
p=p*10;} p=p*b;}
cout<<x; cout<<x;
return 0; } return 0; }
Conversia din baza b în baza 10

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, numar egal de cifre de 0 şi 1”;

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

#include< iostream>

using namespace std;

int n,m,nr0,nr1,r,p;

int main()

  {   cin>>n;

    p=1;

    while(n)

      {r=n%2;

       if(r==0)

         nr0++;

       else

       nr1++;

       m=m+r*p;

       p=p*10;

       n=n/2;       }

    cout<<"Numarul in baza 2 este "<<m<<’\n’;

    if(nr0==nr1)       cout<<"Da are un numar egal de  cifre de 0 si 1";

    else      

cout<<"Nu, are numar diferit   de cifre de 0 si 1";

return 0; }

 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

 #include<iostream> p=p*b1;

using namespace std; n=n/10;

int n,m,r,p,b1,b2,z; }

int main() cout<<"numarul in baza 10 este


"<<m<<endl;
{ cout<<"Numarul de transformat n=";
//conversia lui m din baza 10 in b2
cin>>n;
p=1;
cout<<"Baza in care este scris numarul
b1="; while(m)

cin>>b1; {r=m%b2;

cout<<"Baza in care fac conversia b2="; z=z+r*p;

cin>>b2; p=p*10;

//conversia lui n din b1 in baza 10 m=m/b2;

p=1; }

while(n!=0) cout<<"numarul in baza "<<b2<<" este


"<<z;
{r=n%10;
}
m=m+r*p;

  

3. Suma a două numere (în baza 10)- n1 în b1 și n2 în b2.


Ex. n1=1111001 b1=2 n2=11111 b2=3 se va afișa 242

#include <iostream> }

using namespace std; cin>>n2>>b2;

int r[100],n1,b1,n2,b2,k,i,aux,x,p; aux=n2;

int main() k=0;

{cin>>n1>>b1; while(aux)

aux=n1; {k++;

k=0; r[k]=aux%10l;

while(aux) aux/=10;}

{k++; p=1;

r[k]=aux%10; for(i=1;i<=k;i++)

aux/=10;} {x=x+r[i]*p;

x=0; p=p*b2;

p=1; }

for(i=1;i<=k;i++) cout<<x;

{x=x+r[i]*p; return 0;

p=p*b1; }
4. Se citește un numă r natural n și apoi se citesc n numere întregi. Scrieți un
program care afișează numprul cifrelor egale cu 1 care apr în scrierea fiecă rui numă r în
baza 2.

Ex. n=2 121 49 se va afisa 5 și 3

#include<iostream>

using namespace std;

int n,x,nr,r,i;

int main()

{ cin>>n;

for(i=1;i<=n;i++)

cin>>x;

nr=0;

while(x)

{if(x%2==1)

nr++;

x=x/2; }

cout<<nr<<' ';}

return 0; }
Pbinfo 2872
Cerința
Se dă numărul natural n. Calculați 2n, apoi afișați rezultatul în baza 2.

Date de intrare
Programul citește de la tastatură numărul n.

Date de ieșire
Programul va afișa pe ecran numărul 2n, conform cerinței.
Exemplu
Intrare

Ieșire

10

Explicație
21 = 2 = 10(2).

#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
cout << 1;
while (n--)
cout << 0;
return 0;
}
Pbinfo 429
Cerinţa
Se citește un număr natural n. Să se determine câte cifre 0 și câte
cifre 1 are reprezentarea în baza 2 a acestui număr.

Date de intrare Programul citește de la tastatură numărul n.

Date de ieşire
Programul afișează pe ecran numerele Z și U, separate printr-un spațiu,
reprezentând numărul cifrelor 0, respectiv al cifrelor 1 din reprezentarea
în baza 2 a lui n.

Exemplu
Intrare

174

Ieșire

3 5

Explicație Reprezentarea în baza 2 a lui 174 este 10101110.


long int Z=0,U=0,n,x;
cin>>n;
while(n>0)
{ x=n%2;
if(x==0)
Z++;
else
U++;
n=n/2; }
cout<<Z<<" "<<U;
Pbinfo 122
Cerinţa
Se citesc două numere naturale. Să se afişeze numărul care are mai multe cifre
egale cu 1 în reprezentarea în baza 2.

Date de intrare
Programul citește de la tastatură două numere naturale.

Date de ieşire
Programul afișează pe ecran valoarea cerută.

Restricţii şi precizări

 cele două numere citite vor fi mai mici decât 2.000.000.000


 dacă cele două numere au acelaşi număr de cifre 1 în reprezentarea în
baza 2 se va afişa cel mai mic dintre ele

Exemplu
Intrare

125 1250

Ieșire

125

Explicaţie
Reprezentarea lui 125 în baza 2 este 1111101, cu 6 cifre 1, iar reprezentarea
lui 1250 este 10011100010, cu 5 cifre 1. Astfel, 125 are mai multe cifre 1 în
reprezentarea în baza 2.

#include <iostream>
using namespace std;
int main(){
int n1=0,m1=0,n,m,x,a,b;
cin>>n>>m;
a=n;
b=m;
while(n>0)
{
x=n%2;
if(x==1)
n1++;

n=n/2;
}

while(m>0)
{
x=m%2;
if(x==1)
m1++;

m=m/2;
}
if(n1>m1)
cout<<a;
else
cout<<b;
return 0; }

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