Vianoce v ITnetwork sú tu! Dobí si teraz kredity a získaj až 80 % extra kreditov na e-learningové kurzy ZADARMO. Zisti viac.
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

Algoritmus pre prevod medzi ľubovoľnými sústavami

Jednoduchý algoritmus pre prevod medzi ľubovoľnými číselnými sústavami využívajúce Hornerovho schéma vrátane zdrojových kódov v C# .NET.

private string ConvertToBase(int numberOfBase, int value)
{
    Stack<char> result = new Stack<char>();

    while (value > 0)
    {
        int rest = value % numberOfBase;
        result.Push(rest > 9 ? Convert.ToChar(rest + 55) : rest.ToString()[0]);
        value = (value - rest) / numberOfBase;
    }

    return new string(result.ToArray());
}

private int ConvertFromBase(int numberOfBase, string value)
{
    int result = 0;

    foreach (char rough in value.Substring(0, value.Length - 1))
        result = (result + GetNumber(rough)) * numberOfBase;

    return result + GetNumber(value[value.Length - 1]);
}

private int GetNumber(char val)
{
    try
    {
        return int.Parse(val.ToString());
    }
    catch
    {
        return (int)val - 55;
    }
}

Prevod do zadanej sústavy prebieha najznámejším spôsobom - odoberiem zo základného čísla celočíselný zvyšok po delení zvolenú sústavou a zapíšem ho. Zmenšené základné číslo vydelím (teraz už bez zvyšku) zvolenú sústavou a takto pokračujem, kým mi nezostane zo základného čísla 0. Navyše tu využívam zásobník, takže výsledok nemusím prevracať - ale len postavím string z poľa znakov.

Prevod zo sústavy je o niečo zaujímavejšia - keďže využívam Hornerovho schémy. Bohužiaľ neviem, ako to efektívne popísať - proste Hornerovho schéma vyzerá práve tak - čiže:

An = čísloSoustavy * (A (n + 1) + čísloSoustavy * (...

Pre začiatočníkov:

Convert.ToChar je metóda, ktorej prametr môže byť ASCII poradie znaku - toho tu využívam. V ASCII začína Latin až od 64. znaku. Preto musím k maximálnemu číslu desiatkovej sústavy - 9 - pripočítať ešte 55. 55 + 9 = 64 ... A naopak char sa dá prekonvertovať do ASCII poradí ... Toho využívam tu: (int) val a odpočtu zase oných 55 ...

V ďalšej lekcii, Prevod čísel medzi číselnými sústavami , si ukážeme algoritmy pre prevod čísel medzi číselnými sústavami.


 

Všetky články v sekcii
Matematické algoritmy
Preskočiť článok
(neodporúčame)
Prevod čísel medzi číselnými sústavami
Článok pre vás napísal matesax
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Aktivity