c#

C# szelekciók, elágazások

C# programozás Programozás
csharp_feltétel

Az elágazásoknak min. 1 vagy több ága is lehet, ha több ága van mint kettő, akkor már összetett elágazásról van szó. Nézzünk egy egyszerű példát, bekérünk egy számot, és kiírjuk az abszolút értékét.  A // itt is az egysoros komment jele

Összetett feltétel

Csináljunk egy olyan programot, amely bekéri egy dolgozat maximális pontszámát, majd
az abból elért pontszámot és megadja a jegyet. Az egyszerűség kedvéért 90%-tól 5, 80%-tól 4, 70%-tól 3, 60%-tól 2 és 60% alatt elégtelen.

Jegyezzük meg, hogy egy if-elágazásnak csak EGY kimenetele lehet, nem lehet olyan hogy mindkét ág, tehát a hamis és a negatív ágban lévő utasítások is lefutnak!! Ha egy összetettebb feltételt szeretnénk leprogramozni szükségünk van akár több if-re is, ez egy kicsit bonyolultabbá teszi a kód megértését. Ha megfelelően használjuk a tabulátort és a kapcsos zárójeleket, akkor olvashatóbbá, érthetőbbé válik a kód.

Több feltétel vizsgálata: ÉS, VAGY (AND(&&) és az OR(||)

Mindegyikkel kettő vagy több feltételt tudunk vizsgálni.
Az and-nél(&&) csak akkor lépünk az igaz ágba, ha mind a kettő(vagy több, lényeg hogy az összes) feltétel igaz, ha csak egy is hamis értékkel tér vissza, akkor már a kimenet is hamis lesz. Az or-nál(||) elég csak egynek igaznak lennie, és a kimenet is igaz, viszont ha mindegyik hamis, akkor az eredmény is hamis lesz.

Elágazások: switch

A switch egy olyan elágazás, amelyben szinte végtelen elágazás lehetséges.

A case ággal új összehasonlítást hívunk és mögé írjuk az összehasonlítást, majd egy kettősponttal nyitjuk, nem ;-vel, utána kapcsos zárójel és még az utolsó zárójel előtt egy break; utasítás, ami később a ciklusból való kilépésre fog szolgálni. A default egy végső megoldás, akkor fog lefutni a default ágban lévő utasítás, ha semelyik case ág nem volt megfelelő. Mint az iffet is, a switchet is egymásba lehet tenni. Switchet akkor használjunk, ha az értékek kötöttek. Például egy dobókockánál, ahol 6 lehetőség van,
ezért könnyen lehet alkalmazni

Gyakorlati példák:

  • Kelvinből Celsius fokra átváltás oda-vissza, case használatával:
  • Testtömeg index kiszámítása
    Kérjünk be a felhasználótól egy testtömeget és egy magasságot, majd ezek alapján határozzuk meg a testtömeg indexét, és közöljük az eredményt!
  • Víz halmazállapota:
    Kérjünk be egy hőmérsékletet, ami alapján a program megmondja, milyen halmazállapotú a víz.
 
  • Burkolólap mennyiség kalkulátor:
    Kérjük be a helység méretét. Az egyszerűség kedvéért méterben számolunk. A területre ráhagyunk +10%-ot, hátha összetörik pár burkolólap.
    A formázott kiírásban a {0} azt jelenti, hogy a paraméter listában elhelyezett első elemet kell kiírni elsőként. A {1} jelentése hasonló, csak itt a második elemre hivatkozunk. és így tovább.
  • Véletlen számok: 
    Kérjünk be 2db számot, és a kettő közötti tartományba hozzunk létre 3db véletlen számot! A Random.Next eljárás egy véletlen számot állít elő. Megadhatjuk neki paraméterben mettől-meddig. Pl: int month = rnd.Next(1, 13);  (1-12 közötti szám)

Hónapok neveinek 

Kérjen be a program egy 1-12 közötti számot, majd írja ki melyik hónap az! (1-12 közötti szám ellenőrzése)

using System;
namespace honapok
{
    class Program
    {
        static void Main(string[] args)
        {
            int szam;
            Console.WriteLine("Hanyadik hónap? (1-12)");
            szam = Convert.ToInt16(Console.ReadLine());
                       
            if ((szam > 0) && (szam < 13))
            {
                switch (szam)
                {
                    case 1: Console.WriteLine("Január"); break;
                    case 2: Console.WriteLine("Február"); break;
                    case 3: Console.WriteLine("Március"); break;
                    case 4: Console.WriteLine("Április"); break;
                    case 5: Console.WriteLine("Május"); break;
                    case 6: Console.WriteLine("Június"); break;
                    case 7: Console.WriteLine("Július"); break;
                    case 8: Console.WriteLine("Augusztus"); break;
                    case 9: Console.WriteLine("Szeptember"); break;
                    case 10: Console.WriteLine("Október"); break;
                    case 11: Console.WriteLine("November"); break;
                    case 12: Console.WriteLine("December"); break;
                }
            }
            else { Console.WriteLine("Hibás adat!"); }
            Console.ReadKey();
        }
    }
}

Példa: Bekért szám ellenőrzése

using System;
namespace alapok
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Kérem adja meg az  első  számot : ");
            string szama = Console.ReadLine();     
            
            Console.Write("Kérem adja meg a második számot: ");
            string szamb = Console.ReadLine();
            int a,b;
            bool ellenorzesa = Int32.TryParse(szama, out a);
            if (ellenorzesa)
            {
                Console.WriteLine("Converted '{0}' to {1}.", szama, a);
                a = Int32.Parse(szama);
            }
            else
            {
                Console.WriteLine("A bekért adat '{0}' nem szám!",
                                   szama ?? "<null>");
            }
            bool ellenorzesb = Int32.TryParse(szamb, out b);
            if (ellenorzesb)
            {
                Console.WriteLine("Converted '{0}' to {1}.", szamb, b);
                b = Int32.Parse(szamb);
            }
            else
            {
                Console.WriteLine("A bekért adat '{0}' nem szám!",
                                   szama ?? "<null>");
            }
            if (ellenorzesa == true  && ellenorzesb == true)
            {
                Console.WriteLine("A két szám összege:{0} ", a + b);
                Console.WriteLine("A két szám különbsége:{0} ", a - b);
                Console.WriteLine("A két szám szorzata:{0} ", a * b);
                if (b == 0)
                    { 
                    Console.WriteLine("Hiba! Zéró osztó!");
                    }
                else
                    {
                    double c = a / b;
                    Console.WriteLine("A két szám hányadosa :{0} ", c);
                    }
                
                Console.ReadLine();
            }
            else
            {
                Console.WriteLine("Hibás adat!");
            }
        }
    }
}