Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Konwersja z sytemu dziesiątkowego na system od 2 do 16...

Ostatnio zmodyfikowano 2012-06-08 08:11
Autor Wiadomość
VoyteQ
Temat założony przez niniejszego użytkownika
Konwersja z sytemu dziesiątkowego na system od 2 do 16...
» 2012-06-07 12:57:55
Jak w temacie. Potrzebuje pomocy. Słaby ze mnie programista a muszę zrobić taki program na zaliczenie. Nie oczekuję że ktoś napisze mi to za darmo więc czekam na propozycje...
P-57991
xevuel
» 2012-06-07 13:01:53
http://www.forumpc.pl/index.php?showtopic=191938
Wszystko wytłumaczone, nawet gotowca masz. Użycie Google nie boli!
P-57993
VoyteQ
Temat założony przez niniejszego użytkownika
» 2012-06-07 13:04:42
Dzięki za odpowiedź, widziałem ten kod ale cos w tym nie grało... skończe obiad i napisze co i jak :)
P-57996
yoogi
» 2012-06-07 14:17:09
1. Za pomocą "itoa" bodajże można było konwertować na inne systemy liczbowe.
2. Za pomocą printf czy tam sprintf, też się chyba dało
3. Możesz ręcznie to oprogramować, kiedyś do szkoły kilka godzin przed lekcją pisałem program:
C/C++
#include <iostream>
#include <vector>
#include <string>
#include <cmath>
using namespace std;

string DecToBin( int l )
{
    string s;
    vector < bool > v;
    while( l > 0 )
    {
        if( l % 2 )
        {
            v.push_back( true );
            l = l - 1;
            l = l / 2;
        }
        else
        {
            v.push_back( false );
            l = l / 2;
        }
    }
    for( int i = v.size(); i > 0; i-- )
    {
        if( v[ i - 1 ] ) s += "1";
        else s += "0";
       
    }
    return s;
}

string BinToHex( string a )
{
    string s, b, c;
    if( a.size() % 4 == 1 ) s = "000" + a;
    else if( a.size() % 4 == 2 ) s = "00" + a;
    else if( a.size() % 4 == 3 ) s = "0" + a;
    else s = a;
   
    int p =( s.size() / 4 );
    while( p > 0 )
    {
        b += s[ 0 ];
        b += s[ 1 ];
        b += s[ 2 ];
        b += s[ 3 ];
       
        if( b == "0000" ) c += "0";
       
        if( b == "0001" ) c += "1";
       
        if( b == "0010" ) c += "2";
       
        if( b == "0011" ) c += "3";
       
        if( b == "0100" ) c += "4";
       
        if( b == "0101" ) c += "5";
       
        if( b == "0110" ) c += "6";
       
        if( b == "0111" ) c += "7";
       
        if( b == "1000" ) c += "8";
       
        if( b == "1001" ) c += "9";
       
        if( b == "1010" ) c += "A";
       
        if( b == "1011" ) c += "B";
       
        if( b == "1100" ) c += "C";
       
        if( b == "1101" ) c += "D";
       
        if( b == "1110" ) c += "E";
       
        if( b == "1111" ) c += "F";
       
        s.erase( 0, 4 );
        b.clear();
        --p;
    }
    return c;
}

string BinToOct( string a )
{
    string s, b, c;
    if( a.size() % 3 == 1 ) s = "00" + a;
    else if( a.size() % 3 == 2 ) s = "0" + a;
    else s = a;
   
    int p =( s.size() / 3 );
    while( p > 0 )
    {
        b += s[ 0 ];
        b += s[ 1 ];
        b += s[ 2 ];
       
        if( b == "000" ) c += "0";
       
        if( b == "001" ) c += "1";
       
        if( b == "010" ) c += "2";
       
        if( b == "011" ) c += "3";
       
        if( b == "100" ) c += "4";
       
        if( b == "101" ) c += "5";
       
        if( b == "110" ) c += "6";
       
        if( b == "111" ) c += "7";
       
        s.erase( 0, 3 );
        b.clear();
        --p;
    }
    return c;
}

string HexToBin( string a )
{
    string b, c;
    for( int i = 0; i < a.size(); i++ )
    {
        c += a[ i ];
        if( c == "0" ) b += "0000";
       
        if( c == "1" ) b += "0001";
       
        if( c == "2" ) b += "0010";
       
        if( c == "3" ) b += "0011";
       
        if( c == "4" ) b += "0100";
       
        if( c == "5" ) b += "0101";
       
        if( c == "6" ) b += "0110";
       
        if( c == "7" ) b += "0111";
       
        if( c == "8" ) b += "1000";
       
        if( c == "9" ) b += "1001";
       
        if( c == "A" ) b += "1010";
       
        if( c == "B" ) b += "1011";
       
        if( c == "C" ) b += "1100";
       
        if( c == "D" ) b += "1101";
       
        if( c == "E" ) b += "1110";
       
        if( c == "F" ) b += "1111";
       
        c.clear();
    }
    return b;
}

string OctToBin( string a )
{
    string b, c;
    for( int i = 0; i < a.size(); i++ )
    {
        c += a[ i ];
        if( c == "0" ) b += "000";
       
        if( c == "1" ) b += "001";
       
        if( c == "2" ) b += "010";
       
        if( c == "3" ) b += "011";
       
        if( c == "4" ) b += "100";
       
        if( c == "5" ) b += "101";
       
        if( c == "6" ) b += "110";
       
        if( c == "7" ) b += "111";
       
        c.clear();
    }
    return b;
}

string BinToDec( string a )
{
    int b = 0;
    for( int i = 0; i < a.size(); i++ )
    {
        int h = a.size() -( i + 1 );
        if( a[ i ] == '1' ) b += pow( 2,( float ) h );
       
    }
    string tmp;
    sprintf(( char * ) tmp.c_str(), "%d", b );
    return tmp.c_str();
}

int main()
{
    cout << BinToDec( "11111111" );
    cout << "Podaj liczbe: ";
    int a;
    cin >> a;
    string b, c, d;
    b = DecToBin( a );
    c = BinToHex( b );
    d = BinToOct( b );
    cout << a << endl
    << b << endl
    << c << endl
    << d << endl << endl
    << HexToBin( "FF" ) << endl
    << OctToBin( "77" );
    cin.sync();
    cin.clear();
    cin.get();
}
Może i nie jest super napisany, ale ważne, że działa :)
P-58005
m4tx
» 2012-06-07 16:07:42
1. Za pomocą "itoa" bodajże można było konwertować na inne systemy liczbowe.
itoa()
 nie jest w standardzie C++ - nie każdy kompilator go obsługuje.
2. Za pomocą printf czy tam sprintf, też się chyba dało
Tak, za pomocą
sprintf()
 się da, ale tylko na system szesnastkowy, dziesiętny i ósemkowy. :)
P-58017
yoogi
» 2012-06-08 01:11:00
Od kiedy stdlib.h nie jest w standardzie ? Jakoś ja się nie spotkałem jeszcze z kompilatorem, który by tego nie obsługiwał
P-58058
m4tx
» 2012-06-08 08:11:04
Od kiedy stdlib.h nie jest w standardzie ?
A czy ja tak napisałem? Ja napisałem, że
itoa()
 nie jest w standardzie... Coś słabo szukałeś tych kompilatorów - mi go GCC na Linuksie kiedyś nie obsługiwał. (teraz pewnie też nie, po prostu dawno sprawdzałem)
http://www.cplusplus.com/reference/clibrary/cstdlib/itoa/
P-58061
« 1 »
  Strona 1 z 1