• Acasă
  • Despre noi
  • Autori
  • Mărturii
  • Arhivă
  • Trimite Articol
  • Contact

WORLDIT

Lumea în 1 și 0.

  • Știri
    • Tehnologie
    • Tehnologie mobilă
    • Securitate
    • Developers
    • Știință
    • Benzi desenate
    • Jocuri
    • Intern
  • Tehnic
    • Browser
    • C#
    • C/C++
    • Challenge
    • HTML/CSS
    • Javascript, Ajax, jQuery
    • Open Source
    • PHP
    • Python
    • Securitate IT
    • Socializare
    • WordPress
    • Altele
  • Recenzii
  • Interviuri
  • Evenimente

Exercitii baze de numeratie

7
  • Publicat de Coss
  • în Fără categorie
  • — 17 oct., 2009 at 2:52 pm

Urmatorul articole este destinat incepatorilor si trateaza diferite tipuri de exercitii cu bazele de numeratie. Vom trece peste partea de citire a vectorilor sau a bazelor, le vom initializa direct, intru-cat acestea sunt chestii de rutina. Programele sunt scrise in limbajul de programare C++, iar ca mediu de lucru am folosit MinGW Developer Studio. Sper sa fie de folos. 🙂 ist2_405671-binary-code

1. Se da un vector cu n componente (1<=n<=1000) numare naturale scirse in baza 10 si o baza b (2<=b<=10). Se cere sa se afiseze componentele vectorului (scrise in baza 10 si in baza b) care in baza b au exact 2 cifre nenule.

Exemplu: pentru n=3 si vectorul 5 8 12, b=2 se va afisa

5 101
12 1100

Vom transforma fiecare numar din vector in baza 2 si vom verifica daca are fix 2 cifre nenule. In caz afirmativ vom afisa corespondentul sau in baza 10 si transformarea sa in baza 2. Puteti observa in codul de mai jos cum am transformat componentele din baza 10 in baza 2.

#include <iostream>
using namespace std;

int b=2,i,n=4,v[]={0,5,8,12},y[100],aux,nr,k,j;
int main()
{
 for (i=1;i<=n;++i)
 {
 nr=0;
 aux=v[i];
 k=0;
 if (aux==0) {k++;y[k]=0;}
 else
 {
 while (aux)
 {
 k++;
 y[k]=aux%b;
 aux/=b;
 }
 }
 for (j=k;j>0;--j)
 if (y[j]!=0) nr++;
 if (nr==2) 
 {
 cout<<v[i]<<" ";
 for (j=k;j>0;--j)
 cout<<y[j];
 cout<<"\n";
 }
 }
 return 0;
}

2. Se da un vector cu n componente (1<=n<=100) numere naturale scrisa in baza b (2<=b<=10). Se cere sa se afiseze suma componentelor vectorului in baza 10.

Pentru n=3 si vectorul 101 1010 1100 , b=2 se va afisa 27 (suma numerelor din baza 10 5 10 12).

Vom transforma pe rand componentele vectorului in numere in baza 10 si le vom aduna in variabila s.

#include <iostream>
using namespace std;

int b=2,v[]={101,1010,1100},n=3,i,j,aux,s,y[100],k,nr,p;
int main()
{
 for (i=0;i<n;++i)
 {
 aux=v[i];
 k=0;
 if (aux==0) {k++;y[k]=0;}
 else
 while (aux)
 {
 k++;
 y[k]=aux%10;
 aux/=10;
 }
 nr=0;
 p=1;
 for (j=1;j<=k;++j)
 {
 nr+=y[j]*p;
 p*=b;
 }
 s+=nr;
 }
 cout<<"suma="<<s<<"\n";
 return 0;
}

3. Se dau doua numere naturale, unul in baza b1, iar celalalt in baza b2 (2<=b1, b2<=10). Se cere sa se afiseze suma numerelor in baza 10.

Exemplu: pentru 12 in baza 3 si 100 in baza 2, suma este 9 (12 din baza 3=5 in baza 10 si 100 din baza 2=4 in baza 10).

Vom transforma numerele din bazele b1 si b2 in baza 10, apoi le vom calcula suma.

#include <iostream>
using namespace std;

int b1=3,a=12,b2=2,b=100,x[100],y[100],nr1,nr2,s,i,j,k,aux,p;
int main()
{
 k=0;
 aux=a;
 if (aux==0) {k++;x[k]=0;}
 else
 while (aux)
 {
 k++;
 x[k]=aux%10;
 aux/=10;
 }
 p=1;
 for (j=1;j<=k;++j)
 {
 nr1+=x[j]*p;
 p*=b1;
 }
 k=0;
 aux=b;
 if (aux==0) {k++;y[k]=0;}
 else
 while (aux)
 {
 k++;
 y[k]=aux%10;
 aux/=10;
 }
 p=1;
 for (j=1;j<=k;++j)
 {
 nr2+=y[j]*p;
 p*=b2;
 }
 s=nr1+nr2;
 cout<<"suma="<<s<<"\n";
 return 0;
}

4. Se dau doua numere naturale, unul in baza b1, iar celalat in baza b2 (2<=b1, b2<=10). Se cere sa se calculeze produsul lor in baza cea mai mica dintre b1 si b2.

Exemplu: pentru 12 din baza 3 si 100 din baza 2 se va afisa 10100 (deoarece numerele transformate in baza 10 sunt 5 respectiv 4, iar produsul lor din  baza 10 este 20, transformat in baza 2 este 10100).

Mai intai vom transforma numerele in baza 10 si le vom calcula produsul. Vom stabili apoi minimul dintre b1 si b2 si vom transforma produsul in baza minima. Pentru a intelege mai bine urmariti atent urmatorul cod:

#include <iostream>
using namespace std;

int b1=3,a=12,b2=2,b=100,Min,nr1,nr2,x[100],y[100],z[100],i,j,aux,k,p,produs,rez;
int main()
{
 k=0;
 aux=a;
 if (aux==0) {k++;x[k]=0;}
 else
 while (aux)
 {
 k++;
 x[k]=aux%10;
 aux/=10;
 }
 p=1;
 for (j=1;j<=k;++j)
 {
 nr1+=x[j]*p;
 p*=b1;
 }
 k=0;
 aux=b;
 if (aux==0) {k++;y[k]=0;}
 else
 while (aux)
 {
 k++;
 y[k]=aux%10;
 aux/=10;
 }
 p=1;
 for (j=1;j<=k;++j)
 {
 nr2+=y[j]*p;
 p*=b2;
 }
 if (nr1>nr2) Min=b2;
 else Min=b1;
 produs=nr1*nr2;
 k=0;
 aux=produs;
 if (aux==0) {k++;z[k]=0;}
 else
 while (aux)
 {
 k++;
 z[k]=aux%Min;
 aux/=Min;
 }
 for (j=k;j>0;--j)
 cout<<z[j];
 return 0;
}

5. Se cere sa se afiseze (transformat in baza 10) cel mai mare numar in baza 2 format din n cifre (1<=n<=100). Vom avea pentru n=4 numarul 15.

Cel mai mare numar format din 4 cifre in baza 2 este 1111, pentru n=3 vom avea numarul 111. Vom calcula acest numar in variabila nr (in baza 2), apoi vom transforma nr in baza 10.

#include <iostream>
using namespace std;

int n,i,nr,aux,p,k,y[1000],rez,j;
int main()
{
 cout<<"Dati n: ";cin>>n;
 for (i=1;i<=n;++i)
 nr=nr*10+1;
 k=0;
 aux=nr;
 if (aux==0) {k++;y[k]=0;}
 else
 while (aux)
 {
 k++;
 y[k]=aux%10;
 aux/=10;
 }
 p=1;
 for (j=1;j<=k;++j)
 {
 rez+=y[j]*p;
 p*=2;
 }
 cout<<"rezultat: "<<rez<<"\n";
 return 0;
}

6. Se dau doua numere in doua baze de numeratie b1 si b2 (2<=b1, b2<=10). Se cere sa se determine toate solutiile eucatiei xy(b1)+yx(b2)=20. Numarul 20 va fi considerat in baza 10.

Exemplu: pentru bazele de numeratie 4 si 9 exista o singura solutie x=2 si y=1.

Parcurgem toate valorile posibile pentru x si y verificand conditia din enunt. Perechile de numere x si y ce corespund cerintei vor fi afisate.

#include <iostream>
using namespace std;

int b1,b2,x,y,Min;
int main()
{
 cout<<"b1=";cin>>b1;
 cout<<"b2=";cin>>b2;
 if (b1>b2) Min=b2;
 else Min=b1;
 for (x=1;x<Min;++x)
 for (y=1;y<Min;++y)
 if (x*b1+y+y*b2+x==20) cout<<x<<" "<<y<<"\n";
 return 0;
}

Sper ca ati priceput cum se lucreaza cu bazele de numeratie, in curand cred ca voi pune si o problema bazata pe asta. Astept feedback 😀 .

Etichete: articole baze de numeratiebaze de numeratieexercitii baze de numeratieincepatori C++programe C++Tehnic

— Albulescu Cosmina a scris 223 articole

Nu există o descriere a autorului.

  • Articolul anterior Bicicleta Wii
  • Articolul următor WikiReader pentru buzunar !

7 Comentarii

  1. Avadanei Andrei spune:
    octombrie 17, 2009 la 10:32 pm

    Am citit doar problemele propuse si mi s-au parut interesante. Pentru inceput formateaza de acum codul ce il folosesti pentru ca este mai usor de urmarit cu ‘sintax highlighting’. Imi cer scuze pentru absenta indelungata din programarea in C++ insa voi reveni curand cu lucruri noi! 😀

  2. miculprogramator spune:
    octombrie 18, 2009 la 10:09 am

    Multumesc Andrei, data viitoare voi fi mai atenta!

  3. Andrei Misarca spune:
    octombrie 18, 2009 la 12:34 pm

    Și inca o chestie in legatura cu codul. Este mult mai usor de urmarit daca il formatezi puțin mai mult (funcțiile din cadrul unui for sa fie un tab mai in dreapta, pentru if-uri la fel, etc.).

  4. miculprogramator spune:
    octombrie 18, 2009 la 1:06 pm

    Eu il formatez cand il scriu in IDE, dar aici nu stiu de ce apare asa. 😐

  5. Avadanei Andrei spune:
    octombrie 18, 2009 la 1:10 pm

    Pentru ca nu il incadrezi unde trebuie,daca il pui in Visual nu va aparea cum trebuie, tu trebuie sa lucrezi pe HTML. 😛

  6. miculprogramator spune:
    octombrie 18, 2009 la 3:15 pm

    Am priceput acum. 🙂

  7. Steckel spune:
    noiembrie 24, 2011 la 9:50 pm

    Progamare de clasa 1 , nu poti fi mic programator ori stii ori taci din gura simplu ,cel mai bine utilizati limbaju binar e cel mai simplu „01100110011011110111001001101101011000010111010000 100000011000110011101001011100

    0010000000101111010100010010111101011000” nu e nimic greu doar il introduceti in notepad salvati cu extensia .exe si gata programu .


  • Facebook

    WorldIT.info
  • Ultimele Atacuri Cibernetice din Romania – RO Hacked

    [wp_rss_retriever url="https://rohacked.bit-sentinel.com/feed/" excerpt="none" items="5" read_more="false" new_window="true" thumbnail="false" cache="0"] RO Hacked este registrul atacurilor cibernetice din România.
  • Caută

  • Articole Recomandate

    • Recent Posts
    • Tags
    • Număr record de participanți la DefCamp 2015, cel mai important eveniment dedicat securității cibernetice din Europe Centrala si de Estdecembrie 2, 2015
    • La DefCamp 2015 vei afla prin ce tehnici pot fi evitate măsurile de securitate ale sistemelor informatice criticeoctombrie 16, 2015
    • Ultima sansa sa rezervi bilete de tip Early Bird la DefCamp 2015septembrie 1, 2015
    • 15 sfaturi despre cum poti deveni un programator bun venite de la specialisti romaniaugust 4, 2015
    • algoritmica Android antivirus Apple Avadanei Andrei benzi desenate BitDefender blog browser C++ Chrome concurs eveniment Facebook Firefox Google google chrome hacking html5 infografic informatica internet Internet Explorer IT javascript linux Microsoft Mozilla Firefox online PHP programare retea sociala review Romania securitate Tehnologie Twitter web Windows Windows 7 Wordpress WorldIT worldit.info Yahoo! YouTube
  • martie 2023
    L Ma Mi J V S D
     12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
    « dec.    
  • Link-uri Sponsorizate

    • laptop second hand

    • Calculatoare Second Hand

    • cod voucher pc garage

  • Home
  • Exercitii baze de numeratie
  • Important

    • Bit Sentinel
    • Centrul de Cercetare în Securitate Informatică din România
    • DefCamp
  • Prieteni

    • BetiT.ro
    • bijuterii handmade
    • Computerica | Resurse gratuite PC
    • Descopera.org
    • Gadgeturi si IT – Giz.ro
  • Prieteni

    • PC – Config
    • RO Hacked
    • Stiri IT

Copyright © 2009-2014 WORLDIT. Toate drepturile Rezervate.
Termeni și condiții | Contact | Licența Creative Commons