C# programozás kezdőknek › 3.1 lecke C# tanfolyam · 3.1 lecke Eddig a programjaid minden sort végrehajtottak, mindig ugyanabban a sorrendben. Ebben a leckében megtanítod őket dönteni: ha valami igaz, csináljanak egyet, ha nem, mást. Az átlagkalkulátorod is okosabb lesz: észreveszi a hibásan beírt jegyet.Feltételek C#-ban: if és else

A lecke végére
- feltételt írsz az
ifutasításba összehasonlításból vagy logikai változóból; - az
elseággal megadod, mi történjen, ha a feltétel hamis; - kapcsos zárójelekkel és behúzással átlátható kódblokkokat írsz;
- folyamatábrán is ábrázolod az elágazást;
- az átlagkalkulátorod reagál a hibás bemenetre.
Ehhez használod
- az összehasonlító operátorokat (2.3);
- a bool típust és a TryParse-t (2.2+);
- a mini projekt átlagkalkulátorát (2.4).
Döntések mindenhol
Naponta több száz döntést hozol: ha esik az eső, viszel esernyőt; ha lemerült a telefonod, töltőre teszed. A programok ugyanígy döntenek:
🎮 Játék
Ha az életerő 0, akkor „Game over”, különben folytatódik a játék.
📱 Telefon
Ha a PIN-kód helyes, akkor feloldja a képernyőt, különben hibát jelez.
🛒 Webáruház
Ha a kosár értéke legalább 15 000 Ft, akkor ingyenes a szállítás.
🌡 Okosotthon
Ha 20 °C alá csökken a hőmérséklet, akkor bekapcsol a fűtés.
Mindegyikben van egy feltétel, ami vagy igaz, vagy hamis, és ettől függ, mi történik. A C#-ban erre való az if (angolul: ha) és az else (angolul: különben).
Az if: ha igaz, csináld
Main metódus kapcsos zárójelei közé írd. Ebben a példában számjegyekkel add meg a pontszámot, például: 99, 100 vagy 101. Az int.Parse a beírt szöveget egész számmá alakítja. Ha például száz-at írsz be, vagy olyan számot adsz meg, amelyet az int már nem tud tárolni (például 3000000000), a program hibával leáll. Később ebben a leckében megtanuljuk, hogyan kezeljük ezt a TryParse segítségével.Console.Write("Hány pontot szereztél? ");int pontszam = int.Parse(Console.ReadLine());if (pontszam >= 100){ Console.WriteLine("Kihívás teljesítve!");}Console.WriteLine("A program véget ért.");| Rész | Jelentése |
|---|---|
if | Kulcsszó: itt döntés következik. |
(pontszam >= 100) | A feltétel zárójelben. Az eredménye mindig true vagy false, ahogy a 2.2+ leckében a bool értékek. |
{ … } | A kódblokk: ezek a sorok csak akkor futnak le, ha a feltétel igaz. A blokk belsejét behúzzuk, hogy jól látsszon, mi tartozik hozzá. |
🔮 Jósold meg!
Mit ír ki a program, ha 120 pontot adsz meg? Mi jelenik meg 80 pontnál? Előbb jósolj, utána futtasd!
Megoldás
120 pontnál: „Kihívás teljesítve!”, majd „A program véget ért.” 80 pontnál csak az utóbbi jelenik meg. A blokkon kívüli kiírás mindkét esetben lefut. Teszteld 99, 100 és 101 ponttal is: a 100 már teljesíti a feltételt.
Emlékeztető: összehasonlító operátorok
== egyenlő · != nem egyenlő · < kisebb · > nagyobb · <= kisebb vagy egyenlő · >= nagyobb vagy egyenlő. Figyelj: az egyenlőség vizsgálata két egyenlőségjel!
Az else: különben ezt csináld
Console.Write("Hány pontot szereztél? ");int pontszam = int.Parse(Console.ReadLine());if (pontszam >= 100){ Console.WriteLine("Kihívás teljesítve!");}else{ Console.WriteLine("Gyűjts még pontokat!");}Gyűjts még pontokat!Az else-nek nincs feltétele: akkor fut le, amikor az if feltétele hamis. Amikor a program eléri ezt az elágazást, a feltétel alapján pontosan az egyik blokkot hajtja végre.
✍️ Próbáld ki!
Futtasd a programot 99, 100 és 101 ponttal. Írd fel az eredményeket! Ezután cseréld a >= jelet >-re. Melyik bemenet eredménye változik?
A bool kapcsolja a megfelelő ágat
Abool siker = int.TryParse(pontSzoveg, out int pontszam); sor két eredményt ad: a siker jelzi az átalakítás sikerét, a pontszam pedig a kapott egész szám. Az if (siker) közvetlenül ezt a logikai értéket vizsgálja. Sikertelen átalakítás után a 0 értéket nem használjuk pontszámként.Biztonságosabb pontbekérés – mintamegoldás
Console.Write("Hány pontot szereztél? ");string pontSzoveg = Console.ReadLine();bool siker = int.TryParse(pontSzoveg, out int pontszam);if (siker){ if (pontszam >= 100) { Console.WriteLine("Kihívás teljesítve!"); } else { Console.WriteLine("Gyűjts még pontokat!"); }}else{ Console.WriteLine("Egész számot adj meg!");}120, 80, száz és üres bemenet. Az egymásba írt if-ek egymás után ellenőriznek: előbb az átalakítást, majd csak siker esetén a pontszámot.Két külön if vagy if–else?
Két külön if: két külön ellenőrzés. A program mindkét feltételt megvizsgálja. Nézd meg 120 ponttal:int pontszam = 120;if (pontszam >= 100){ Console.WriteLine("Elérted a 100 pontot!");}if (pontszam >= 50){ Console.WriteLine("Elérted az 50 pontot!");}int pontszam = 120;if (pontszam >= 100){ Console.WriteLine("Kihívás teljesítve!");}else{ Console.WriteLine("Gyűjts még pontokat!");}else akkor fut le, ha az előtte álló if feltétele hamis.Próbáld ki: mindkét példában írd át a pontszámot 80-ra! Előbb jósolj, majd futtasd. Az első programban az 50 pontos üzenet jelenik meg; a másodikban a „Gyűjts még pontokat!”.Rajzold le: folyamatábra
Az algoritmusokat a programozók gyakran folyamatábrán tervezik meg, mielőtt kódot írnának. A döntést rombusz jelöli, amelyből két ág indul: igaz és hamis.
✍️ Rajzolj!
Rajzold le a füzetedbe a webáruház ingyenes szállításának folyamatábráját (be: a kosár értéke; döntés: legalább 15 000 Ft?). Utána írd meg hozzá a C#-kódot. Ebben a példában a fizetős szállítás 1 490 Ft. Próbák: 14 999, 15 000 és 15 001 Ft; szabályos, nem negatív egész összegekkel dolgozz.
A webáruház feladatának megoldása
Console.Write("A kosár értéke egész forintban: ");int kosar = int.Parse(Console.ReadLine());if (kosar >= 15000){ Console.WriteLine("Ingyenes a szállítás.");}else{ Console.WriteLine("A szállítás díja 1490 Ft.");}Okosabb átlagkalkulátor
Main metódus korábbi belsejét, hogy ne maradjon benne feltétel nélküli átlagolás.Console.Write("Neved: ");string nev = Console.ReadLine();Console.Write("Matematika jegy: ");bool siker1 = int.TryParse(Console.ReadLine(), out int jegy1);Console.Write("Magyar jegy: ");bool siker2 = int.TryParse(Console.ReadLine(), out int jegy2);Console.Write("Informatika jegy: ");bool siker3 = int.TryParse(Console.ReadLine(), out int jegy3);bool ervenyes = true;if (siker1 == false){ Console.WriteLine("Az első jegy nem egész szám."); ervenyes = false;}if (siker2 == false){ Console.WriteLine("A második jegy nem egész szám."); ervenyes = false;}if (siker3 == false){ Console.WriteLine("A harmadik jegy nem egész szám."); ervenyes = false;}// Minden jegynek 1 és 5 közé kell esnie.if (jegy1 < 1) { ervenyes = false; }if (jegy1 > 5) { ervenyes = false; }if (jegy2 < 1) { ervenyes = false; }if (jegy2 > 5) { ervenyes = false; }if (jegy3 < 1) { ervenyes = false; }if (jegy3 > 5) { ervenyes = false; }if (ervenyes){ double atlag = (jegy1 + jegy2 + jegy3) / 3.0; Console.WriteLine($"{nev} átlaga: {Math.Round(atlag, 2)}"); if (atlag >= 4.5) { Console.WriteLine("Szép eredmény, gratulálok!"); } else { Console.WriteLine("Gyakorolj tovább a kitűzött célodért!"); }}else{ Console.WriteLine("Nem számolunk átlagot. Mindhárom jegy 1–5 közötti egész szám legyen!");}ervenyes kezdetben igaz. Bármelyik hiba hamisra állítja, és később már nem állítjuk vissza igazra. Az átlagot csak az if (ervenyes) blokkon belül számoljuk. A külön ellenőrzésekhez még nem kell összetett logikai feltétel.A TryParse a 6-ot sikeresen számmá alakítja, de a 6 nem érvényes jegy. Ezért szükséges a tartomány vizsgálata is. A 4,5-ös küszöb ebben a gyakorlóprogramban választott visszajelzési szabály.Tesztesetek és várt eredmények
- 5, 5, 4 → átlag 4,67; gratuláció.
- 5, 4, 4 → átlag 4,33; gyakorlásra ösztönző üzenet.
- 1, 1, 1 → átlag 1; érvényes bemenet.
- „öt”, 4, 4 → átalakítási hiba; nincs átlag.
- 0, 4, 4 és 6, 4, 4 → tartományhiba; nincs átlag.
- 4, 4,5, 5 → a második jegy nem egész szám; nincs átlag.
Hibavadászat
Keresd meg a hibát!
Olvasd el a kódot, és keresd meg, miért működik másképp, mint várnád. A magyarázatot csak a saját próbád után nyisd le!🐞 1. Egy egyenlőségjel
if (kor = 18){ Console.WriteLine("Nagykorú vagy.");}Mi a baj?
Az = értékadás, nem összehasonlítás. A fordító hibát jelez (CS0029: az int nem alakítható bool típussá), mert a feltételnek true vagy false értékűnek kell lennie. Helyesen: kor == 18, vagy ha a 18 évesek és az idősebbek is számítanak: kor >= 18.
🐞 2. A rejtélyes pontosvessző
if (pontszam >= 50);{ Console.WriteLine("Sikeres teszt!");}Mi a baj?
A pontosvessző lezárja az if-et egy üres utasítással, így a kapcsos zárójeles blokk már nem tartozik hozzá, és mindig lefut, 10 pontnál is. A Visual Studio figyelmeztet is (CS0642: lehetséges, hogy tévedésből írt üres utasítás). Az if (…) után soha nincs pontosvessző.
🐞 3. Hiányzó kapcsos zárójel
if (eletero == 0) Console.WriteLine("Game over!"); Console.WriteLine("Próbáld újra!");Mi a baj?
Kapcsos zárójel nélkül csak az első utasítás tartozik az if-hez. A „Próbáld újra!” a behúzás ellenére mindig megjelenik: a C#-ot nem a behúzás, hanem a kapcsos zárójel érdekli. Jó szokás mindig kitenni a kapcsos zárójelet, egyetlen sornál is.
🐞 4. Igen vagy igen?
Console.Write("Szereted a pizzát? ");string valasz = Console.ReadLine();if (valasz == "igen"){ Console.WriteLine("Én is! 🍕");}Mi a baj?
Szövegek összehasonlításánál számít a kis- és nagybetű: ha a felhasználó azt írja, hogy „Igen”, a feltétel hamis. Egy megoldás: alakítsd kisbetűssé a választ: valasz.ToLower() == "igen". A szövegkezelés trükkjeit a 2.5 leckében gyűjtjük össze.
Kihívások
🔐 1. Jelszóellenőrző
Kérj be egy jelszót. Ha megegyezik a programban tárolt jelszóval, írd ki: „Belépés engedélyezve”, különben: „Hibás jelszó”.
Egy lehetséges megoldás
Console.Write("Jelszó: ");string jelszo = Console.ReadLine();if (jelszo == "Kalap2026"){ Console.WriteLine("Belépés engedélyezve");}else{ Console.WriteLine("Hibás jelszó");}Fontos: valódi programokban a jelszót soha nem írják bele így a kódba, mert a lefordított programból is kiolvasható. Gyakorlásra viszont jó.
🔢 2. Páros vagy páratlan?
Kérj be egy egész számot, és írd ki, hogy páros vagy páratlan. Tipp: a 2.3 leckében tanult maradékos osztás (%) segít. Próbák: 0, 1, 2, −3 és −4. A 0 páros, és negatív egész számoknál is működik a nullával összehasonlítás.
Egy lehetséges megoldás
Console.Write("Adj meg egy egész számot: ");int szam = int.Parse(Console.ReadLine());if (szam % 2 == 0){ Console.WriteLine("Páros");}else{ Console.WriteLine("Páratlan");}🎬 3. Mozijegy
Ebben a kitalált moziban a jegy 2 600 Ft, 18 év alatt életkori kedvezménnyel 1 900 Ft. Kérd be az életkort, és írd ki a jegy árát. Teszteld 17, 18 és 19 évvel: a 18 éves már teljes árat fizet. A feladat szabályos, nem negatív egész életkort feltételez.
Egy lehetséges megoldás
Console.Write("Hány éves vagy? ");int kor = int.Parse(Console.ReadLine());int ar;if (kor < 18){ ar = 1900;}else{ ar = 2600;}Console.WriteLine($"A jegyed ára: {ar} Ft");Figyeld meg: az ar változót az if előtt hoztuk létre, így mindkét ág beállíthatja, és a végén ki is írhatjuk. Erről a hatókörnél (4.3) még lesz szó.
❄️ 4. Fagyriasztó
Kérd be a hőmérsékletet (tizedes is lehet). Ha 0 °C alatti, írd ki: „Fagy van, vigyázz az úton!”, különben: „Nincs fagy.” Melyik típust választod, és miért?
Egy lehetséges megoldás
Console.Write("Hőmérséklet: ");bool siker = double.TryParse(Console.ReadLine(), out double homerseklet);if (siker){ if (homerseklet < 0) { Console.WriteLine("Fagy van, vigyázz az úton!"); } else { Console.WriteLine("Nincs fagy."); }}else{ Console.WriteLine("Számot adj meg!");}double tizedes értéket is tárolhat. A tizedesjel a futtatási környezet területi beállításától függ: magyar beállítás mellett általában vessző, angol mellett pont. Teszteld −0,5; 0; 0,5 értékekkel a megfelelő tizedesjellel, majd szöveggel. Ebben a feladatban a riasztás feltétele szigorúan 0 alatti hőmérséklet; 0-nál az else ág fut.Összefoglalás
Ellenőrizd magad!
Tudsz már adatot bekérni, feltételt írni és megmagyarázni, melyik ág fut le? Az alábbi pontokat nézd át, majd válassz egy kihívást, amelyet önállóan megoldasz!- Az
iffeltétele mindig true vagy false értékű, zárójelben áll. - A kódblokk kapcsos zárójelek közé kerül, és csak igaz feltételnél fut le.
- Az
else-nek nincs feltétele: akkor fut, ha aziffeltétele hamis. A kettő közül mindig pontosan egy fut le. - Az összehasonlítás
==, az értékadás=; azif (…)után nincs pontosvessző. - A döntést folyamatábrán rombusz jelöli, két ággal.
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: elágazás, egyszerű és összetett feltételek, algoritmus leírása folyamatábrával.
Módszertan
A lecke az egyszerű feltételes végrehajtástól a kétágú elágazáson át a bemenetellenőrzésig halad. A rövid kódminták a Main metódusban futtathatók; a kezdeti Parse-példák feltételezését külön jelezzük, majd TryParse-szal bővítjük őket. A jóslós feladatok és a tesztesetek tervezése a PRIMM-szemléletet (Predict, Run, Investigate, Modify, Make) követik. A mini projekt folytatása a korábban tanultak alkalmazását és a fokozatos fejlesztést mutatja meg.
Tipikus tévképzetek
Az = és == összekeverése; a behúzásnak tulajdonított jelentés (3. hibavadász-feladat); hogy az if után következő sorok is a döntéstől függnek.
Időterv
Két tanórára javasolt. Első óra: döntések 5 perc; if adatbekéréssel 12 perc; if–else és határesetek 13 perc; bool és TryParse 10 perc; visszajelzés 5 perc. Második óra: folyamatábra 8 perc; kalkulátor 17 perc; hibavadászat 10 perc; önálló kihívás és megbeszélés 10 perc. A további kihívások differenciáló vagy otthoni feladatok.
Következő lecke: 3.2 else if és logikai operátorok
Mi van, ha nem két, hanem több lehetőség van? Megtanulod az else if-et, és az &&, || és ! operátorokkal összetett feltételeket írsz, például a jegy szöveges értékeléséhez.
Szakmai háttér: Microsoft Learn: if és if–else; Int32.TryParse. A nyitóillusztráció mesterséges intelligencia által előállított kép.





