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”.

  • kb. 45 perc
  • kezdő szint
  • 9. osztály
Nyitókép helye (16:9)

A lecke végére

  • több lehetőség közül választasz else if lá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 else if lánc

Program.csC#
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!

Rossz sorrendC#
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átorJelentéseMikor igaz?Példa
&&ésha mindkét oldal igazkor >= 14 && kor <= 18
||vagyha legalább az egyik oldal igazkor >= 16 || szulovel
!nemmegfordítja: igazból hamis, hamisból igaz!siker1

Igazságtábla

ABA && BA || B!A
truetruetruetruefalse
truefalsefalsetruefalse
falsetruefalsetruetrue
falsefalsefalsefalsetrue
Program.csC#
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:

Program.cs – a mini projekt folytatásaC#
// 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

Hibás kódC#
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

Hibás kódC#
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

Hibás kódC#
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
Program.csC#
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 if lá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.