Informatika gyűjtemény

Egy szinttel feljebb 1. óra

2004050607080910

NézetNyomtat

1. óra - Átváltás különböző számrendszerek között

Adott szám számjegyeinek előállítása valamilyen számrendszerben

Kezdjük egy egyszerű példával. Az 1984 szám utolsó jegye tízes számrendszerben "4", ez azt jelenti, hogy az 1984 10-zel vett osztási maradéka 4. A következő jegy meghatározásához "le kell vágni" a 4-est a szám végéről, ez matematikailag azt jelenti, hogy elosztjuk 10-zel. (Egész osztás, "DIV".) Ezután a 198 számmal ismételjük meg az előbbieket (maradék képzés, egész osztás), így kapjuk a "8" számjegyet és marad a 19 szám. Hasonló lépésekkel a "9" és "1" számjegyek is előállnak, és marad a 0, leáll az algoritmus.
Mindez általánosan, tetszőleges $m$ alapú számrendszerben:
Eljárás Számjegyek( n )
    i := 0
    Ciklus amíg n > 0
        jegy[i] := n MOD m
        n := n DIV m
        i := i + 1
    Ciklus vége
Eljárás vége
Megkaptuk tehát az $n$ szám jegyeinek értékét $m$ alapú számrendszerben, az i. értéke jegy[i], ahol az indexelés a legkisebb helyértéken kezdődik. Meg kell még oldani a megjelenítést, például a "13" számjegyértékhez a "D" karakter tartozik 16-os számrendszerben.

Szám értékének meghatározása számjegyei alapján

A számjegyekből többféle módon kiszámolható a szám értéke

Egyszerű, de nem túl hatékony

$1984=1\cdot 10^3+9\cdot 10^2 + 8 \cdot 10^1 + 4$

Cselesebb és hatékonyabb

$1984=(((1 \cdot 10)+9)\cdot 10) + 8) \cdot 10 + 4$
A második felírást szokás Horner-elrendezésnek nevezni. Az algoritmus:
Eljárás Horner( jegy[0], jegy[1], ..., jegy[k-1] )
    szám := jegy[k-1]
    Ciklus i := (k-2)-től 0-ig
        szám := m * szám 
        szám := szám + jegy[i]
    Ciklus vége
Eljárás vége
Vigyázat! Ha a szám jegyeit egy karakterláncból olvassuk (balról-jobbra), akkor a jegyek indexelése fordított, a legkisebb indexen a legnagyobb helyértékű jegy karaktere található.

Feladat