Tartalomjegyzék
LibreOffice Makró Basic
- Szerző: Sallai András
- Copyright © 2013, Sallai András
- Licenc: CC BY-SA 4.0
- Web: https://szit.hu
Bevezetés
Ehhez a fejezethez a programozás elmélet ismerete ajánlott.
Indulás
Új makró létrehozása:
- Indítsuk el egy LibreOfficet
- Indítsuk el például a Writert
- Mentsük el a dokumentumot
- Eszközök menü → Makrók → Makrók rendezése → LibreOffice Basic …
- Új
A LibreOffice Basic szerkesztő betűmérete:
Eszközök menü -> Beállítások -> Betűkészletek -> Méret
Első
Ha kattintottunk az „Új” gombra, akkor a Basic szerkesztő ablaka ugrik elénk, amelyben a következő kódot látjuk:
REM ***** BASIC ***** SUB Main END SUB
A „REM”-el kezdődő sor csak megjegyzés, amelyet a Basic értelmező nem vesz figyelembe.
Az adott ablakban több makrót is írhatunk, mindegyiket a Sub Makrónév és End Sub kulcsszavak közzé írjuk. Ezek jelzik a makró elejét és végét. Az első név amit felkínál a szerkesztő a „Main”. Ezt természetesen átírhatjuk.
A programírás során legalapvetőbb tevékenység a kiíratás. A következő példánkban ezt egy egyszerű párbeszédablakban fogjuk megtenni:
Sub Main print "Helló Világ" End Sub
A print utasítás egy kis párbeszédablakot dob fel, amely kiírja a paraméterként megadott értékeket, amely esetünkben egy „Helló Világ” nevű szöveg. Írjuk be a szerkesztőbe a Sub nyitó és záró részek közzé, majd futtassuk a makrót. A makró futtatását az „F5” billentyűvel tehetjük meg.
A makrószerkesztő mindig azt a makrót futtatja, amelyben a kurzor áll. Ha kurzor makrokon kívül áll, akkor feldob egy makróválasztó párbeszédablakot.
Mint az fentebb láttuk megjegyzéseket tehetünk egy programkódba a „REM” kulcsszó segítségével. Ugyanerre használható az aposztróf (') karakter is.
'Megyjezés Sub Main 'Megjegyzés print "Helló Világ" REM Megjegyzés End Sub
A Basic nem kis és nagybetűérzékeny.
Kivitel
Írjunk a Main makró után egy másik makrót, amelynek neve „Tobb”:
Sub Tobb print "Helló Világ" print "BASIC nyelven programozok" End Sub
Írjon most két print utasítást a makróba. Utána teszteljük az „F5” billentyűvel.
A print utasítás számok kiíratásához is használható:
Sub Tobb print 35 End Sub
Vegyük észre, hogy most nem tettük idézőjelbe. A számokat nem kötelező idézőjelbe tenni.
Bekéréshez használt dobozzal is tudunk üzeneteket kiírni, ennek használatát később részletezzük.
Sub Beker InputBox("Szám") End Sub
Számítások
Ha szeretnénk kiíratni egy számot, azt megtehetjük idézőjelek nélkül és idézőjelekkel is, mint azt fentebb láttuk. A számokkal műveleteket is végezhetünk. Ekkor a számokat nem tehetjük idézőjelek közzé, mert úgy szövegként (Sztring) lesznek értelmezve. A következő példában 3 és 5 szorzatára vagyunk kíváncsiak:
Sub SzamitSzoroz print 3 * 5 End Sub
Szorzás
Sub SzamitOsszead print 3 + 5 End Sub
Osztás:
Sub Osztas print 3 / 5 End Sub
Az eredmény: 0,6
A maradékot a „mod” operátorral kérhetjük:
Sub Maradék print 3 mod 5 End Sub
Eredménye: 3
Hatványozást a hiányjellel (^) karakterrel lehetséges:
Sub Hatvany print 3 ^ 5 End Sub
Eredménye: 243
Változóhasználat
Csak használjuk
Az adatokat néha szeretnénk a memóriában tárolni. A memóriahelynek adunk egy nevet, és ezek után változóként beszélünk róla. A változókat egyszerűen csak elkezdjük használni. Például az „a” nevű váltózóba a 3-as értéket szeretném eltárolni, akkor:
a = 3
A változóknak lehet hosszabb neve is:
szam = 3
Ha több számot szeretnénk eltárolni, például:
szam1 = 3 szam2 = 5
A változónevek persze úgy a jók, ha beszédesek, azaz elárulják mit tárolunk bennük. A következő példában egy háromszög alapját és magasságát tároljuk el:
alap = 30 magassag = 35
A változókkal ezek után műveleteket végezhetünk. Például:
alap * magassag
vagy:
(alap * magassag)/2
Az ilyen számításokat kifejezésként szokás emlegetni. A kifejezés tulajdonképpen operandusok és operátorok felváltva. (Operandus például egy szám vagy egy változó, az operátor pedig egy művelet, mint szorzás, osztás, stb.)
A szabály tehát egyszerű. Egy egyenlőség jel baloldalára írjuk a változónevet, jobboldalra a milyen értéket vegyen fel.
Az egyenlőségjel jobboldalán persze állhat kifejezés is. Kifejezés például 3 * 5. Ha leírom:
a = 3 * 5
Akkor az „a” változóban a 3 * 5 kifejezés értéke tárolódik.
A kifejezésben változókkal:
a = 3 b = 5 c = 3 * 5
A „c” változóban az „a” és „b” változók szorzata tárolódik.
Írjunk programot, amely ezt ki is írja:
Sub Valtozo a = 5 b = 7 c = a * b print c End Sub
Deklarálás
A deklarálás, azt jelenti, előre megmondjuk mit szeretnénk tárolni a változóban.
Például egész számokat szeretnénk tárolni.
Dim a As Integer
Ha Integer típus használunk a legkisebb tárolható érték -32768, a legnagyob pedig 32767.
Ha ezeknél kisebb vagy nagyobb számot írunk akkor végrehajtáskor túlcsordulási hibaüzenetet kapunk.
Típus | Tartomány | Bytes | Egyéb tudnivaló |
---|---|---|---|
Integer | -32768 – 32767 | 2 bytes | |
Long | -2147483648 to 2147483647 | 4 bytes | |
Single | 1.401298 x 10E-45 – 3.402823 x 10E38 | 4 bytes | |
Double | 4.94065645841247 x 10E-324 – 1.79769313486232 x 10E308 | 8 bytes | |
Currency | -922337203685477.5808 to +922337203685477.5807 | 8 bytes | 64-bites |
Boolean | true, false | ||
Date | Day, Month, Year vagy the Hour, Minute, Second függvények értékei | ||
Object | Objektumváltozó | ||
Variant | Variant változó (a definíció által megadott összes típust tartalmazhatja) | ||
Empty | A változó nincs inicializálva | ||
Null | Nincs érvényes adat |
Nevesített állandó
const MAX = 4
Formázott kimenet
Sub formazott a = 35.1234567 print format(a, "#.####") End Sub
Sub formazott a = 35.123 print format(a, "0000.00000") End Sub
Operátorok
Aritmetikai műveletek | |
---|---|
+ | összeadás |
- | kivonás |
* | szorzás |
/ | osztás |
mod | maradék |
Matematikai függvények
Gyökvonás
Sub Gyokvonas a = sqr(9) print a End Sub
Ebben a nyelven a hatványozáshoz nem tartozik külön függvény, mivel mint az korábban tanultuk van hatványozó operátor:
Sub Hatvanyozas a = 3^2 print a End Sub
Sub szinusz a = sin(1 * pi / 180) print format(a, "#.####") End Sub
Dátumkezelés
- Date - Az aktuális dátumot adja
- Time - Az aktuális időt adja
- Now - Az aktuális dátumot és időt adja egyszerre
a = date print a
Az „a” változó Date típus lesz.
Az „a” változó lehet String típus is:
Dim a As String
Ekkor viszont lehet nem végezhetünk számításokat. Ha megadjuk milyen típus legyen ajánlott a Date típus:
Sub Datum Dim a As Date a = date print a - 2 End Sub
A program 2 nappal kevesebbet mutat.
További információ:
Véletlen számok
A programozásban gyakran szeretnénk véletlen számokat kapni. Erre az rnd függvény alkalmas.
Sub Veletlen 'Véletlenszám generálása; 0 és 1 között kapok vel = rnd print vel End Sub
Sub Veletlen2 '1-3 vel = int(rnd * 3) + 1 print vel End Sub
'A 10i kérésére Sub Lotto r1 = int(rnd * 90) + 1 r2 = int(rnd * 90) + 1 r3 = int(rnd * 90) + 1 r4 = int(rnd * 90) + 1 r5 = int(rnd * 90) + 1 dim str as string str = format(r1, "0.####") & " " str = str & format(r2, "0.####") & " " str = str & format(r3, "0.####") & " " str = str & format(r4, "0.####") & " " str = str & format(r5, "0.####") print str End Sub
Bevitel
A programozás harmadik elemi tevékenysége a bevitel, amikor adatokat kérünk a billentyűzetről. Ez megtehetjük az InputBox() függvény segítségével:
Sub ErtekBe Dim a as double a = InputBox("Szám") b = a * 2 print b End Sub
Szelekció
if
Sub Szelekcio a = 45 if a>70 then print "Nagyobb" End If End Sub
Két ágú szelekció:
Sub Szelekcio a = 45 if a>70 then print "Nagyobb" else print "Kisebb" End If End Sub
Többágú szelekció:
Sub Szelekcio a = 3 if a>5 then print "Nagyobb" elseif a=10 then print "Egyenlő" else print "Akkor kisebb" End If End Sub
Sub Logikai a = 3 if a > 0 and a < 10 then print "Egyjegyű pozitív" else print "Negatív, vagy nem egyjegyű pozitív" end if End Sub
Iteráció
for
Sub Iteracio for i = 1 to 2 print "Meg van" next i End Sub
while
Sub Iteracio i=0 while(i<3) print i i = i + 1 wend End Sub
Sztringkezelés
Darabolás
Dim str As String str = "joska:titok:Nagy József" tomb = Split(str,":") print tomb(0)
Tömbök
Vektor
'6 darab elem 0-tól 5-ig szomozva: Dim tomb(5) tomb(0) = 35 print tomb(0)
Mátrix
'6 darab elem 0-tól 5-ig szomozva: Dim tomb(2, 3) tomb(0) = 35 print tomb(0)
Kezdőérték
tomb = array("Péter", "János", "Tibor") print tomb(0)
Feladatok
Sub Feladat067 print "Gyártó: Sallai András" & chr(13) & (((3^7)/27)*2)/sqr(10*(3^5)) End Sub
Sub Feladat071 Dim r as double Dim h as double r = InputBox("Sugár") h = InputBox("Magasság") v = (1/3)*(r^2)*pi*h print "Térfogat: ", v End Sub
Sub KockaPoker v1 = int(rnd * 6) + 1 v2 = int(rnd * 6) + 1 v3 = int(rnd * 6) + 1 v4 = int(rnd * 6) + 1 v5 = int(rnd * 6) + 1 print v1, v2, v3, v4, v5 End Sub
Sub KockaPoker2 v1 = int(rnd * 6) + 1 v2 = int(rnd * 6) + 1 v3 = int(rnd * 6) + 1 v4 = int(rnd * 6) + 1 v5 = int(rnd * 6) + 1 a = v1 & " " & v2 & " " & v3 & " " & v4 & " " & v5 InputBox(a) End Sub
Párbeszédablak
- Eszközök → Makrók → Párbeszédablakok rendezése → Új
- Megadjuk a nevet → Ok
- Szerkesztés
- Megnyílik a Basic párbeszédablak-szerkesztő
- Vezérlőelemek eszköztár ha nem látszik
- A vezérlőelemek melletti nyílra kattintunk