Programozás C# -ban Elágazások
Logikai típusú változó A logikai típusú változónak két lehetséges értéke van, a TRUE és a FALSE, vagyis igaz, vagy hamis. Ezek az értékek konstansként is megadhatók: bool logikai = true; Két kompatibilis érték összehasonlításának eredménye vagy igaz (true) vagy hamis (false) lesz. Az összehasonlítás eredményét tudjuk tárolni egy logikai típusú változóban. int sz = 2; logikai = sz < 4; Console.WriteLine("{0}",logikai);
Logikai kifejezéseket logikai operátorokkal köthetünk össze Logikai kifejezéseket logikai operátorokkal köthetünk össze. Ezek a tagadás, a logikai és, illetve a logikai vagy operátorok. A C#-ban a műveleteket a következő képpen jelöljük: Név Jelölés Tagadás (negáció) ! ÉS (konjunkció) && VAGY (diszjunkció) ||
Logikai operátorok igazságtáblázata Tagadás 1 Látható, hogy az adott logikai operátort az ellenkezőjére fordítja!
Logikai operátorok igazságtáblázata ÉS (&&) A && B 1 Azaz kizárólag akkor lesz a művelet eredménye igaz, ha mindkét paraméter értéke igaz.
Példa bool a = false bool b = false; a = 12 > 11; b = 18 >= 18; bool eredmeny; eredmeny = !(a && b); Console.WriteLine("{0}", eredmeny); Console.ReadKey();
Feltételes utasítás Amennyiben programunk vezérlését egy logikai kifejezés igaz értéke esetén szeretnénk csak végrehajtani akkor a feltételes utasítást (egyszerű elágazást) használunk. if (logikai kifejezés) { igaz érték esetén végrehajtandó utasítások }
Egyszerű elágazás Az előző példában a logikai kifejezés értékétől azaz a feltételtől függően, igaz esetben hajtódik végre a {…} jelek között lévő programblokk. Ha a logikai kifejezés hamis a programblokk nem hajtódik végre, hanem ugrik a következő utasításra
Példa bool a = false; bool b = true; bool eredmeny = !a && b; if (eredmeny) { Console.WriteLine("Jó"); } Console.ReadKey();
Példa Console.WriteLine("Kérek egy számot"); int szam = Int32.Parse(Console.ReadLine()); if (szam >=100) { Console.WriteLine("Jó"); } Console.ReadKey();
Elágazás Az elágazás a feltételes utasításhoz hasonló vezérlési szerkezet, amely arra az esetre is ad lehetőséget amikor a megadott feltétel (logikai kifejezés) értéke hamis: if (logikai kifejezés) { igaz érték esetén végrehajtandó utasítások } else Hamis érték esetén végehajtandó utasítások
Elágazás Amennyiben a feltétel igaz, úgy az igaz ágon egyből a feltétel utáni utasításblokk végrehajtásával folytatjuk programunk vezérlését. Ha a feltétel hamis, akkor az úgynevezett hamis ágon, azaz az else utasítás utáni programblokk hajtódik végre. A logikai kifejezést kötelező zárójelek közé tenni! ()
Példa int szam; szam = Int32.Parse(Console.ReadLine()); if (szam % 2 == 0) { Console.WriteLine("A szám páros"); } Else Console.WriteLine(" A szám páratlan");
Blokkok alkalmazása utasítások csoportosítására Gyakran előfordul, hogy egynél több utasítást szeretnénk futtatni a logikai kifejezés igaz vagy hamis ágán. Ekkor ezen utasításokat blokkba foglaljuk A blokk: olyan utasítások sorozata, amelyeket mindkét oldalról kapcsos zárójel zár. {…blokk…} Amennyiben egy utasítás van akkor nem kötelező blokkba tenni, de ajánlott!
Összetett feltételek Amennyiben több feltételnek kell megfelelni használhatjuk a logikai operátorokat a feltételek megadásánál. Ekkor az említett operátorok igazságtáblái alapján történik a kiértékelés.
((szam > 30) && (szam < 40)) Példa int szam = Int32.Parse(Console.ReadLine()); if (szam > 30 && szam < 40) { Console.WriteLine("Ez a szám megfelelő"); } else Console.WriteLine("Ez a szám nem megfelelő"); Console.ReadKey(); Összetett feltételnél az egyes feltételeket a jobb átláthatóság érdekében ajánlott (…) közé tenni: ((szam > 30) && (szam < 40))
Kaszkádolt IF utasítások If utasításokat más if utasításokba is beágyazhatunk. Ezáltal olyan logikai kifejezések sorozatát láncolhatjuk egymáshoz, amelyeket addig tesztelünk egymás után, amíg valamelyik igaz nem lesz.
Példa if (nap == 0) napnev = ”vasarnap”; else if (nap==1) napnev=”Hétfő”; else if (nap==2) napnev=”Kedd”; else if (nap==3) napnev=”Szerda”; else if (nap==4) napnev=”Csütörtök”; else if (nap==5) napnev=”Péntek”; else if (nap==6) napnev=”Szombat”; else napnev=”Nincs ilyen nap!!!”;
Switch – Többirányú elágazás A kaszkád if utasítás egy szebb megvalósítása a switch használata Többirányú (2-nél több) elágazást valósíthatunk meg segítségével: switch (kifejezes) { case ertek1: utasítások…;break; case ertek2: utasítások…;break; case ertek3: utasítások…;break; … default: utasítások…; break; }
Példa Switch (nap) { case 0: napnev=”Vasárnap”; break; case 1: napnev=”Hétfő”; case 2: napnev=”Kedd”; …. default: napnev=”Nincs ilyen nap!”; }
Switch működése A switch utasítás után megadjuk a kifejezést amely szerint szelektálni szeretnénk a végrehajtandó utasításokat A következőkben felsoroljuk úgynevezett case címkékkel a kifejezés lehetséges eseteit, majd a kettőspont után jöhetnek azon utasítások amelyek akkor hajtódnak végre ha a switch után adott utasítás a megfelelő értéket veszi fel. A case címkék mindig {…} jelek között helyezkednek el Az utolsó címke a default címke, amely alapértelemezett ágat jelent, azaz ha előtte egyik sem teljesül akkor ezen utasítások hajtódnak végre.
Switch szabályai A megadott kifejezésnek egyszerű típusnak kell lennie. Pl: int vagy string. A case címkéknek konstansoknak kell lenni, ide nem írható kifejezés Két case címke nem lehet azonos A case címkék végén a break utasítást kötelező kiírni még default esetben is, különben a programunk túlcsordul és elkezdi végrehajtani a következő címke utasításait.
Feladtok 1. Egy beolvasott számról döntse el a program hogy -30 és 40 között van-e! 2. Két beolvasott szám közül írassuk ki a nagyobbikat! 3. Kérjen be egy számot, majd döntse el, hogy nullára végződik –e. 4. Adott egy tetszőleges pont koordinátáival. Határozzuk meg melyik síknegyedben van! 5. Rendeztessünk sorba 3 egész számot! 6. Három tetszőleges, számról döntse el a program hogy számtani sorozatot alkotnak e! 7. Három adott számról döntse el a program, hogy lehetnek-e egy háromszög oldalainak mérőszámai.
Feladatok II. Kérjünk be egy számot, állapítsuk meg, hogy Páros vagy páratlan? Osztható –e 7 el? 500 és 600 között van e? Írjunk programot, amely egy bekért évszámról eldönti, hogy szökőév e? (Szökőévek azon évek melyek néggyel oszthatók, de a százzal oszthatók közül csak a 400-al oszthatók szökőévek) Írjunk programot a megoldóképletre. Figyeljünk arra, hogy az a!=0 és ha a diszkrimináns negatív, akkor nincs megoldás.
int ora = DateTime.Now.Hour; Feladatok III. Kérjünk be egy nevet! Ha a saját nevünket adjuk meg akkor írjuk ki hogy helyes, különben helytelen. Szórakozóhelyen egy illető sört kér. A pultos megkérdezi melyik évben született. Ha ez nem 1900 és 2008 között van jelezze. Amennyiben a megadott évszám helyes, döntse el hogy kiadhatja e a sört A következő parancs az ora egész változóba elhelyezi a rendszerórából az aktuális órát: int ora = DateTime.Now.Hour; Köszönjünk a napszaknak megfelelően! Kérjünk be egy hónapot számmal, határozzuk meg melyik évszakban van!
int nap = Convert.ToInt32(DateTime.Today.DayOfWeek); FELADATOK IV. (SWITCH) A következő sor létrehoz egy nap nevű egész típusú változót, amelyben a rendszerdátumból kiveszi, hogy a hét hányadik napja van: int nap = Convert.ToInt32(DateTime.Today.DayOfWeek); Készítsünk programot, amely kiírja a nap nevét magyarul. Kérjünk be egy hónapot számmal, írjuk ki a nevét betűvel. Kérjünk be egy egész számot 1-10 között! Vizsgáljuk meg, hogy helyes-e a megadott szám, ha igen akkor írjuk ki magyarul. Írjunk programot amely bekér maximum 3 jegyű számot, majd kiírja betűvel.