Programovanie makier v LibreOffice: Operátory (2)

LO.png V článku budeme pokračovať operátormi. Ukážeme si celočíselne delenie a zameriame sa na logické/bitové operátory.  

Operátor celočíselného delenia

Delenie dvoch ľubovoľných čísel poznáte pod operátorom /.  Existuje aj operátor celočíselného delenia, ktorý vráti celé číslo. Znak celočíselného delenia je \. Ak delíme dve celé číslo týmto operátorom, vráti celé číslo. Ak delíme celočíselným operátorom dve desatinné čísla, vyjde celé číslo. A nielen to. Pri celočíselnom delení považuje desatinné čísla za celé. Inak povedané desatinné čísla zaokrúhli buď hore alebo dole podľa pravidiel zaokrúhľovania.

1. príklad: Zmiešaný príklad na klasické a celočíselné delenie. 

Sub example
            MsgBox "31/6 = " & 31/6 & Chr(10) & "31\6 = " & 31\6 & Chr(10) & "-31/6 = " & -31/6 & Chr(10) & "-31\6 = " & -31\6 & Chr(10) & "31/-6 = " & 31/-6 & Chr(10) & "31\-6 = " & 31\-6 & Chr(10) & "31/6.5 = " & 31/6.5 & Chr(10) & "31\6.5 = " & 31\6.5 & Chr(10)
End Sub

Výsledná činnosť makra Výsledná činnosť makra

Operátor AND 

Začneme prvou logickou operáciou a to AND. Pri operácii AND musia byť všetky pravdivostné hodnoty pravdivé, potom vráti, že výrok je pravdivý.

2. príklad: Využitie operátoru AND

Sub example REM začiatok procedúry
 Dim retazec As String REM deklarácie premenných
 Dim pole1()
 Dim pole2()
 Dim i As Integer
 
 pole1() = Array(True, False, True, False) REM naplnenie polí
 pole2() = Array(True, False, False, True)
 
 For i = LBound(pole1()) To UBound(pole1()) REM cyklus 
  retazec = retazec & pole1(i) & " AND " & pole2(i) & " = 
  " & CBool(pole1(i) AND pole2(i)) & CHR(10)
 Next
 
 MsgBox retazec REM výpis reťazca 
 End Sub REM koniec procedúry

Výsledok Výsledok

Rozbor makra: Výsledok nám dáva za pravdu, že len ak sú oba z dvoch pravdivostných hodnôt pravdivé, výsledok je pravdivý. Inak je nepravdivý.

Operátor OR

Logická operácia OR nám dáva hodnotu pravdivú, ak aspoň jeden zo skúmaných výrokov je pravdivý. Inak je nepravdivý. 

3. príklad: Využitie operácie OR

Sub example
 Dim retazec As String
 Dim pole1()
 Dim pole2()
 Dim i As Integer
 
 pole1() = Array(True, False, True, False)
 pole2() = Array(True, False, False, True)
 
 For i = LBound(pole1()) To UBound(pole1())
  retazec = retazec & pole1(i) & " OR " & pole2(i) & " = 
  " & CBool(pole1(i) OR pole2(i)) & CHR(10)
 Next
 
 MsgBox retazec 
 End Sub

Výsledok Výsledok

Rozbor makra: V ukážke vidíte, že ak aspoň jedna z hodnôt (resp. výrokov) je pravdivá, tak výsledok je pravdivý.

Operátor XOR

Exkluzívny OR je trochu sa mierne líši od klasického OR. Platí, že ak aspoň jedná z hodnôt je pravdivá, tak je pravdivý celý výrok, ale zároveň nesmú mať oba pravdivé hodnoty. Ak sú všetky hodnoty pravdivé, potom je výraz nepravdivý. Presvedčí vás o tom príklad.

4. program: Využitie operácie XOR

Sub example
 Dim retazec As String
 Dim pole1()
 Dim pole2()
 Dim i As Integer
 
 pole1() = Array(True, False, True, False)
 pole2() = Array(True, False, False, True)
 
 For i = LBound(pole1()) To UBound(pole1())
  retazec = retazec & pole1(i) & " XOR " & pole2(i) & " = 
  " & CBool(pole1(i) XOR pole2(i)) & CHR(10)
 Next
 
 MsgBox retazec 
 End Sub

Výsledok Výsledok

Rozbor makra: Z výsledku makra sa nám potvrdilo, že ak jedna z hodnôt je pravdivá a zároveň nie sú všetky, potom je výsledok pravdivý, inak je nepravdivý.

Operátor EQV

EQV ako operátor ekvivalencie dáva odpoveď pravdivú vtedy, ak oba hodnoty majú rovnakú hodnoty. Inak je výsledok nepravdivý. Ukážka v príklade.

5. program: Využitie operácie EQV

Sub example
 Dim retazec As String
 Dim pole1()
 Dim pole2()
 Dim i As Integer
 
 pole1() = Array(True, False, True, False)
 pole2() = Array(True, False, False, True)
 
 For i = LBound(pole1()) To UBound(pole1())
  retazec = retazec & pole1(i) & " EQV " & pole2(i) & " = 
  " & CBool(pole1(i) EQV pole2(i)) & CHR(10)
 Next
 
 MsgBox retazec 
 End Sub

Výsledná činnosť makra Výsledná činnosť makra

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

Komentáře

user avatar neutr
Odpovědět
Programovanie makier v LibreOffice: Operátory (2)
1. 03. 2017, 17:54:13
Velmi pěkně zpracované. Jenom mám trošku obavy, že běžný uřivatel neví k čemu jsou tyto postupy dobré a v jakém případě použít ten nebo onen.

Nevím jestli bude Eda na toto téma pokračovat, ale chtělo by to kapitolku pro aplikace pojmů s popisem proč tak a ne jinak.

Aplikace samozřejmě vedou hned na větvení podmínek a cykly. Já osobně se prakticky neobejdu bez INT a MOD, ale například výraz INT(a\b) se pro větvení vůbec nehodí mimo toho že je to syntakticky nesmysl. Samozřejmě a\b lze použít zejména pro matematické výsledky nebo určení chybového rozptylu (například ze zaokrouhlování).

Konkrétně (a\b)-(a/b) je hranice testů k INT(a/b). Samozřejmě Lim[(a\b)-(a/b)]zaokrouhleno nahoru i dolu. Jde ale jen o velmi specifické případy které používám při enumeracích spojitých systémů množin (převody na diskrétní modely) a následně výpočet hypergeometrickým rozdělením podle "obrazu" Partition. Ale jistě se najdou i jiné případy.

Obecně platí že a\b se pro zjištění počtu cyklů, nebo podmínek v drtivě většině případů nehodí. Přestože je lákavé že je to hned zaokrouhleno na celé číslo (n).

Například XOR nemá běžně moc aplikací, ale prakticky se bez něj neobejdou kryptografické postupy. Raději to nechám na autorovi a redakci jestli se do takového článku pustí. Myslím že by to bylo vhodné.

Odpovědět

 

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