C# szelekciós utasítások
Szelekciós utasítások (elágazások)
Az elágazások segítségével a programunk különböző utasításokat hajthat végre attól függően, hogy egy adott logikai feltétel teljesül-e.
Mikor használjunk elágazást?
- Ha a programnak döntést kell hoznia (pl. egy szám pozitív vagy negatív, egy felhasználó nagykorú-e, stb.).
- Ha több lehetséges kimenet van, és ezek közül választani kell.
if -- alap feltételes elágazás
Az if szerkezetet akkor használjuk, ha egy feltétel teljesülése esetén szeretnénk végrehajtani egy vagy több utasítást. Ha a feltétel hamis, a program egyszerűen továbblép.
int x = 10;
if (x > 5)
{
Console.WriteLine("x nagyobb, mint 5");
}
if-else -- kétirányú elágazás
Az if-else szerkezet lehetővé teszi, hogy két lehetséges út közül válasszunk: ha a feltétel igaz, az első ág fut le, ha hamis, a második.
int age = 18;
if (age >= 18)
{
Console.WriteLine("Nagykorú");
}
else
{
Console.WriteLine("Kiskorú");
}
if-else if-else -- többlépcsős elágazás
Több feltétel egymás utáni vizsgálatára használjuk. A program az első igaz feltételnél végrehajtja a hozzá tartozó utasításokat, majd kilép az elágazásból.
int score = 75;
if (score >= 90)
{
Console.WriteLine("Kitűnő");
}
else if (score >= 60)
{
Console.WriteLine("Elégséges vagy jobb");
}
else
{
Console.WriteLine("Elégtelen");
}
switch -- többirányú elágazás
A switch szerkezetet akkor érdemes használni, ha egy változó több lehetséges értéket vehet fel, és ezekhez különböző műveleteket szeretnénk rendelni. Átláthatóbb, mint sok egymásba ágyazott if-else.
int day = 3;
switch (day)
{
case 1:
Console.WriteLine("Hétfő");
break;
case 2:
Console.WriteLine("Kedd");
break;
case 3:
Console.WriteLine("Szerda");
break;
default:
Console.WriteLine("Ismeretlen nap");
break;
}
Logikai operátorok és feltételek
Az elágazásokban gyakran használunk logikai operátorokat (ÉS, VAGY, NEM), hogy összetettebb feltételeket tudjunk megadni. Ezek segítségével több feltételt is kombinálhatunk.
| Operátor | Jelentés | Példa |
|---|---|---|
&& | ÉS (AND) | (x > 0 && y > 0) |
|| | VAGY (OR) | (x > 0 || y < 0) |
! | Negáció (NOT) | !(x > 0) |
Igazságtáblázat
| 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 |
Példák:
int a = 5, b = 10;
bool cond1 = (a > 0 && b > 0); // true
bool cond2 = (a > 0 || b < 0); // true
bool cond3 = !(a > b); // true
Rövidzár kiértékelés (Short-circuit evaluation)
Fontos tudni, hogy a logikai operátorok kiértékelése során a C# optimalizál: ha az eredmény már eldönthető az első feltétel alapján, a másodikat nem vizsgálja tovább. Ez segít elkerülni például a nullával való osztást vagy más hibákat.
C#-ban a && és || operátorok rövidzárasan működnek:
&&esetén, ha az első feltétel hamis, a második már nem kerül kiértékelésre.||esetén, ha az első feltétel igaz, a második már nem kerül kiértékelésre.
Példa:
int divisor = 0;
int number = 10;
// Rövidzár miatt nem történik osztás nullával
if (divisor != 0 && (number / divisor) > 1)
{
Console.WriteLine("Az osztás eredménye nagyobb, mint 1");
}
Feltételes (ternary) operátor
Ez egy rövidített írásmódja az if-else szerkezetnek, amelyet egyszerű értékadásoknál érdemes használni. Olvashatóbbá és tömörebbé teszi a kódot.
A feltételes operátor egy rövidített if-else szerkezet, amely három operandust használ: egy feltételt, egy értéket, ha a feltétel igaz, és egy értéket, ha a feltétel hamis.
int a = 10;
int b = 20;
int max = (a > b) ? a : b; // max értéke 20 lesz
Feladatok
-
Készíts egy programot, amely bekér egy egész számot, majd kiírja, hogy páros vagy páratlan.
-
Készíts egy programot, amely bekér egy pontszámot (0-100), majd kiírja a hozzá tartozó érdemjegyet (1-5) az alábbi szabályok szerint:
- 90-100: 5
- 80-89: 4
- 70-79: 3
- 60-69: 2
- 0-59: 1
-
Készíts egy programot, amely bekéri egy hónap számát (1-12), majd kiírja a hónap nevét.