C# szelekciók, elágazások

10. osztály 10évf_c# 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

int bekertszam = int.Parse(Console.ReadLine());
if (bekertszam < 0) {
//ahogy már tanultuk bekertszam = bekertszam * -1 rövidített verziója:
bekertszam *= -1;
} //ha a szám pozitív nem kell mást tennünk, mint kiírni ugyan azt a számot mint, amit megadtunk
Console.WriteLine("A megadott szám abszolút értéke: " + bekertszam);
Console.ReadKey();

Ö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.

Console.WriteLine("Add meg a dolgozat maximális pontszámát: ");
int dogamaxp = int.Parse(Console.ReadLine());
Console.WriteLine("Add meg a dolgozatban elért pontszámot: ");
int dogaelertp = int.Parse(Console.ReadLine());
double szazalek = (double)dogaelertp / dogamaxp * 100;
if (szazalek > 90) {
      Console.WriteLine("A dolgozat jegye: 5");
} else {
      if (szazalek > 80) {
         Console.WriteLine("A dolgozat jegye: 4");
      } else if (szazalek > 70) {
         Console.WriteLine("A dolgozat jegye: 3");
      } else if (szazalek > 60) {
         Console.WriteLine("A dolgozat jegye: 2");
      } else {
         Console.WriteLine("A dolgozat jegye: 1");
      }
 }
Console.ReadKey();

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

int dobottszam = int.Parse(Console.ReadLine());
switch (dobottszam)
{
case 1:
Console.Write("Egy"); break;
case 2:
Console.Write("Kettő"); break;
case 3:
Console.Write("Három"); break;

Gyakorlati példák:

  • Kelvinből Celsius fokra átváltás oda-vissza, case használatával:
Console.Write ( "Adjmeg egy hőmérséklet értéket:" ) ;
 int n = int.Parse(Console.ReadLine()) ;
 Console.Write
     ("Válassz opciót: (1) C◦ −−>K◦ (2) K◦−−>C◦ :" );
 byte c = byte.Parse(Console.ReadLine());
 Console.WriteLine();
 switch(c)
 {
    case 1:
       Console.WriteLine(" {0} C◦={1} K◦", n , n+273);
       break;
    case 2:
       Console.WriteLine("{0} K◦={1} C◦" , n , n-273);
       break;
  }
 Console.ReadLine();
  • 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!
Console.Write("Testtömeg [kg]: ");
int m = int.Parse(Console.ReadLine());
Console.Write("Testmagasság[cm]:");
double h = double.Parse(Console.ReadLine());
h=h/100;
double tti=m/Math.Pow(h,2);
Console.WriteLine("Testtömegindex: {0}",tti);
Console.Write("Testsúlyosztály:");
if (tti < 16) Console.WriteLine("Súlyos soványság");
else if (tti < 17) Console.WriteLine("Mérsékelt soványság");
else if (tti < 18.5) Console.WriteLine("Enyhe soványság");
else if (tti < 25) Console.WriteLine("Normális testsúly");
else if (tti < 30) Console.WriteLine("Túlsúlyos");
else Console . WriteLine("Elhízás");
Console.ReadLine();
  • 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.
Console.WriteLine("A viz halmazallapotanak vizsgalata:");
Console.Write("Homerseklet: ");
double t=Convert.ToDouble(Console.ReadLine());
if(t>0)
 {
if (t>=100) Console.WriteLine("Goz!");
else Console.WriteLine("Viz!");
}
else Console.WriteLine("Jeg!");
Console.ReadLine(); 
  • 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.
Console.Write("A szélesség méterben: ");
double sz=double.Parse(Console.ReadLine());
Console.WriteLine();
Console.Write("A hosszúság méterben: ");
double h=double.Parse(Console.ReadLine());
double t=sz*h;
Console.WriteLine();
Console.WriteLine("A␣konyhánk területe: {0} m2",t);
double cs=0.2*0.2;
double db=t/cs;
double osszes=db+0.1∗db;
Console.WriteLine();
Console.WriteLine("A szükséges csempe mennyisége: {0:0.0 0} db" ,osszes);
Console.ReadLine();
  • 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)
Console.Write("Kerem az első számot:");
int szam1=int.Parse(Console.ReadLine());
Console.Write("Kerem a második számot:");
int szam2=int.Parse(Console.ReadLine());
Random veletlen=new Random();
Console.WriteLine("A generalt szamok: {0}, {1}, {2}. ",
   veletlen.Next(szam1,szam2),
   veletlen.Next(szam1,szam2),
   veletlen.Next(szam1,szam2));
Console.ReadLine();

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!");
            }
        }
    }
}