HIK Elektronikus Felsőoktatási Tankönyv- és Szakkönyvtár
A Kempelen Farkas Felsőoktatási Digitális Tankönyvtár/vagy más megjelenítő által közvetített digitális tartalmat a felhasználó a szerzői jogról szóló 1999. évi LXXVI. tv. 33. paragrafus (4) bekezdésében meghatározott oktatási, illetve tudományos kutatási célra használhatja fel. A felhasználó a digitális tartalmat képernyőn megjelenítheti, letöltheti, arról elektronikus adathordozóra vagy papíralapon másolatot készíthet, adatrögzítő rendszerében tárolhatja. A Kempelen Farkas Felsőoktatási Digitális Tankönyvtár/vagy más megjelenítő weblapján található digitális tartalmak üzletszerû felhasználása tilos, valamint kizárt a digitális tartalom módosítása és átdolgozása, illetve az ilyen módon keletkezett származékos anyag további felhasználása.

10.1. Szelekció haladóknak

A szelekciónak több ága is lehet. Ilyenkor a feltételek közül legfeljebb egy teljesülhet, vagyis ha az egyik feltétel teljesül, akkor a többit már nem kell vizsgálni sem. A többágú szelekció folyamatábrája:

Egymásba ágyazott if utasítások sorozatával tudjuk megvalósítani a fenti szerkezetet. Ha az első feltétel nem teljesül, akkor a második feltétel kiérétkelése következik. És így tovább. A végrehajtás legfeljebb egy igaz ágon fog futni. Az ábra szerint az Utasítás-4 akkor kerül végrehajtásra, ha egyik feltétel sem teljesült.

Az utolsó else ág elhagyható. Hogyan valósítjuk ezt meg C#-ban? Ehhez nézzünk egy egyszerű, klasszikus példát.

Feladat:

Olvassunk be egy nemnegatív egész számot, valakinek az életkorát, és kortól függően írjuk ki a megfelelő szöveget:

0 - 13 évig: gyerek

14 – 17 évig: fiatalkorú

18 – 23 évig: ifjú

24 – 59 évig: felnőtt

60 - : idős

Megoldás:

static void Main(string[] args)

{

int kor;

kor = Int32.Parse(Console.ReadLine());

if (kor < 14) Console.WriteLine("Gyerek");

else

if (kor < 18) Console.WriteLine("Fiatalkorú");

else

if (kor < 24) Console.WriteLine("Ifjú");

else

if (kor < 60) Console.WriteLine("Felnőtt");

else Console.WriteLine("Idős");

Console.ReadLine();

}

A többágú szelekció másik megoldása a switch utasítás.

switch (kifejezés)

{

case konstans1 kifejezés:

utasítás1

ugrás

case konstans2 kifejezés:

utasítás2

ugrás

case konstansn kifejezés:

utasításn

ugrás

[default:

utasítás

ugrás]

}

Kifejezés: egész típusú, vagy string kifejezés.

Ugrás: Kilép avezérlés a case szerkezetből. Ha elhagyjuk, akkor a belépési ponttól számítva a további case-eket is feldolgozza.

Default: Ha egyetlen case feltétel sem teljesül, akkor a default ág kerül végrehajtásra.

Egy egyszerű felhasználás:

static void Main(string[] args)

{

int k;

Console.Write("Kérem válasszon (1/2/3)");

k = Int32.Parse(Console.ReadLine());

switch (k)

{

case 1:

Console.WriteLine("1-et választotta");

break;

case 2:

Console.WriteLine("2-őt választotta");

break;

case 3:

Console.WriteLine("3-at választotta");

break;

default:

Console.WriteLine("nem választott megfelelő számot.");

break;

}

Console.ReadLine();

}

Ugyanez feladat megoldható konvertálás nélkül, stringek felhasználásával is:

static void Main(string[] args)

{

string k;

Console.Write("Kérem válasszon (1/2/3)");

k = Console.ReadLine();

switch (k)

{

case "1":

Console.WriteLine("1-et választotta");

break;

case "2":

Console.WriteLine("2-őt választotta");

break;

case "3":

Console.WriteLine("3-at választotta");

break;

default:

Console.WriteLine("nem választott megfelelő számot.");

break;

}

Console.ReadLine();

}

Feladat:

Olvassunk be egy hónap és egy nap sorszámát! Írjuk ki ha a beolvasott számok nem jó intervallumba esnek. A február legyen 28 napos.

Megoldás:

static void Main(string[] args)

{

int ho, nap;

Console.Write("Kérem a hónapot:");

ho = int.Parse(Console.ReadLine());

Console.Write("Kérem a napot:");

nap = int.Parse(Console.ReadLine());

if ((ho == 1 || ho == 3 || ho == 5 || ho == 7 || ho == 8 || ho == 10 || ho == 12)

&& (nap > 31 || nap < 1))

Console.WriteLine("A nap legfeljebb 31 lehet");

else

if ((ho == 4 || ho == 6 || ho == 9 || ho == 11) && (nap > 30 || nap < 1))

Console.WriteLine("A nap legfeljebb 30 lehet");

else

if ((ho == 2) && (nap > 28 || nap < 1))

Console.WriteLine("A nap legfeljebb 28 lehet");

else

if (ho < 1 || ho > 12) Console.WriteLine("A hónap csak 1 és 12 között lehet.");

else

Console.WriteLine("Rendben");

Console.ReadLine();

}

Nézzük a lehetséges futási eredményeket. Első, amikor minden rendben, második, amikor a hónap megfelelő, de a nap nem helyes, és a harmadik lehetőség amikor a hónap száma nem jó.

Első eset, amikor minden rendben

Második eset, amikor a nap 45, ez nem lehet!

Harmadik eset, amikor a hónap nem lehet 45.