[[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