Vezérlőpult
C1. Logikai kifejezések és az if · Vezérlési szerkezetek

C blokk · Vezérlési szerkezetek · 1. tananyag

Logikai kifejezések és az if

A B blokk végére a programjaid beszélnek, számolnak, színeznek — de mindig ugyanazt csinálják. Ma megtanulnak dönteni. És beváltjuk az ígéretet: a B6-os TryParse eddig parlagon hagyott bool eredménye végre munkába áll.

2 tanórabool, ==, &&, ||if · else · else if

Tanulási célok

1A program dönt: mi a szelekció?

Eddig minden programunk szekvencia volt: az utasítások sorban, egyszer, felülről lefelé futottak le (A8). A szelekció (elágazás) ezt töri meg: a program egy feltételtől függően választ, melyik úton megy tovább.

EGYÁGÚ (if) eletkor >= 18 ? igaz „Beléphetsz.” hamis a program folytatódik KÉTÁGÚ (if–else) eletkor >= 18 ? igaz „Beléphetsz.” hamis „Még nem lehet.” a két ág itt összefut

Három alakja van:

AlakKérdésC#-eszköz
egyágú„Ha igaz, tegyél meg valamit — különben semmit.”if
kétágú„Ha igaz, ezt; ha hamis, azt.”if + else
többágú„Több eset közül melyik áll fenn?”else if lánc (és a C2-es switch)
ℹ️ TÖBB ÚTVONAL = TÖBB TESZT

Az elágazással a programodnak több lehetséges útvonala lesz. Teszteléskor mindegyiket ki kell próbálni — nem elég az, amelyik elsőre lefutott. Jegyezd meg: ahány ág, annyi próba.

2A bool főszerepben: hasonlító operátorok

A bool típus a B1 óta velünk van, de eddig statiszta volt. Az if feltétele mindig bool értékű kifejezés — és ezt leggyakrabban hasonlító operátorok állítják elő:

OperátorJelentésPéldaÉrtéke
==egyenlő5 == 5true
!=nem egyenlő5 != 5false
< >kisebb / nagyobb3 < 8true
<= >=kisebb-egyenlő / nagyobb-egyenlő7 <= 6false

A hasonlítás eredménye ugyanolyan érték, mint bármely másik — változóba is tehető:

int eletkor = 17;
bool nagykoru = eletkor >= 18;

Console.WriteLine(nagykoru);            // False
Console.WriteLine(5 == 5);              // True
Console.WriteLine(nagykoru.GetType());  // System.Boolean — minden objektum!
⚠️ = NEM UGYANAZ, MINT ==

Az = értékadás („legyen”), a == összehasonlítás („egyenlő-e?”). Ha feltételbe =-t írsz (if (szam = 5)), a C# fordítási hibát ad (CS0029: az int nem alakítható bool-lá) — szerencsére, mert más nyelvekben ez csendben hibás program lenne. Egy helyen viszont tényleg csapda: bool változónál az if (kesz = true) lefordul, és mindig igaz! Ezért bool-t így vizsgálj: if (kesz).

Stringek összehasonlítása: C#-ban a jelszo == "titok" pontosan azt teszi, amit vársz — a tartalmat hasonlítja, a kis- és nagybetűket is megkülönböztetve.

3Az if és az else ág

if (eletkor >= 18)
{
    Console.WriteLine("Beléphetsz.");
}

Felépítése: if + kerek zárójelben a feltétel (a zárójel kötelező!) + kapcsos zárójelek között az utasítások, amelyek csak igaz feltételnél futnak le. A blokk sorait a Visual Studio automatikusan beljebb húzza (A9) — a behúzás mutatja, mi tartozik az if-hez.

Kétágú változat az else ággal:

if (eletkor >= 18)
{
    Console.WriteLine("Beléphetsz.");
}
else
{
    Console.WriteLine("Sajnos még nem léphetsz be.");
}

A két ág közül pontosan az egyik fut le — nem futhat le mindkettő és olyan sem fordulhat elő, hogy egyik sem fut le.

💡 A BLOKK EGYSOROSAN IS JÁR

A C# megengedi a { } elhagyását egyetlen utasításnál — mi mégis mindig kiírjuk: a blokk nélküli if a hibák melegágya (a 7. szakaszban látni fogod, miért).

4Többágú szelekció: else if

if (pontszam >= 85)
{
    Console.WriteLine("Jeles!");
}
else if (pontszam >= 70)
{
    Console.WriteLine("Jó");
}
else if (pontszam >= 55)
{
    Console.WriteLine("Közepes");
}
else
{
    Console.WriteLine("Ez most nem sikerült.");
}

5Feltételek összekapcsolása: &&, ||, !

OperátorNeveIgaz, ha…Példa
&&ÉSmindkét oldala igazeletkor >= 12 && eletkor < 65
||VAGYlegalább az egyik oldala igaznap == "szo" || nap == "vas"
!tagadásaz utána álló kifejezés hamis!kesz

Matematikaóráról ismerős a 3 < szam < 8 alak — C#-ban ez fordítási hiba! A gép egyszerre csak két értéket hasonlít; helyesen: szam > 3 && szam < 8.

ℹ️ RÖVIDZÁR

A && ki sem értékeli a jobb oldalát, ha a bal már hamis (a || pedig ha a bal már igaz). Most csak érdekesség — az E blokkban még hasznot húzunk belőle.

Igaz, hamis — vagy le sem fordul?

Adott: int szam = 10; bool kesz = false; — mit ad az if feltételébe írt kifejezés?

1 / 8Pontszám: 0
…

6Ahogy már előre jeleztük: TryParse + if

A B6-ban a TryParse receptjét tanultuk, a B7-ben használtuk is — de a visszaadott bool-lal eddig nem tudtunk mit kezdeni. Most már tudunk:

Console.Write("Hány éves vagy? ");
bool sikerult = int.TryParse(Console.ReadLine(), out int eletkor);

if (sikerult)
{
    Konzol.Siker($"Rendben, {eletkor} éves vagy.");
}
else
{
    Konzol.Hiba("Ez nem egész szám — így nem tudok számolni vele.");
}

7Gyakori hibák

TünetMi történt?Mit tegyél?
CS0029: Cannot implicitly convert type 'int' to 'bool'=-t írtál == helyett a feltételbenif (szam == 5)
a feltétel „mindig igaz”, pedig bool változót vizsgálszif (kesz = true) — értékadás történtif (kesz) — és kész
CS1525 a 3 < szam < 8 sorramatematikai „hármas hasonlítás”szam > 3 && szam < 8
az if utáni blokk mindig lefutpontosvessző került az if mögé: if (x > 5);az if sora nem utasítás — nincs utána ;
a második „behúzott” sor hamis feltételnél is lefutblokk nélküli if: csak az első sor tartozik hozzámindig írj { }-t
CS0165: Use of unassigned local variablea változó csak az egyik ágban kapott értéketadj kezdőértéket a deklarációnál, vagy mindkét ágban
az else if lánc rossz kategóriát ada feltételek sorrendje nem szűkülőa legszigorúbb feltétel kerüljön előre (4. szakasz)

8Gyakorlat — a bemutatkozó bot megtanul dönteni

  1. Nyisd meg a B8-as SzinesKonzol projektet — benne a Konzol.cs.
  2. A szám-kérdéseknél a TryParse eredménye mostantól döntsön: sikeres beolvasásnál Konzol.Siker, hibásnál Konzol.Hiba — és hibás bevitel esetén vegyél fel egy értelmes alapértelmezett értéket, hogy a program folytatódhasson.
  3. Az életkor alapján a bot személyre szabott üzenetet írjon (else if lánc, legalább 3 ág — te találod ki a sávokat).
  4. Tesztelj minden útvonalat: jó szám, rossz szöveg, határértékek (pl. pont 18).
  5. Commit: A bot mar dont: TryParse + if.
✅ ELLENŐRZŐ PONT

Hibás bevitelre a program nem áll le, hanem piros üzenetet ír és folytatódik; a kor szerinti ágak határai jól működnek; minden ágat kipróbáltál legalább egyszer.

9Feladatok

Gyakorló feladatok

⭐ alap · ⭐⭐ haladó · ⭐⭐⭐ kihívás

C1.1⭐

Páros vagy páratlan? Kérj be egy egész számot, és írasd ki, melyik. (A % a B2-ből — az összehasonlítás a mai anyag.)

C1.2⭐

Jelszóellenőr: tárolj egy jelszót konstansban, kérd be a felhasználótól a jelszót, és zölddel engedd be, ha egyezik vagy pirossal utasítsd el, ha hibás jelszót gépelt be.

C1.3⭐⭐

A nagyobbik: kérj be két számot, és írasd ki a nagyobbikat — arra az esetre is gondolj, ha egyenlők!

C1.4⭐⭐

Öltözködési tanácsadó: kérd be a hőmérsékletet, és adj tanácsot legalább négy sávban (pl. fagy alatt / hűvös / kellemes / hőség) — ügyelj a sávhatárokra és a feltételek sorrendjére.

C1.5⭐⭐⭐

Okos pénzváltó: fejleszd tovább a B9.5-ös pénzváltót: hibás bevitelre piros hibaüzenet (TryParse), nulla vagy negatív összegre figyelmeztetés — és ha a kapott euró több 100 €-nál, írd ki azt is, hogy az már „komoly nyaralópénz”.

10Önellenőrző kvíz

Ellenőrizd magad!

Minden kérdésnél egy válasz helyes. A végén pontszámot kapsz.

11Fogalomtár

FogalomJelentés
szelekcióelágazás: a program feltételtől függően választ utat (egy-, két-, többágú)
feltételbool értékű kifejezés az if zárójelében
hasonlító operátor==, !=, <, >, <=, >= — eredményük bool
logikai operátor&& (és), || (vagy), ! (tagadás)
if / else / else ifegyágú / kétágú / többágú szelekció C#-eszközei
blokk{ } közé zárt utasítások — együtt tartoznak az if egy ágához
kódútvonala program egy lehetséges végigfutási útja — mindet tesztelni kell
rövidzára &&/|| nem értékeli ki a jobb oldalt, ha a bal már eldöntötte az eredményt

12Összegzés

  1. A szelekcióval a program dönt: egyágú (if), kétágú (if–else), többágú (else if lánc — és hamarosan a switch).
  2. A feltétel mindig bool kifejezés — hasonlító és logikai operátorokból épül.
  3. = értékadás, == összehasonlítás; 3 < x < 8 helyett x > 3 && x < 8.
  4. Az else if lánc felülről lefelé fut, az első igaz ág nyer — a feltételek sorrendje tervezési döntés.
  5. A TryParse + if párossal a programod hibatűrő lett — az „addig kérdezz, amíg jó nem lesz” pedig az ismétlésnél kerül sorra.