Tvoríme program
Predstava programu je taká, že skonvertuje celé číslo do troch podôb. Prvá podoba bude hexadecimálna. Druhá bude osmičková a tretia binárna. Celkom jednoduchá predstava, ale uskutočniteľná? Samozrejme, nie je to nič zložité. Na prevod do hexadecimálnej sústavy nám poslúži funkcia Hex() a do osmičkovej funkcia Oct().
Najviac sa namakáme na realizácii prevodu do binárnej podoby. Z cyklu o operátoroch už by ste mali poznať prevod z desiatkovej do binárnej podoby. No v programe bude alternatívny postup a využijeme zaujímavého vzťahu medzi hexadecimálnymi číslami a ich binárnymi obdobami.
1. príklad: Program na konverziu do vybraných číselných sústav
Sub Conversion REM začiatok procedúry Dim cislo As Long REM deklarácie premenných Dim retazec As String Dim hexRetazec As String Dim octRetazec As String Dim binaryRetazec As String retazec = InputBox("Zadaj lubovolne cele cislo!") REM užívateľ zadáva číslo If IsNull(retazec) Then Exit Sub REM testy či užívateľ zadal číslo If Len(Trim(retazec)) = 0 Then Exit Sub cislo = CLng(Trim(retazec)) hexRetazec = Hex(cislo) REM konvezie do určitých číselných sústav octRetazec = Oct(cislo) binaryRetazec = IntToBinaryConversion(cislo) retazec = "Tvoje zvolené cislo = " & Cstr(cislo) & Chr(10) & "Hex( " & CStr(cislo) & ") = " & hexRetazec & Chr(10) & "Oct( " & CStr(cislo) & ") = " & octRetazec & Chr(10) & "Binary(" & Cstr(cislo) & ") = " & binaryRetazec MsgBox retazec REM vypísanie na obrazovku End Sub REM funkcia na konverziu celého čísla na binárnu podobu Function IntToBinaryConversion(ByVal cislo As Long) As String Dim hexRetazec As String Dim binaryRetazec As String hexRetazec = Hex(cislo) Dim i As Integer For i = 1 To Len(hexRetazec) Select Case Mid(hexRetazec, i, 1) Case "0" binaryRetazec = binaryRetazec & "0000" Case "1" binaryRetazec = binaryRetazec & "0001" Case "2" binaryRetazec = binaryRetazec & "0010" Case "3" binaryRetazec = binaryRetazec & "0011" Case "4" binaryRetazec = binaryRetazec & "0100" Case "5" binaryRetazec = binaryRetazec & "0101" Case "6" binaryRetazec = binaryRetazec & "0110" Case "7" binaryRetazec = binaryRetazec & "0111" Case "8" binaryRetazec = binaryRetazec & "1000" Case "9" binaryRetazec = binaryRetazec & "1001" Case "A" binaryRetazec = binaryRetazec & "1010" Case "B" binaryRetazec = binaryRetazec & "1011" Case "C" binaryRetazec = binaryRetazec & "1100" Case "D" binaryRetazec = binaryRetazec & "1101" Case "E" binaryRetazec = binaryRetazec & "1110" Case "F" binaryRetazec = binaryRetazec & "1111" End Select Next IntToBinaryConversion = binaryRetazec End Function
Vstup od užívateľa
Výsledok makra
Rozbor makra: Makro začína vstupom od užívateľa. Po zadaní čísla užívateľom program skontroluje, či bolo vôbec niečo zadané zo strany užívateľa Najprv funkcia IsNull skontroluje, či užívateľ niečo zadal. Ak nie, tak makro končí. Pozrieme sa i na situáciu, ak užívateľ zadal medzeru a žiadne číslo.
Medzery odstráni funkcia Trim (túto funkciu ešte precvičíme v budúcom dieli) a funkcia Len vráti počet znakov v reťazci. Ak vráti hodnotu 0, makro skončí. Následne v reťazec prekonvertujeme na premennú typu Long (dlhé celé čísla). A následne nastáva jadro programu. Zmeníme celé desiatkové číslo na hexadecimálne, osmičkové a binárne.
Zmena celého čísla na binárne je najkomplikovanejšia časť programu. Pre jednoduchú konverziu využijeme poznatok, že hexadecimálne čísla rastú rovnako, ako 4-bitové binárne čísla. Inak povedané, medzi týmito dvoma veličinami je priama úmera. Preto desiatkové číslo skonvertujeme na hexadecimálne a tak postupne získame binárnu podobu.