C# programozás kezdőknek › 3.2 lecke
C# tanfolyam · 3.2 lecke
else if és logikai operátorok
Az élet ritkán kétesélyes: egy jegy lehet jeles, jó, közepes, elégséges vagy elégtelen. Ebben a leckében megtanulod, hogyan választ a program több lehetőség közül, és hogyan fogalmazol meg összetett feltételeket, például: „16 éves elmúlt, VAGY szülővel jön”.
A lecke végére
- több lehetőség közül választasz
else iflánccal; - jó sorrendbe teszed a feltételeket;
- összetett feltételeket írsz az
&&, a||és a!operátorral; - igazságtáblával ellenőrzöd a logikai kifejezéseket;
- az átlagkalkulátorod szövegesen is minősít, és kiszűri a hibás jegyet.
Ehhez használod
- az if és else utasítást (3.1);
- az összehasonlító operátorokat és a maradékos osztást (2.3);
- a mini projekt átlagkalkulátorát (2.4).
Az else if lánc
int pont = 72;if (pont >= 90){ Console.WriteLine("Arany jelvény 🥇");}else if (pont >= 70){ Console.WriteLine("Ezüst jelvény 🥈");}else if (pont >= 50){ Console.WriteLine("Bronz jelvény 🥉");}else{ Console.WriteLine("Most nem jött össze, gyakorolj még!");}A program felülről lefelé vizsgálja a feltételeket, és az első igaz feltétel blokkját hajtja végre. Utána a lánc többi részét átugorja. Ha egyik feltétel sem igaz, az else fut le.
🔮 Jósold meg!
A 72 pont 50-nél is több. Akkor miért nem írja ki a program a bronz jelvényt is?
Megoldás
Mert a 70-es feltétel már igaz volt, és a láncból mindig csak egy ág fut le, az első igaz. Ez a különbség három külön if és egy else if lánc között: három külön if esetén mindhárom igaz feltétel blokkja lefutna.
A sorrend számít!
if (pont >= 50){ Console.WriteLine("Bronz jelvény 🥉");}else if (pont >= 70){ Console.WriteLine("Ezüst jelvény 🥈");}else if (pont >= 90){ Console.WriteLine("Arany jelvény 🥇");}🔮 Jósold meg!
Mit kap ezzel a kóddal valaki, aki 95 pontot ért el?
Megoldás
Bronzot! A 95 ≥ 50 már az első feltételnél igaz, így a lánc többi része nem fut le. Ha a feltételek egymást „tartalmazzák” (aki 90 felett van, az 50 felett is), akkor a legszigorúbbal kell kezdeni, ahogy az első példában.
Logikai operátorok: és, vagy, nem
| Operátor | Jelentése | Mikor igaz? | Példa |
|---|---|---|---|
&& | és | ha mindkét oldal igaz | kor >= 14 && kor <= 18 |
|| | vagy | ha legalább az egyik oldal igaz | kor >= 16 || szulovel |
! | nem | megfordítja: igazból hamis, hamisból igaz | !siker1 |
Igazságtábla
| A | B | A && B | A || B | !A |
|---|---|---|---|---|
| true | true | true | true | false |
| true | false | false | true | false |
| false | true | false | true | true |
| false | false | false | false | true |
int kor = 15;bool szulovel = true;bool vanJegye = true;if (vanJegye && (kor >= 16 || szulovel)){ Console.WriteLine("Jó szórakozást a koncerten! 🎸");}else{ Console.WriteLine("Sajnos most nem mehetsz be.");}Zárójelezz bátran!
Az && „erősebb”, mint a ||, ahogy a matematikában a szorzás az összeadásnál. A zárójel egyértelművé teszi, mit akarsz: itt azt, hogy jegy mindenképp kell, és mellé vagy a kor, vagy a szülő.
🔮 Jósold meg!
Mit ír ki a program, ha vanJegye = false, de a kor 20? És ha a kor 15, nincs szülő, de van jegy?
Megoldás
Mindkét esetben: „Sajnos most nem mehetsz be.” Az elsőnél hiányzik a jegy (az && bal oldala hamis), a másodiknál a zárójeles rész hamis (15 < 16, és nincs szülő).
Tudtad? Rövidzáras kiértékelés
Ha az && bal oldala hamis, a C# meg sem nézi a jobb oldalt, hiszen az eredmény már biztosan hamis. A ||-nál fordítva: ha a bal oldal igaz, a jobb oldal kimarad. Ezt a programozók ki is használják, például: siker1 && jegy1 > 0.
Minősítő átlagkalkulátor
A 2.4-es mini projekt két ígéretét most teljesítjük: a program kiszűri a lehetetlen jegyeket (például a 7-est vagy a 0-st), és szövegesen is minősít. A 3.1-ben írt ellenőrzések helyére ezt írd:
// 1. Sikerült-e mindhárom jegyet számmá alakítani?if (!siker1 || !siker2 || !siker3){ Console.WriteLine("Hiba: minden jegyet számmal írj be!");}// 2. 1 és 5 között van-e mindhárom?else if (jegy1 < 1 || jegy1 > 5 || jegy2 < 1 || jegy2 > 5 || jegy3 < 1 || jegy3 > 5){ Console.WriteLine("Hiba: a jegyek csak 1 és 5 között lehetnek!");}else{ Console.WriteLine($"{nev} átlaga: {Math.Round(atlag, 2)}"); if (atlag >= 4.5) { Console.WriteLine("Minősítés: jeles 🎉"); } else if (atlag >= 3.5) { Console.WriteLine("Minősítés: jó"); } else if (atlag >= 2.5) { Console.WriteLine("Minősítés: közepes"); } else if (atlag >= 1.5) { Console.WriteLine("Minősítés: elégséges"); } else { Console.WriteLine("Minősítés: elégtelen"); }}Mit nyertünk?
Az átlagot most már csak akkor írja ki a program, ha minden jegy érvényes: hibás bemenetre nem számol értelmetlen átlagot. A feltételek egymásba is ágyazhatók: a minősítő lánc a külső else blokkjában van. A ponthatárok a legtöbb iskolában használt kerekítést követik (4,5-től jeles stb.), de a végső jegyről mindig a tanár dönt.
✍️ Tesztelj!
Készíts tesztesetet minden ágra: hibás szöveg, 0-s jegy, 6-os jegy, és mind az öt minősítés. Hány próbafuttatás kell legalább, hogy minden ág egyszer lefusson?
Megoldás
Legalább 7: egy a szöveges hibára, egy a tartományon kívüli jegyre, és öt a minősítésekre (például 5,5,5 → jeles; 4,4,4 → jó; 3,3,3 → közepes; 2,2,2 → elégséges; 1,1,2 → 1,33, elégtelen). A határesetek (például 4,5 körüli átlag: 5, 4, 5 → 4,67) külön is megérnek egy próbát.
Hibavadászat
🐞 1. Lehetetlen feltétel
if (jegy < 1 && jegy > 5){ Console.WriteLine("Érvénytelen jegy!");}Mi a baj?
Egy szám nem lehet egyszerre 1-nél kisebb ÉS 5-nél nagyobb, így a feltétel soha nem igaz. A „kívül esik a tartományon” vagy-gyal írható: jegy < 1 || jegy > 5. A „belül van” pedig és-sel: jegy >= 1 && jegy <= 5.
🐞 2. Matematikai írásmód
if (14 <= kor <= 18){ Console.WriteLine("Középiskolás korú vagy.");}Mi a baj?
Matekórán így írjuk, de a C# nem érti: a 14 <= kor eredménye egy bool, amit nem lehet a 18-cal összehasonlítani, ezért a fordító hibát jelez. Két külön összehasonlítás kell, és-sel: kor >= 14 && kor <= 18.
🐞 3. Egy jel kevés
if (vanJegye & kor >= 16)Mi a baj?
Ez meglepő módon lefordul, és működik is, de az egyetlen & mindig mindkét oldalt kiértékeli (nincs rövidzár), és más típusoknál bitművelet. Feltételekben a szokásos és biztonságos forma a dupla jel: && és ||.
Kihívások
📅 1. Szökőév
Kérj be egy évszámot, és írd ki, hogy szökőév-e. A szabály: szökőév, ha osztható 4-gyel, de nem osztható 100-zal, VAGY ha osztható 400-zal. (Így 2024 szökőév, 1900 nem, 2000 igen.)
Egy lehetséges megoldás
Console.Write("Évszám: ");int ev = int.Parse(Console.ReadLine());if ((ev % 4 == 0 && ev % 100 != 0) || ev % 400 == 0){ Console.WriteLine($"{ev} szökőév.");}else{ Console.WriteLine($"{ev} nem szökőév.");}🌡 2. Mit vegyek fel?
Kérd be a hőmérsékletet, és adj öltözködési tanácsot legalább négy kategóriában (például 0 alatt: sapka és kesztyű; 0–10: kabát; 10–20: pulóver; 20 felett: póló). Figyelj a sorrendre és a határokra!
🎮 3. Életerő-kijelző
Egy játékban az életerő 0 és 100 között van. Írd ki: 0 → „Game over”, 1–29 → „Veszély!”, 30–69 → „Óvatosan”, 70–100 → „Remek formában vagy”. Ha az érték 0-nál kisebb vagy 100-nál nagyobb, jelezz hibát.
Tipp
Kezdd a hibás értékkel: if (eletero < 0 || eletero > 100), utána jöhet else if (eletero == 0), majd a többi, a legkisebbtől felfelé (< 30, < 70), végül az else.
Összefoglalás
- Az
else ifláncban az első igaz feltétel ága fut le, a többi kimarad. - Egymást tartalmazó feltételeknél a legszigorúbbal kezdj.
&&: mindkettő igaz;||: legalább az egyik;!: tagadás.- Tartományon belül:
>= és && <=; tartományon kívül:< || >. - Az összetett feltételeket zárójelezd, és igazságtáblával ellenőrizd.
Tanároknak
Kerettantervi kapcsolódás
NAT 2020, Digitális kultúra, 9. évfolyam, Algoritmizálás és formális programozási nyelv használata: többirányú elágazás, összetett feltételek, logikai műveletek; matematikai kapcsolódás: logika, igazságtábla, oszthatóság (szökőév).
Módszertan
A lecke a Microsoft Learn döntési logikáról szóló C#-moduljának sorrendjét követi (else if, majd összetett feltételek), PRIMM-szemléletű jóslós feladatokkal. A „rossz sorrend” jóslás és a „lehetetlen feltétel” hibavadászat a két leggyakoribb tévképzetet célozza. A mini projekt folytatása a tesztesetek tervezését (ágak lefedése) is gyakoroltatja.
Időterv
Az else if lánc: 10 perc. A sorrend: 5 perc. Logikai operátorok és igazságtábla: 12 perc. Minősítő kalkulátor: 12 perc. Hibavadászat: 6 perc. A kihívások otthoni vagy differenciáló feladatok.
Következő lecke: 3.3 switch és switch-kifejezés
Ha egy változó sokféle konkrét értéke szerint kell dönteni (például menüpont, a hét napja), a switch átláthatóbb, mint egy hosszú else if lánc.

