Programovanie makier v LibreOffice: Funkcia Rnd (1)

Vývoj Potrebujete v makre vylosovať náhodné číslo a neviete ako nato? Tento diel vám priblíži funkciu Rnd.   

Funkcia Rnd

Funkcia Rnd vrácia náhodné desatinné číslo v intervále od 0 do 1. Poďme si pozrieť prvý príklad.

1. príklad: Skúšame, či fakt funkcia Rnd vrácia desatinné číslo

Sub Macro   REM začiatok procedúry

Dim cislo As Variant   REM deklarácia premennej
cislo = Rnd   REM získanie náhodného čísla
MsgBox cislo   REM výpis na obrazovku 

End Sub   REM koniec procedúry

Výsledné náhodné desatinné číslo Výsledné náhodné desatinné číslo

Takže sme zistili, že vrácia desatinné číslo. Ok, skúsme ho zaokruhliť na celé číslo. Ukážeme si dve jednoduché spôsoby, ako to urobíme.

2. príklad: Prvý spôsob je cez deklaráciu premennej

Sub Macro   REM začiatok procedúry 

Dim cislo As Integer   REM deklarácia premennej
cislo = Rnd   REM získanie náhodného čísla
MsgBox cislo   REM výpis na obrazovku 

End Sub   REM koniec procedúry

Výsledné náhodné celé číslo Výsledné náhodné celé číslo

3. príklad: Duhý spôsob cez funkciu CInt

Sub Macro   REM začiatok procedúry 

Dim cislo As Variant   REM deklarácia premennej
cislo = CInt(Rnd)   REM získanie náhodného čísla
MsgBox cislo   REM výpis na obrazovku 

End Sub   REM koniec procedúry

Len malokedy nám stačí taký malý intervál na tvorbu náhodných čísel. Veď aj pri hode kocky môže nastať šesť rôzných udalostí. Na vytvorenie hociakého interválu nám slúži jednoduchy vzorec: (maximálne číslo interválu – minimálne číslo interválu) * Rnd + minimálne číslo interválu

Napríklad chcem intervál od 1 do 10. Podľa vzorca nám to vychádza takto: (10 – 1) * Rnd + 1, kde Rnd je náhodné desatinné číslo.

Poďme uviesť vzorec do praxe.

4. príklad: Tvoríme si vlastný interval

Sub Macro   REM začiatok procedúry 

Dim cislo As Variant   REM deklarácia premennej
cislo = CInt((5-1)*Rnd+1)   REM získanie náhodného čísla
MsgBox cislo   REM výpis na obrazovku 

End Sub   REM koniec procedúry

Výsledné náhodné číslo v intervale od 1 do 5 Výsledné náhodné číslo v intervale od 1 do 5

5. príklad: Uhádni na aké číslo myslím!

Sub Macro   REM začiatok procedúry 

Dim vstup As String   REM deklarácie premenných
Dim cislo As Integer

vstup = InputBox("Zadaj na aké číslo myslím v intervale 1-10?")   REM vstup od užívateľa

If IsNull(vstup) Then Exit Sub   REM kontrolujeme či bolo vôbec niečo zadané
If Len(Trim(vstup)) = 0 Then Exit Sub

cislo = CInt(Trim(vstup))   
nahodneCislo = CInt((10-1)*Rnd+1)   REM získanie náhodného čísla

If cislo = nahodneCislo Then   REM ak sa zhoduje užívateľov tip s náhodne vygenerovaným, program mu to oznámi 
MsgBox "Super uhádol si!"
Else MsgBox "Smola, myslel som na číslo: " & nahodneCislo & "! Tak snáď nabudúce sa ti bude lepšie dariť :)"  
End If   REM koniec podmienky

End Sub   REM koniec procedúry

Vstup od užívateľa Vstup od užívateľa

Výsledok programu Výsledok programu

6. príklad: Uhádni moju obľúbenú farbu

Sub Macro   REM začiatok procedúry 

Dim vstup As String   REM deklarácie premenných
Dim cislo As Integer
Dim farba As String

vstup = InputBox("Zadaj farbu ako číslo, ktorú mám rád! Poradím ti, máš na výber len modrú (1), zelenú (2) a červenú (3)!")   REM vstup od užívateľa

If IsNull(vstup) Then Exit Sub   REM kontrolujeme či bolo vôbec niečo zadané
If Len(Trim(vstup)) = 0 Then Exit Sub
If CInt(Trim(vstup)) <= 0 Then Exit Sub   REM chceme len čísla od 1 do 3
If CInt(Trim(vstup)) >= 4 Then Exit Sub

cislo = CInt(Trim(vstup))
nahodneCislo = CInt((3-1)*Rnd+1)   REM získanie náhodného čísla

If nahodneCislo = 1 Then farba = "modrá"   REM pri výpise to budeme potrebovať
If nahodneCislo = 2 Then farba = "zelená"
If nahodneCislo = 3 Then farba = "červená"

If cislo = nahodneCislo Then   REM ak sa zhoduje užívateľov tip s náhodne vygenerovaným, program mu to oznámi 
MsgBox "Super uhádol si!"
Else MsgBox "Smola, moja obľúbená farba je: " & farba & "! Tak snáď nabudúce sa ti bude lepšie dariť :)"  
End If   REM koniec podmienky

End Sub   REM koniec procedúry

Vstup od užívateľa Vstup od užívateľa

Výsledok programu Výsledok programu

Nabudúce si ukážeme sofistikovanejšie príklady s funkciou Rnd.

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

Komentáře

user avatar lp.
Odpovědět
Programovanie makier v LibreOffice: Funkcia Rnd (1)
9. 08. 2017, 15:55:12
Do příkladu na použití Rnd se vloudila drobná nepřesnost. Interval dostanee, ale funkce CInt v použitém vzorci

CInt((10-1)*Rnd+1)

zaokrouhluje. V důsledku toho, je pravděpodobnost vygenerování hodnoty 1 nebo 10 poloviční proti ostatním číslům v intervalu.

Nabízí se např. varianta

Int((10-1)*Rnd+1)

Ale ani to není úplně to pravé, vrací hodnoty 1 - 9, hodnotu 10 nedostanete. Obecně až varianta

Int((do - od + 1)*Rnd + od)

by měla fungovat. (Neřeším kvalitu generátoru.)

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