[[oktatas:programozás:basic:basic_libreoffice|< Basic LibreOffice]]
====== LibreOffice Makró Basic ======
* **Szerző:** Sallai András
* Copyright (c) 2013, Sallai András
* Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC BY-SA 4.0]]
* Web: https://szit.hu
===== Bevezetés =====
Ehhez a fejezethez a [[oktatas:programozás:programozás_elmélet:tananyag|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ó:
* https://help.libreoffice.org/3.3/Basic/Date_and_Time_Functions
===== 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
* https://help.libreoffice.org/3.3/Basic/InputBox_Function_Runtime/hu
===== 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