Elágazás Az elágazás, olyan vezérlési szerkezet, amely az utasítások egy adott csoportját attól függően hajtja végre, hogy egy adott logikai feltétel teljesül-e. Legegyszerűbb változata a kétirányú elágazás, melyet a hétköznapi életben a Ha … akkor szerkezettel szoktunk megfogalmazni. Például: Ha a vizsgálat személy 18 évnél idősebb, akkor nagykorú. Felelősségbiztosítás példa Az ABC Biztosítónál a gépjárművek után fizetendő felelősségbiztosítás a hengerűrtartalomtól és a vezető életkorától függ. 1000 cm3 alatt a biztosítási díj 5000 Ft, 1000 és 2000 cm3 között 7000 Ft, míg 2000 cm3 fölött 10.000 Ft A fizetendő összegből a 35 év fölötti tulajdonos 20 % kedvezményt kap. A kétirányú elágazás algoritmusa a következő: Ha logikai feltétel akkor utasítás(ok) Elágazás vége Az utasítások rész akkor és csak akkor hajtódik végre, ha a logikai feltétel teljesül. Ez a szerkezet egy egységet alkot, ennek egy része csupán az utasítások blokk. az utasítások blokk beljebb kezdésével ez külön is hangsúlyozható, és jobban áttekinthető maga a programkód is. Jelölje a gépjármű hengerűrtartalmát a hűr, a vezető életkorát a vék, a fizetendő díjat pedig a díj változóval. Ekkor a biztosítás algoritmusa például a következő módon fogalmazható meg: Ha hűr <= 1000 akkor díj = 5000 Elágazás vége Ha hűr > 1000 És hűr < 2000 akkor díj = 7000 Elágazás vége Ha hűr >= 2000 akkor díj = 10000 Elágazás vége Ha vék > 35 akkor díj = díj * 0.8 Elágazás vége A program Legyen a fenti algoritmusnak megfelelően a két szövegmező neve txtHűr, illetve txtVék, míg a végeredmény jelenjen meg a lblDíj címkében. Végül a Bevitel vége feliratú gomb neve legyen Bev. (Ezúttal azért használjuk a prefixeket, hogy a megfelelő változók neve hasonló lehessen.) 1
A Bev gombhoz tartozó eseménykezelő eljárás a következő lesz. Három változót definiálunk, ezek a hengerűrtartalom (hűr). a vezető életkora (vék) és a fizetendő díj (díj) összeg tárolására szolgálnak (értelemszerűen a vék egész típusú, a másik kettőre megengedjük a tört értékeket is): Private Sub Bev_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bev.Click Dim hűr, díj As Single Dim vék As Integer Először a bevitt értékeket átolvassuk a megfelelő változóba, eközben számmá alakítjuk: hűr = Val(txtHűr.Text) vék = Val(txtVék.Text) A következő lépés a díj meghatározása a hengerűrtartalom alapján: If hűr <= 1000 Then díj = 5000 End If If hűr > 1000 And hűr < 2000 Then díj = 7000 End If If hűr >= 2000 Then díj = 10000 End If Figyelembe vesszük a vezető életkorától függő kedvezményt: 2
If vék > 35 Then díj = díj * 0.8 End If Végül szöveggé konvertálva kiíratjuk a díjat, és befejeződik az eljárás: lblDíj.Text = Str(díj) End Sub A kétirányú elágazás utasításai: Az előző példában a kétirányú elágazás alapesetével találkoztunk: If feltétel Then utasítás1 utasítás2 … End If A kétirányú elágazásnak azonban más szerkezeti lehetőségei is vannak. Ha az adott feltétel teljesülése esetén csak egy utasítást kell megvalósítani, az End If elhagyható, ekkor azonban az utasítás a Then mellé kerül: If feltétel Then utasítás Elképzelhető az is, hogy a feltétel nem teljesülése esetén egy másik utasítássort kell megvalósítani, azaz Ha
akkoregyébként. Ennek a szerkezetnek a Basic nyelvű megfelelője: If feltétel Then utasítások1 Else utasítások2 End If például gyakori, hogy a kiskorúak és a nyugdíjasok 50% kedvezményt kapnak belépődíjból. Ha Ék az életkort jelöli és a felnőttek belépődíja 2000 Ft, akkor a fizetendő összeg (ár) a következő módon határozhatjuk meg: If ék<18 Or ék>65 Then ár=1000 Else ár=2000 End If Az egyébként ág további eseteket tartalmazhat, ekkor az egyes feltételeket az elseif utasítással választhatjuk szét. A felelősségbiztosításos példánkat elseif segítségével a követhetőképpen is megadhatjuk: If hűr <= 1000 Then díj = 5000 3
ElseIf hűr < 2000 Then díj = 7000 Else díj = 10000 End If Többirányú elágazás Vásárlásoknál gyakori, hogy a vevőnek a megvásárolt termékek után mennyiséi kedvezményt adnak. A kedvezmény annál nagyobb, minél többet vásárol a vevő az adott termékből. A Szemközti Tékában például egy egyszer írható DVD-lemez ára 200 Ft. Ha azonban legalább 10-et veszünk, kapunk 10% kedvezményt, 99 és 100 példány esetén 15%-ot, 100 fölött pedig 20%-ot. A programot természetesen elkészíthetjük több If … Then segítségével is, kényelmesebb és áttekinthető azonban a többirányú elágazás használata. Ha db jelöli a vásárolt darabszámot, egys egy db DVD egységárát, akkor a fizetendő Ár a következőképpen határozható meg többirányú elágazással: Select Case db Case 1 To 9 Ár = egys Case 10 To 98 Ár = egys Case 99, 100 Ár = egys Case Is > 100 Ár = egys End Select
* db * db * 0.9 * db * 0.85 * db * 0.8
A többirányú elágazás eseteit tehát a Select Case … End Select kulcsszavak közé kell írnunk, az esetek szétválasztása a Select Case követő változó vagy kifejezés alapján történik. Az egyes esetekhez tartozó értékeket megadhatjuk felsorolással (99, 100) vagyis intervallumként (1 To 9). Az intervallum speciális esete, ha a kifejezés nagyobb egy bizonyos értéknél. Ekkor a kifejezésre az Is kulcsszóval hivatkozhatunk (Is>100). Feladatok 1)
Súlyteszt A felhasználó magasságának és tömegének ismeretében tájékoztassuk őt arról, hogy el van-e hízva! Ha a magasságát m-mel, súlyát s-sel jelöljük, normális esetben az s értéke (m-100)*0,9 és (m-100)*1,1 közé esik. Ennél kisebb s esetén a felhasználó karcsú, ennél nagyobb esetén teltkarcsú.
2)
Szökőév Írjunk programot, amely adott évről eldönti, hogy szökőév-e! Egy év szökőév, ha néggyel osztható, azonban a százzal osztható évek közül csak a négyszázzal is osztható évek szökőévek. 4
3)
Hol a derékszög? Készítsünk programot, amely egy háromszög három oldaláról eldönti, hogy a háromszög derékszögű-e, és ha igen, akkor melyik az átfogó!
4)
Tagdíj A Mikulások Szövetségében a tagdíj a szakáll hosszától függ a következő módon. Számítsuk ki a szakállhossz függvényében a fizetendő tagdíjat.
5)
0 – 10 cm
10.000 Ft
10 – 20 cm
7.000 Ft
20 – 30 cm
5.000 Ft
40 – 50 cm
1.000 Ft
50 cm fölött
100 Ft
Bankbetét Az XYZ Bank a lekötött betétek után 12% kamatot fizet. A 100.000 Ft feletti betétrészhez további 2 %, míg az 1.000.000 Ft feletti újabb 1,5 % kamatprémiumot ad. Határozzuk meg az adott betét után járó kamatot!
6)
Fiatalító Tabletta Elektronikus csomagküldő szolgálatunk fiatalító tablettát forgalmaz. a vevő megadhatja a tabletta darabszámát, ízét (natúr, mentolos, stb.), méretét és kiszerelését (zacskó, doboz, stb.). Az ár ezektől az adatoktól is függ, azonban a darabszámtól függően mennyiségi kedvezményt is adunk. Készítsük el az űrlapot, melyen az adatok bevihetők és számítsuk ki a fizetendő összeget! Ne feledkezzünk meg a csomagolási és a postaköltségről sem!
5