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

Przeliczanie na systemy... Metoda bezpośrednia.

Ostatnio zmodyfikowano 2011-09-19 22:57
Autor Wiadomość
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ę.
P-40985
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:
C/C++
std::string ATOB( const char * sSource, int iFrom, int iTo )
{
    return XTOB( ATOX( sSource, iFrom ).c_str(), iTo );
}
P-40987
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
P-40989
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ę) :)
P-40990
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...
P-40991
akwes
» 2011-09-14 23:10:46
Nie wiem na ile Cię to interesuje ale na zajęciach kiedyś sobie napisałem

C/C++
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';
            //... ile Ci potrzeba literek
            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
P-40992
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
P-40993
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ć
P-40994
« 1 » 2
  Strona 1 z 2 Następna strona