Konwersja z sytemu dziesiątkowego na system od 2 do 16...
Ostatnio zmodyfikowano 2012-06-08 08:11
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... |
|
xevuel |
» 2012-06-07 13:01:53 |
|
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 :) |
|
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: #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 :) |
|
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. :) |
|
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ł |
|
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/ |
|
« 1 » |