Krump Temat założony przez niniejszego użytkownika |
Przeliczanie na systemy... Metoda bezpośrednia. » 2011-09-14 22:39:01 Cześć, może ktoś stąd mi pomoże, bo szukałem po necie ale nic nie mogę znaleźć.
Otóż czy istnieje ogólna metoda przeliczania z dowolnego systemu liczbowego na dowolny, na przykład z szesnastkowego (hexalny) na trójkowy. Jak to zrobić z pominięciem przeliczenia, na przykład na dziesiętny i jak przeliczyć z powrotem.
Istnieje ogólny wzór? Nie interesują mnie programy na przeliczanie.
PS. Jeżeli coś takiego nie istnieje to prosiłbym o informację. |
|
DejaVu |
» 2011-09-14 22:51:22 A czy to stanowi jakiś problem konwetrowanie z postaci A do B z krokiem pośrednim? :) Robisz po prostu dwie funkcje: konwersja z A do X, gdzie X jest liczbą w systemie dziesiętym oraz drugą funkcję umożliwiającą konwersję z X do B. Trzecia funkcja to wywołanie pierwszej i drugiej np. tak:
std::string ATOB( const char * sSource, int iFrom, int iTo ) { return XTOB( ATOX( sSource, iFrom ).c_str(), iTo ); } |
|
Krump Temat założony przez niniejszego użytkownika |
» 2011-09-14 22:54:23 Nie zrozumieliśmy się... Mi nie chodzi o program, czy kod do programu, mi chodzi o teorię czystko papierniczą (na kartce xD). Tak zwana metoda piśmiennicza ;p |
|
DejaVu |
» 2011-09-14 22:56:35 To wyprowadź sobie czysto teoretyczny wzór :) Przecież znasz przekształcenia jakie należy wykonać między krokami by osiągnąć efekt :) Może coś się uprości po drodze (ale w to wątpię) :) |
|
Krump Temat założony przez niniejszego użytkownika |
» 2011-09-14 23:06:51 No właśnie nic mi nie wychodzi, dlatego szukam po necie jakiejś informacji... |
|
akwes |
» 2011-09-14 23:10:46 Nie wiem na ile Cię to interesuje ale na zajęciach kiedyś sobie napisałem void DecToSys( int a, int sys ) { for( int i = 0; i < sys; i++ ) { if( a == i ) { if( i <= 9 ) cout << i; if( i == 10 ) cout << 'A'; return; } } cout << a % sys; a = a / sys; DecToSys( a, sys ); };
Jest to rekurencyjne obliczanie liczby w podanym systemie. Oczywiście liczbę którą się uzyska przez to, trzeba jeszcze obrócić :P Ogólnie mądrze używając operatora modulo, powinno się dać to przepisać na SysToSys :P |
|
Krump Temat założony przez niniejszego użytkownika |
» 2011-09-14 23:15:23 Wiesz to jest z dziesiętnego na dowolny, a to ja szybko zrobię na kartce metodą dzielenia, a w druga algorytmem Hornera :) Tylko mi chodzi o to, aby pominąć sprowadzanie do dziesiętnego, jakiś ogólny wzór/algorytm działający miedzy systemami. I nie chodzi o program, bo to to łatwo zrobić, tlyko chodzi mi o długopis i kartkę, bo na maturze z informatyki masz napisać to obliczeniami a nie wyrywkiem kodu z C++ ;p |
|
akwes |
» 2011-09-14 23:37:14 Wiesz... Taki algorytm (przynajmniej, który teraz wymyśliłem na poczekaniu) może być trudniejszy i wolniejszy niż przeliczenie poprzez dec (mój jest, o ile jest w ogóle poprawny). Tak samo np. licząc miejsca zerowe funkcji niby zawsze można liczyć z delty ale po co jest dłużej i często trudniej.
A teraz moje wymysły:
Wiadomo że system jest tak naprawdę podstawą dla kolejnych potęg w zależności od miejsca.
(Dla BIN:
0 0 1 (DEC: 4) 2^0 | 2^1 | 2^2 mnożymy liczbę wyżej i mamy 0,0,4 = 4. )
dla systemu x, to cyfry w liczbie to kolejno od prawej x^0, x^1, x^2, x^3 itd...
Czyli dla systemów X i Y trzeba obliczyć proste równanie
X^miejsce_cyfry = Y^miejsce_cyfry lub X^miejsce_cyfry = Y^miejsce_cyfry + Y^(miejsce_cyfry-1) + ... + Y^0
Czy to jest poprawny sposób :P nie wiem, ale na pewno nie efektywny i idzie się pomylić |
|
« 1 » 2 |