4. GYAKORLAT Rövid elméleti összefoglaló Visual Basic függvény Írjunk függvényt a téglalap területének kiszámítására: Function függvénynév (bemenő paraméterek) típus utasítások függvénynév= kifejezés A függvénynek a bemenő paramétereket értékszerinti adjuk át, amely azt jelenti, hogy kell, hogy értéket tartalmazzanak, hiszen az értékadó utasítás jobb oldalán műveletet végzünk velük, stb. ByVal a, ByVal b A függvény az érték szerint megadott paraméterekkel számol és egyetlen egy (típus szerinti) eredményt ad vissza a függvény nevében jelzett. A függvényt az értékadó utasítás jobb oldalán aktiváljuk. Visual Basic eljárás Sub eljárásnév(bemenő paraméterek, kimenő paraméterek) utasítások Az eljárás bemenő paramétereit értékszerint (ByVal), kimenő paramétereit, azaz az eljárás eredményeit címszerint (ByRef) adjuk át. Függvény és eljárás aktiválása A programban deklaráljuk azokat a változókat, melyekkel aktiváljuk a terulet függvényt és a kerulet eljárást. Dim után adjuk meg a szükséges változókat: ta, tb a téglalap két oldalának számára ter, ker a téglalap területe és kerülete számára InputBox() függvénnyel olvassuk be az adatokat. A CDbl() függvénnyel valós számmá alakítjuk. A függvény aktiválása jobb oldalon: ter = terulet(ta,tb) Eljárás aktiválása kétféleképpen történhet: 1. Call utasítással az eljárás neve és () zárójelben az aktuális paraméterekkel Call kerulet(ta,tb,ker) 2. Az eljárás nevével szóköz és az aktuális paraméterek listája kiir ter,ker A terulet függvény a paraméterlistán bemenő paraméterként, azaz érték szerint (ByVal) kapja meg a téglalap két oldalát: a, b Function terulet(byval a As Double, _ ByVal b As Double) As Double terulet = a * b A téglalap területét a függvény nevében adjuk vissza Írjunk eljárást a téglalap kerületének kiszámítására! A kerulet eljárás bemenő paraméterei a téglalap két oldala: ByVal a As Double, ByVal b As Double Kimenő paramétere, a téglalap kerülete: ByRef tker As Double Sub kerulet(byval a As Double,ByVal b As Double, _ ByRef tker As Double) tker = 2*(a + b) Dim ta As Double, tb As Double, ter As Double, _ ker As Double ta = CDbl(InputBox("Adat:", "Téglalap a oldala", "2")) tb = CDbl(InputBox("Adat:", "Téglalap b oldala", "3")) ter = terulet(ta, tb) Call kerulet(ta, tb, ker) kiir ter, ker Function terulet(byval a As Double, ByVal b As Double) _ As Double terulet = a * b Sub kerulet(byval a As Double, ByVal b As Double, _ ByRef tker As Double) tker = 2 * (a + b) Sub kiir(byval ter As Double, ByVal ker As Double) s = "Terület: " & CStr(ter) & " Kerület: " + CStr(ker) A téglalap oldalai: 2 és 3 Mintafeladat 1
A feladat.: Három valós számnak számítsuk ki függvénnyel a számtani közepét: VISUAL BASIC 4. GYAKORLAT Function SzamtaniKozep(ByVal x As Double, ByVal y As Double, ByVal z As Double) valamint a mértani közepét eljárással: Sub MertaniKozep(ByVal x As Double, ByVal y As Double, ByVal z As Double, ByRef mkz As Double) Dim a As Double, b As Double, c As Double, mk As Double, szk As Double a = CDbl(InputBox("Adat:", "Adat megadása", "1")) b = CDbl(InputBox("Adat:", "Adat megadása", "2")) c = CDbl(InputBox("Adat:", "Adat megadása", "3")) szk = SzamtaniKozep(a, b, c) Call MertaniKozep(a, b, c, mk) Call kiir(szk, mk) Function SzamtaniKozep(ByVal x As Double, ByVal y As Double, ByVal z As Double) As Double SzamtaniKozep = (x + y + z) / 3 Sub MertaniKozep(ByVal x As Double, ByVal y As Double, ByVal z As Double, ByRef mkz As Double) mkz = Exp(Log(x * y * z) / 3) Sub kiir(byval szkozep As Double, ByVal mkozep As Double) Dim s As Sting s = "Számtani közép: " & CStr(szkozep) & " Mértani közép: " + CStr(mkozep) Az adatok: 1, 2 és 3 Mintafeladat Deklaráljunk egy 7 elemű tömböt, töltsük fel 1-10 közötti, egésszé alakított véletlen számmal. Számláljuk meg mennyi páros, ill. páratlan elemet tartalmaz a tömb. Írjunk eljárásokat a keresésre és a tömb tartalmának, illetve az eredmények megjelenítésére. Megjegyzés: A tömb paramétert mindig ByRef, azaz címként kell átadni függvénynek ill. eljárásnak. A tömb neve mellett még a () zárójellel is jeleznünk kell, hogy a paraméter tömb. Az aktiválásnál már nem kell a zárójeleket kitenni. Dim x(6) As Integer, i As Integer, paros As Integer, _ paratlan As Integer Randomize For i = 0 To 6 x(i) = CInt(Rnd() * 10) + 1 Call kiir(x) keres x, paros, paratlan eredkiir x, paros, paratlan Sub keres(byref x() As Integer, ByRef pa As Integer, _ ByRef pt As Integer) Dim i As Integer pa = 0 pt = 0 If x(i) Mod 2 = 0 Then pa = pa + 1 Else pt = pt + 1 End If Sub kiir(byref x() As Integer) 2 Deklaráció A véletlen szám generátor számára új kezdőérték. A tömb feltöltése A tömb tartalmának megjelenítése keres eljárás aktiválása eredkiir eljárás aktiválása keres eljárás lokális deklaráció alapállapot beállítása Ciklus a tömb alsó határától a felső határáig Ha az x tömb i-edik eleme páros, akkor a pa tartalmát növeljük 1-el, különben, ha páratlan, akkor a pt növeljük.
MsgBox s, vbokonly, "Eredmény" Sub eredkiir(byref x() As Integer, ByVal a As Integer, _ ByVal b As Integer) s = s + "Páros: " + CStr(a) + " Páratlan: " + CStr(b) MsgBox s, vbokonly, "Eredmény" A program futásának eredménye: VISUAL BASIC 4. GYAKORLAT A kiir eljárás a tömb elemeit jeleníti meg Az eredkiir eljárás a páros és a páratlanok számát is megjeleníti Mintafeladat Deklaráljunk egy 7 elemű tömböt, töltsük fel 1-10 közötti, egésszé alakított véletlen számmal. Keressük a tömb legkisebb elemét eljárással. Dim x(6) As Integer, i As Integer, _ min As Integer Randomize For i = 0 To 6 x(i) = Int(Rnd() * 10 + 1) Call kiir(x) keres x, min eredkiir x, min Sub keres(byref x() As Integer, _ ByRef xmin As Integer) Dim i As Integer xmin = x(0) For i = LBound(x) + 1 To UBound(x) If x(i) < xmin Then xmin = x(i) End If Az xmin kimenő paraméter felveszi az x tömb 0. elemének értékét. A ciklus a tömb alsóhatár+1-től a felsőhatárig megvizsgálja, hogy az x tömb i-edik eleme kisebb, mint az xmin, ez esetben felülírjuk az xmin tartalmát az x tömb i-edik elemével. A program futásának eredménye: Sub kiir(byref x() As Integer) Sub eredkiir(byref x() As Integer, _ ByVal a As Integer) 3
s = s + "legkisebb adat: " + CStr(a) VISUAL BASIC 4. GYAKORLAT Feladatok 1. Olvassuk be a téglatest három oldalának hosszát és számítsuk ki a téglatest térfogatát és felszínét függvényekkel! (GYAK3_1) Dim ta As Double, tb As Double, tc As Double, terf As Double, felsz As Double Function terfogat(byval a As Double, ByVal b As Double, ByVal c As Double) As Double Sub felszin(byval a As Double, ByVal b As Double, ByVal c As Double, _ ByRef f As Double) 2. Olvassunk be három valós számot és számítsuk ki az összegüket, és a szorzatukat függvényekkel, átlagukat pedig eljárással, az eredményt jelenítsük meg! (GYAK3_2) Dim a As Double, b As Double, c As Double, ossz As Double, atl As Double, _ szor As Double Function osszegszamol(byval a As Double, ByVal b As Double, ByVal c As Double) As Double Function szorzatszamol(byval a As Double, ByVal b As Double, ByVal c As Double) As Double Sub atlagszamol(byval a As Double, ByVal b As Double, ByVal c As Double, _ ByRef atlag As Double) Sub kiir(byval t1 As Double, ByVal t2 As Double, ByVal t3 As Double) s = "Összeg: " & CStr(t1) & " Átlag: " + CStr(t2) + " Szorzat: " + Cstr(t3) 3. Olvassunk be egy valós alapot és egy egész kitevőt. Számítsuk ki a valós szám hatványát eljárással, illetve a gyökét függvénnyel. Gyök esetében, ha a kitevő negatív, a gyök eredménye zérus legyen. (GYAK3_3) Dim alap As Double, kitevo As Integer, gyok As Double, hatvany As Double Function gyokotszamol(byval a As Double, ByVal k As Double) As Double Sub hatvanytszamol(byval a As Double, ByVal k As Integer, ByRef h As Double) Sub kiir(byval t As Double, ByVal f As Double) If t <> 0 then s = "Gyök: " & CStr(t) & " Hatvány: " + CStr(f) Else s = "Hatvány: " + CStr(f) End If 4. Olvassunk be három valós számot és írjuk eljárást, mely a három valós számot növekvő sorrendbe rendezi! (GYAK3_4) Dim x1 As Double,x2 As Double,x3 As Double Sub Sorrend(ByRef a As Double, ByRef b As Double, ByRef c As Double) Sub kiir(byval a As Double, ByVal b As Double, ByVal c As Double) s = "Növekvő sorrend: " & CStr(a) & " " + CStr(b) + " " + Cstr(c) MsgBox s, vbokonly, "Eredmény" 4
VISUAL BASIC 4. GYAKORLAT 5. Olvassuk be a kocka élét valós számként! Számítsuk ki a kocka testátlóját és lapátlóját függvénnyel, valamint a térfogatát és felszínét eljárással! (GYAK3_5) Dim oldal As Double, tatlo As Double, lpatlo f As Double, terf As Double, felsz As Double Function TestAtlo(ByVal a As Double) As Double Function LapAtlo(ByVal a As Double) As Double Sub Szamol(ByVal a As Double, ByRef t As Double, ByRef f As Double) Sub kiir(byval k_tatlo As Double, ByVal k_lapatlo As Double, ByVal k_terf As Double, _ ByVal k_felsz As Double) s = "Testátló: " & CStr(k_tatlo) & " Lapátló: " + CStr(k_lapatlo) + _ " Térfogat: " + Cstr(k_terf) + " Felszin: " + Cstr(k_felsz) 6. Deklaráljunk egy 7 elemű tömböt, töltsük fel 1-10 közötti, egésszé alakított véletlen számmal. Írjunk egy keres eljárást, melyben keressük meg a tömb legnagyobb elemét eljárással! (GYAK3_6) Dim x(6) As Integer, i As Integer, max As Integer Sub keres(byref x() As Integer, ByRef xmax As Integer) Sub eredkiir(byref x()as Integer, ByVal a As Integer) s = s & x(i) & chr(9) s = s + "legnagyobb adat: " + Cstr(a) 7. Deklaráljunk egy 5 elemű tömböt, töltsük fel valós adatokkal InputBox() függvény hívásával! Írjunk egy normal eljárást, melyben keressük meg a tömb legnagyobb és a legkisebb adatát. A tömb elemeit osszuk le a legkisebb és a legnagyobb adat számtani közepével! (GYAK3_7) Dim x(4) As Double, i As Integer, xminmaxatl As Double Sub Normal(ByRef x()) As Double, ByRef minmaxatl) As Double) Sub eredkiir(byref x()) As Double, ByVal a As Double) s = s & x(i) & chr(9) s = s + "minmaxatlag: " + Cstr(a) 8. Deklaráljunk egy 5 elemű tömböt, töltsük fel egész adatokkal InputBox() függvény hívásával! Írjunk egy keres eljárást, melyben megszámláljuk a tömb pozitív, negatív és zérus elemeinek számát!(gyak3_8) Dim x(4) As Integer, i As Integer, poz As Integer, neg As Integer, zero As Integer Sub keres(byref x()as Integer, ByRef p As Integer, ByRef n As Integer, ByRef z As Integer) 5
VISUAL BASIC 4. GYAKORLAT Sub eredkiir(byref x()as Integer, ByVal p As Integer, ByVal n As Integer, _ ByVal z As Integer) s = s & Cstr(x(i)) & chr(9) s = s + "poz db: " + Cstr(p) + " neg db: " _ + Cstr(n) + " zero db: " + Cstr(z) 9. Deklaráljunk egy 7 elemű tömböt, töltsük fel 1-10 közötti, egésszé alakított véletlen számmal! Írjunk egy Oszthatosag eljárást, melyben megszámláljuk a tömb 3-mal osztható elemeinek számát!(gyak3_9) Dim x(6) As Integer, i As Integer, oszt3db As Integer Sub Oszthatosag(ByRef x()as Integer, ByRef db As Integer) Sub eredkiir( ByRef x() As Integer, ByVal a As Integer) s = s & Cstr(x(i)) & chr(9) s = s + "3-mal oszthatók db: " + Cstr(a) 6