Kiegészítő előadás Vizsgabemutató VBA Dr. Kallós Gábor, Fehérvári Arnold, Pusztai Pál Krankovits Melinda 2016 2017 1
VBA A Szamokat_General szubrutin segítségével generáljunk 1000 db egész számot a [0, 5000] intervallumban 1-es Seed értékkel, majd határozzuk meg a 2000-nél kisebb adatok összegét! Észrevesszük, hogy tömböt kell használni az adatok tárolásához Legeneráljuk a számokat Figyeljünk a szubrutin helyes hívására! (Importálás előtte szükséges,.bas fájl) For ciklussal végiglépdelünk a tömb elemein (ciklusváltozó: i) Vizsgálat: a 2000-nél kisebb adatokat elrakjuk (osszeg változó, kezdetben 0) Becsléssel ellenőrizzük az eredményt 2
A RelPrim függvény segítségével határozzuk meg a [123, 312] intervallumba eső olyan pozitív egész számok darabszámát, amelyek relatív prímek a 8 számmal! For ciklussal végiglépdelünk az intervallumon (ciklusváltozó: i) A RelPrim függvényt meghívjuk minden i-re a 8 második paraméterrel és megvizsgáljuk, hogy a visszatérési érték igaz-e ( = True elhagyható, lásd később is) Ha igen, akkor egy db változót növelünk Végül kiírjuk db értékét (db kezdetben 0) Becsléssel ellenőrizzük az eredményt 3
Határozzuk meg a 342-nél kisebb 12. prímszámot! Táblázatban kikereshetjük ezeket a számokat: 337, 331, 317, 313,, 269 A for ciklus bár elvileg alkalmas, de semmiképpen sem szép módszer a probléma megoldására, mert rögzített tartományt jár be Tehát while/loop ciklust használunk (ciklusváltozó: i); kilépési feltétel: megvan a szükséges számú prím; bennmaradási feltétel: még kevesebb van A ciklusváltozót nekünk kell változtatni! (+ egy visszaléptetés is kell) A Prim függvényt meghívjuk minden i-re a vizsgálathoz A db változó kezelése mint előbb Becsléssel ellenőrizzük az eredményt 4
VBA Határozzuk meg a 342-nél kisebb 12. prímszámot! Bemutatjuk a for ciklussal történő megoldást is Ez azonban nem fogadható el jónak! Gondok (megvalósítás) Nem tudjuk, hogy meddig kell menni a ciklussal (be kell drótozni az alsó határt) A talált x. prím kiíratása nehézkes (sima feltételre többször is kiírná (ell: Hf), logikai változóval detektáltuk) Tanulság: ilyen jellegű feladatoknál mindig maradjunk a while/loop ciklusnál! 5
VBA Határozzuk meg a helyes személyi számmal rendelkező nappali tagozatos hallgatók számát! A Vizsga.xls munkafüzetet használjuk A személyi szám helyessége beimportálható függvénnyel ellenőrizhető 5000 adaton kell végigmenni, for ciklussal (először: bedrótozott konstans) A megfelelő oszlopok tartalmát ellenőrizzük/vizsgáljuk, darab változót növelünk Összetett logikai feltétel (A kód beírása előtt az Immediate ablakban érdemes kipróbálni a képleteket, pl.? Cells(8,7)) Becsléssel ellenőrizzük az eredményt 6
Határozzuk meg a helyes személyi számmal rendelkező nappali tagozatos hallgatók számát! Alaptáblázat mint előbb Változat: nem használunk bedrótozott konstans értéket A hivatkozás felépítéséhez használhatjuk a súgót vagy az Application objektumot Érdemes az Immediate ablakban is gyakorlatozni 7
Határozzuk meg a helyes személyi számmal rendelkező MTK-s hallgatók ösztöndíjösszegét! Alaptáblázat mint előbb Változat: Cells helyett Range hivatkozás Figyelni kell a felépítésnél Érdemes az Immediate ablakban gyakorlatozni Autoszűrővel közelítőleg ellenőrizhető az eredmény 8
Adottak derékszögű háromszögek befogóinak az adatai, két sorban (háromszög.xlsx, ill. adatok.prn). Határozzuk meg a legnagyobb kerületű háromszög kerületét! Fix számú adaton kell végigmenni, for ciklus használható Mindig kiszámoljuk az adott háromszög harmadik oldalát (Pitagorasz tétel) és kerületét Tömböt használunk az utóbbiak tárolásához Beépített munkalapfüggvénnyel meghatározzuk a maximumot Excelben (sima képlettel) is ellenőrizhető az eredmény, ezt érdemes is megtenni! 9
VBA Adottak derékszögű háromszögek befogóinak az adatai, két sorban (háromszög.xlsx, ill. adatok.prn). Határozzuk meg a legnagyobb kerületű háromszög kerületét! Több ötlet az előző programokból Figyeljük meg kommenteket is Max függvény helyett ciklussal: Hf 10
Adottak síkbeli pontok koordinátái két sorban (pontok.xlsx, ill. adatok.prn). Határozzuk meg az origóhoz legközelebb eső pont távolságát! Észrevesszük, hogy ez a feladat lényegében ugyanaz, mint az előző Most a klasszikus minimumkereső algoritmussal dolgozunk (nem kell tömb sem) Excelben (sima képlettel) is ellenőrizhető az eredmény, ezt érdemes is megtenni! 11
Adott körcikkek sugara és szöge fokban, két sorban (korcikk.xlsx, ill. adatok.prn). Határozzuk meg a körcikkek területösszegét! Hasonló az előző feladatokhoz A területképletre figyeljünk (az összeállításhoz szükség esetén gyakorlatozzunk Excelben (próba pl.: kör, félkör)) Javasolt az ellenőrzés Excelben (sima képlettel)! 12
VBA Az erdő sorszámozott fáin mogyorók vannak, amelyeket egy mókuska jár be (minden fához tartozik egy, a következő fát azonosító sorszám; erdő.xls, ill. erdő.csv). A mókuskát kitesszük egy adott sorszámú fára, innen továbbugrálva gyűjti a mogyorókat. A gyűjtés véget ér, ha nincs hova továbbugrani. Határozzuk meg, hogy mennyi mogyorót gyűjt be a mókuska! Három oszlopot kell figyelnünk A sorszám mindig az (érték + 1)-edik pozíciót azonosítja (a fejléc miatt) A mogyorókat mindig hozzáadjuk a meglevőkhöz A for ciklus nem megfelelő ehhez a feladathoz, loop/while ciklus kell Bennmaradási feltétel: a következő fát azonosító sorszám nem üres Ellenőrzésként színezés alkalmazható Szintén ellenőrzésként kicsi táblázattal célszerű kipróbálni a kódot 13
Erdős feladat (folyt.) A mókuskát a 3. fára tesszük ki 14