Witam, przedstawiam dwa algorytmy: jeden zamienia podaną liczbę zapisaną w systemie dziesiętnym na dowolny inny system, oraz drugi, który zamienia dowolną liczbę w podanym systemie na system decymalny (dziesiętny). Algorytmy zamieniają liczby naturalne.

Zamiana na system decymalny.

Aby zamienić liczbę zapisaną w dowolnym systemie na system dziesiętny, pomnożyć każdą cyfrę wchodzącą w jej skład przez odpowiednią potęgę podstawy systemu. Potęga ta, to indeks cyfry w liczbie licząc od prawej (zaczynając liczenie od 0). Spójrz na przykład, w którym zamienimy liczbę 2310 zapisaną w systemie czwórkowym:

Otrzymaliśmy liczbę w systemie decymalnym. Cyfra 2 stoi na 3 miejscu licząc od prawej, więc mnożymy ją przez podstawę systemu podniesioną do 3 potęgi, potem 3 znajduje się na drugiej pozycji licząc od prawej, więc mnożymy ją przez podstawę systemu podniesioną do drugiej potęgi itd.

Jeżeli podstawa systemu liczby jest większa od 10, to do jej zapisu wykorzystujemy 11 cyfr, ale oczywiście mamy ich tylko 10. Aby oznaczyć kolejny 'cyfry’ używamy liter: A=10, B=11 itd. (tak jak ma to miejsce w systemie szesnastkowym). Zamieńmy liczbę zapisaną w systemie dwunastkowym:

Czas na algorytm. Funkcja zamiany przyjmuje jako pierwszy parametr liczbę zapisaną w łańcuchu tekstowym, a jaki drugi parametr-podstawę jej systemu. Zwracana wartość to przesłana liczba zapisana w systemie dziesiątkowym.

Opis:

1. Jeżeli przesłany ciąg znaków jest pusty lub podstawa systemu jest mniejsza od 2, to opuszczamy funkcję. Podst. systemu nie może być też większa od 35, bo dla systemu o podst. = 36 zabrakło by nam wielkich liter do reprezentacji kolejnych 'cyfr’.
2. Jeżeli podstawa systemu jest większa od 10, to do zapisu jej cyfr większych od 9 używamy liter, musimy więc zamienić ją na liczbę. Obliczamy ją, odejmując od kodu danego znaku kod znaku A jako, że jest on pierwszy, a potem dodajemy 10, jako, że jest to następna ‘cyfra’ po 9. Np. B oznacza 11, więc od kodu tego znaku (66) odejmujemy kod pierwszego znaku, czyli A (65). Do wyniku dodajemy 10, gdyż to taką wartość ma pierwsza litera-A.
3. Jeżeli Dana jest większa bądź równa podst. systemu, to oznacza, że liczba jest źle zapisana, ponieważ w danym systemie możemy używać jedynie cyfr z przedziału
0..Podstawa systemu -1.
4. To najważniejsza linijka.

stosując: Exp(potega * Ln(liczba)) ; otrzymujemy daną potęgę podanej liczby. Musimy podnieść podstawę systemu do potęgi = pozycji cyfry w liczbie licząc od prawej. Stosujemy zapis Length(Liczba) – i aby otrzymać tą pozycję. Mamy już podniesioną do odpowiedniej potęgi podstawę systemu. Mnożymy ją przez aktualną cyfrę i wynik dodajemy do rezultatu zwracanego przez funkcję. Koniec.

Wykorzystanie:

Zamiana z decymalnego na dowolny system.

Całkiem prosta sprawa 😉 Dzielisz podaną liczbę przez podstawę systemu. Resztę z tego dzielenia wpisujesz na początku do zmiennej string, a wynik dzielenia (całkowitego) podstawiasz jako nową liczbę. Wykonujesz te czynności dopóki liczba > 0. Spójrz na przykład: zamieńmy liczbę 32 456 na system dziewiątkowy :

Wynik: 48462. Pamiętaj! Cyfry spisujesz od dołu.

Przejdźmy do algorytmu. Funkcja przyjmuje dwa parametry: liczbę do zakodowania oraz podstawę systemu, na który ma być zamieniona. Funkcja zwraca string z zamienioną liczbą.

Opis:

1. Resztę z dzielenia zapisujemy w zmiennej.
2. Jeżeli reszta jest większa od zera, to oznacza, że mamy do czynienia z systemem o podstawie większej niż 10. Należy zatem zastapić daną cyfrę znakiem, który będzie oznaczał daną cyfrę.
3. Wstawiamy na początek stringu – rezultatu resztę z dzielenia, którą przed chwilą wyliczyliśmy.
4. Teraz przypisujemy Liczbie wynik dzielenia jej przez podstawę systemu.

Gotowe! Otrzymujemy zakodowaną liczbę.

Użycie:

Zamiana z dowolnego systemu na dowolny.

Wykorzystując obie powyższe funkcje, możemy zamienić liczbę zapisaną w dowolnym systemie na inny, dowolny system:

Autor: Iskar

Załączniki