Programovanie makier v LibreOffice: Program na konverziu do vybraných číselných sústav

LO.png V tomto dieli vytvoríme program, ktorý nám umožní urobiť konverziu medzi niektorými číselnými sústavami. Zároveň si precvičíme niektoré veci, ktoré sme už brali.  

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 Vstup od užívateľa

Výsledok makra 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.

(Jako ve škole) Průměr: 1.00 | Hodnotilo: 3
 

Přidat názor

 

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích najdete v nápovědě. Diskuzi můžete sledovat pomocí RSS kanálu.

 
Eduard Boldižár

Eduard Boldižár

Som redaktorom stránky astrotech.cz. Mám 24 rokov. Čas trávim v IT škole. Medzi moje záľuby patrí astronómia, sci-fi literatúra a programovanie.

 
 
 
woo jaw demo hz