Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[C]Konwersja dec na bin lub dodawanie bin

xysio_ 28 Lut 2009 22:27 6981 7
  • #1 28 Lut 2009 22:27
    xysio_
    Poziom 18  

    witam wszystkich,
    potrzebuje możliwie najlżejszego algorytmu konwersji liczb dziesiątkowych na binarne, lub sposobu na dodawanie liczb binarnych

    0 7
  • #2 28 Lut 2009 23:07
    elektryk
    Poziom 42  

    A po co chcesz konwertować? Komputer wszystko przechowuje i obrabia binarnie, a potem użytkownik wyświetla je w dowolnym systemie.

    0
  • #3 01 Mar 2009 10:05
    ed-ek
    Poziom 34  

    Napisałem taki program konwersji decy na inny system. Możesz go sobie przerobić tylko na binarne

    Code:

    #include <iostream>
    #include <conio.h>
    using namespace std;
     int reszta,liczba,i,j,k,wynik[20];
     const char tab[6]= {'A','B','C','D','E','F'};
     char ch;
      void bin(int);
      void oct(int);
      void hex(int);
     main()
     {
        cout<<"podaj liczbe do zamiany na inny kod ";
        cin>>liczba;   
       cout<<"podaj na jaki kod chcesz zamieniac "<<endl;
       cout<<"decymalny -> binarny press b"<<endl;     
       cout<<"decymalny -> oktalny press o"<<endl;
       cout<<"decymalny -> hexa press h"<<endl;
       cin>>ch;
       if(ch=='b' && liczba<2)cout<<"liczba w kodzie bin. =000"<<liczba;
       if(ch=='b' && liczba>1)bin(liczba);
       if(ch=='o' && liczba<8)cout<<"liczba w kodzie oct. =000"<<liczba;
       if(ch=='o' && liczba>7)oct(liczba);
       if(ch=='h' && liczba<10)cout<<"liczba w kodzie hex. =000"<<liczba;
       if(ch=='h' && liczba>9 && liczba<16)
       { int j=liczba-9;
         cout<<"liczba w kodzie hex. =0"<<tab[j-1];}
       if(ch=='h' && liczba>15)hex(liczba);
       getch();
    }
       void bin(int liczba)
       {
         i=0; 
         while (liczba>1)
         {
            reszta=liczba % 2;   
            if(reszta>0)wynik[i]=reszta;
            liczba=liczba / 2;
            i=i+1;
            if(liczba<2)
            {wynik[i]=liczba;break;}
         }   
         cout<<"liczba w kodzie binarnym= "<<endl;
         for(int j=i;j>=0;j--)
          cout<<wynik[j]<<" ";
       }

       void oct(int liczba)
       {
          i=0;
          while(liczba>7)




          {
           reszta=liczba % 8;
           if(reszta>0)wynik[i]=reszta;
           liczba=liczba / 8;
           i=i+1;
           if(liczba <8)
           {wynik[i]=liczba;break;}               
            }   
                cout<<"liczba w kodzie octalnym= "<<endl;
                   for(int j=i;j>=0;j--)
          cout<<wynik[j]<<" ";
       }
       
         void hex(int liczba)
         {
             i=0;
           while(liczba>15)
           {
            reszta=liczba % 16;
            if(reszta>0)wynik[i]=reszta;
            liczba=liczba / 16;
            i=i+1;
            if(liczba<16)
             {
              wynik[i]=liczba;break; } 
           }     
            cout<<"liczba w kodzie hexadecymalnym= "<<endl;     
               for(int j=i;j>=0;j--)
               {
                 if(wynik[j]<10) cout<<wynik[j];else
                  {
                    int k=wynik[j]-9;
                    cout<<tab[k-1];
                  }                   
            }                         
          }

    0
  • #4 21 Maj 2011 18:53
    radzio515
    Poziom 8  

    ed-ek napisał:
    Napisałem taki program konwersji decy na inny system. Możesz go sobie przerobić tylko na binarne
    Code:

    #include <iostream>
    #include <conio.h>
    using namespace std;
     int reszta,liczba,i,j,k,wynik[20];
     const char tab[6]= {'A','B','C','D','E','F'};
     char ch;
      void bin(int);
      void oct(int);
      void hex(int);
     main()
     {
        cout<<"podaj liczbe do zamiany na inny kod ";
        cin>>liczba;   
       cout<<"podaj na jaki kod chcesz zamieniac "<<endl;
       cout<<"decymalny -> binarny press b"<<endl;     
       cout<<"decymalny -> oktalny press o"<<endl;
       cout<<"decymalny -> hexa press h"<<endl;
       cin>>ch;
       if(ch=='b' && liczba<2)cout<<"liczba w kodzie bin. =000"<<liczba;
       if(ch=='b' && liczba>1)bin(liczba);
       if(ch=='o' && liczba<8)cout<<"liczba w kodzie oct. =000"<<liczba;
       if(ch=='o' && liczba>7)oct(liczba);
       if(ch=='h' && liczba<10)cout<<"liczba w kodzie hex. =000"<<liczba;
       if(ch=='h' && liczba>9 && liczba<16)
       { int j=liczba-9;
         cout<<"liczba w kodzie hex. =0"<<tab[j-1];}
       if(ch=='h' && liczba>15)hex(liczba);
       getch();
    }
       void bin(int liczba)
       {
         i=0; 
         while (liczba>1)
         {
            reszta=liczba % 2;   
            if(reszta>0)wynik[i]=reszta;
            liczba=liczba / 2;
            i=i+1;
            if(liczba<2)
            {wynik[i]=liczba;break;}
         }   
         cout<<"liczba w kodzie binarnym= "<<endl;
         for(int j=i;j>=0;j--)
          cout<<wynik[j]<<" ";
       }

       void oct(int liczba)
       {
          i=0;
          while(liczba>7)
          {
           reszta=liczba % 8;
           if(reszta>0)wynik[i]=reszta;
           liczba=liczba / 8;
           i=i+1;
           if(liczba <8)
           {wynik[i]=liczba;break;}               
            }   
                cout<<"liczba w kodzie octalnym= "<<endl;
                   for(int j=i;j>=0;j--)
          cout<<wynik[j]<<" ";
       }
       
         void hex(int liczba)
         {
             i=0;
           while(liczba>15)
           {
            reszta=liczba % 16;
            if(reszta>0)wynik[i]=reszta;
            liczba=liczba / 16;
            i=i+1;
            if(liczba<16)
             {
              wynik[i]=liczba;break; } 
           }     
            cout<<"liczba w kodzie hexadecymalnym= "<<endl;     
               for(int j=i;j>=0;j--)
               {
                 if(wynik[j]<10) cout<<wynik[j];else
                  {
                    int k=wynik[j]-9;
                    cout<<tab[k-1];
                  }                   
            }                         
          }

    Bardzo ładnie, ale mam jedną uwagę. Zmiennych globalnych raczej się nie używa, to BARDZO zły nawyk programistyczny. Niemądre używanie może spowodować rozspójnienie danych.

    0
  • #5 23 Maj 2011 01:04
    lolcio
    Poziom 16  

    Code:
    Bardzo ładnie, ale mam jedną uwagę. Zmiennych globalnych raczej się nie używa, to BARDZO zły nawyk programistyczny. Niemądre używanie może spowodować rozspójnienie danych.

    Rozspójnienie danych? Wybacz ale pierdoły wypisujesz :) Zmienne globalne są bezpieczne w użyciu, ale są niedopuszczalne w profesjonalnych programach z innego powodu.

    Wyobraź sobie że piszesz jakiejś firmie biblioteke w której są funkcje obliczające różne rzeczy i nie działają one bez kilku zmienych globalnych. Tak że kiedy firma chce użyć kupionej od Ciebie biblioteki za każdym razem musi zadeklarować te zmienne w swoich programach. Jest to bardzo rażące w oczy :)

    Zmienne globalne to najczęściej wynik złego zaprojektowania aplikacji, ale nie powodują błędów.
    Mają jedną fajną ceche nawet...są zawsze inicjowane automatycznie zerem( Jeżeli podzielisz przez to zero to może Ci się wykrzaczyć program owszem :P ). Czasami nawet nie da się ich obejść (bądz nie zauważono sposobu :P ), świadczy o tym środowisko programistyczne borlanda w którym kiedyś przez długi czas siedziała zmienne globalna...i żadnego rozspójnienia danych nie powodowała :P Pozrawiam

    0
  • #6 23 Maj 2011 01:52
    Xitami
    Poziom 29  

    Code:
    #define jeden ('/'/'/')
    
    #define zero  ('-'-'-')
     
    typedef unsigned int uint;
     
    uint inc(uint _a){
        uint _b = jeden;
        while(_a & _b){
            _a ^= _b;
            _b <<= jeden;}
        return _a | _b;}
     
    uint plus(uint _a, uint _b){
        uint dec = zero, _c = zero, _i=zero;
        while(_a | _b){
            uint _a0 = _a & jeden;
            uint _b0 = _b & jeden;
            uint _s = _a0 ^ _b0 ^ _c;
            _c = ((_a0 ^ _b0) & _c) | (_a0 & _b0);
            _a >>= jeden; _b >>= jeden;
            dec |= _s << _i;
            _i = inc(_i);}
        return dec | _c << _i;}
    funkcja plus zwraca _a+_b

    Dodano po 35 [minuty]:

    a dec->bin można zrobić tak:
    Code:
    main(a,b){
    
       if (b) {scanf("%d", &a);
          main(a,0);
       } else {if(a-1)main(a/2,0);
          putchar((a&1)+ 48);}}

    https://ideone.com/J0qlT

    0
  • #8 06 Gru 2011 02:13
    radzio515
    Poziom 8  

    lolcio napisał:
    Code:
    Bardzo ładnie, ale mam jedną uwagę. Zmiennych globalnych raczej się nie używa, to BARDZO zły nawyk programistyczny. Niemądre używanie może spowodować rozspójnienie danych.

    Rozspójnienie danych? Wybacz ale pierdoły wypisujesz :) Zmienne globalne są bezpieczne w użyciu, ale są niedopuszczalne w profesjonalnych programach z innego powodu.

    Wyobraź sobie że piszesz jakiejś firmie biblioteke w której są funkcje obliczające różne rzeczy i nie działają one bez kilku zmienych globalnych. Tak że kiedy firma chce użyć kupionej od Ciebie biblioteki za każdym razem musi zadeklarować te zmienne w swoich programach. Jest to bardzo rażące w oczy :)

    Zmienne globalne to najczęściej wynik złego zaprojektowania aplikacji, ale nie powodują błędów.
    Mają jedną fajną ceche nawet...są zawsze inicjowane automatycznie zerem( Jeżeli podzielisz przez to zero to może Ci się wykrzaczyć program owszem :P ). Czasami nawet nie da się ich obejść (bądz nie zauważono sposobu :P ), świadczy o tym środowisko programistyczne borlanda w którym kiedyś przez długi czas siedziała zmienne globalna...i żadnego rozspójnienia danych nie powodowała :P Pozrawiam


    Nie zrozumieliśmy się. Mechanizm zmiennych globalnych głównie używany jest przy wielowątkowości. Gdy nie zaryglujemy muteksu(co jest rownoznaczne z brakiem synchronizacji), wątki pracujące na zmiennej globalnej pracują asynchronicznie. Dlatego też jeżeli nie używamy z programów wielowątkowych nie wykorzystujemy zmiennych globalnych(bo mozemy nie widziec ze cos nam ta zmienna globalna zmienia)

    0