Ugrás a fő tartalomhoz

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átorJelentésPélda
&&ÉS (AND)(x > 0 && y > 0)
||VAGY (OR)(x > 0 || y < 0)
!Negáció (NOT)!(x > 0)

Igazságtáblázat

ABA && BA || B!A
truetruetruetruefalse
truefalsefalsetruefalse
falsetruefalsetruetrue
falsefalsefalsefalsetrue

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

  1. Készíts egy programot, amely bekér egy egész számot, majd kiírja, hogy páros vagy páratlan.

  2. 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
  3. Készíts egy programot, amely bekéri egy hónap számát (1-12), majd kiírja a hónap nevét.