1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy Károly Főiskola Számítástudományi tsz
2 Programvezérlési szerkezetek Az utasítások végrehajtási sorrendjét szabályozzák. 1.Szekvencia: ugyanabban a sorrendben kell végrehajtani az utasításokat, amilyen sorrendben az a forráskódban szerepel 2.Szelekció (elágazás): utasítások csoportját vagy végre kell hajtani, vagy nem 3.Iteráció (ciklus): utasítások csoportját ismételten, többször is végre kell hajtani
3 A logikai feltétel (kifejezés): Legfontosabb jellemzője, hogy kiszámítva vagy „igaz”, vagy „hamis” eredményt ad (és nincs harmadik lehetőség) Ezt kétállapotú (bináris) logikának hívják if ( logikai-feltétel ) utasítás;
4 A logikai kifejezés: Olyan kifejezés konstruálása, amely kiértékelve (kiszámítva) „igaz”, vagy „hamis” értéket ad … … összehasonlító operátorokkal … logikai operátorokkal lehetséges.
5 Összehasonlító operátorok: ==egyenlő ? !=nem egyenlő ? <kisebb, mint ? >nagyobb mint ? <=kisebb, vagy egyenlő? >=nagyobb, vagy egyenlő?
6 Pl: static void Main() { int a = int.Parse( Console.ReadLine() ); if ( a<0 ) … } … csak ha az ‘a’ változóban lévő érték kisebb, mint nulla (vagyis ha ‘a’ negatív) …
7 Logikai operátorok: &&ÉS(logikai konjunkció) ||VAGY(logikai diszjunkció) !NEM (logikai tagadás) Ezek segítségével komplex (több tagú) logikai kifejezés építhető fel: if ( a<0 && b!=100 ) …
8 Logikai ÉS && Kétoperandusú infix:___ ÉS ___ Akkor lesz a végeredmény IGAZ, ha mindkét rész külön-külön is IGAZ Egyéb esetben a végeredmény HAMIS IGAZ && IGAZ» IGAZ IGAZ && HAMIS» HAMIS HAMIS && IGAZ» HAMIS HAMIS && HAMIS» HAMIS
9 int a = -1; int b = 10; if ( a<0 && b!=100 ) … if ( a>0 && b!=100 ) … IGAZ HAMIS IGAZ HAMIS
10 Logikai ÉS && Végeredménye sokszor megjósolható Ha az első tag értéke HAMIS, a második tag értékét már ki sem kell számolni („shortcut” = rövidzár) if ( a>0 && b!=100 ) … HAMIS ??? HAMIS
11 Logikai VAGY || Kétoperandusú:___ VAGY ___ Akkor lesz a végeredmény IGAZ, ha bármely rész IGAZ Egyéb esetben a végeredmény HAMIS IGAZ || IGAZ» IGAZ IGAZ || HAMIS» IGAZ HAMIS || IGAZ» IGAZ HAMIS || HAMIS» HAMIS
12 int a = -1; int b = 10; if ( a<0 || b!=100 ) … if ( a>0 || b==100 ) … IGAZ HAMIS
13 Logikai VAGY || Végeredménye sokszor megjósolható Ha az első tag értéke IGAZ, a második tag értékét már ki sem kell számolni („shortcut” = rövidzár) if ( a<0 || b!=100 ) … IGAZ ??? IGAZ
14 Logikai TAGADÁS ! Egyoperandusú: NOT ___ Akkor lesz a végeredmény IGAZ, ha a tag egyébként HAMIS Ha a tag IGAZ, a végeredmény HAMIS ! IGAZ »HAMIS ! HAMIS»IGAZ
15 Egyszerű elágazás: if if ( logikai-feltétel ) utasítás; logikai feltétel utasítás IGAZ HAMIS
16 int a = int.Parse( Console.ReadLine() ); if ( a<0 ) a=0; int a = int.Parse( Console.ReadLine() ); if ( a<0 ) a=0; bool jo = false; if ( 0<a && a<10 ) b = true; bool jo = false; if ( 0<a && a<10 ) b = true; if ( 0<diszkr ) { int x1 = (-b + Math.Sqrt(diszkr))/(2*a); int x2 = (-b - Math.Sqrt(diszkr))/(2*a); Console.WriteLine(”X1={0}, X2={1}”,X1,X2); } if ( 0<diszkr ) { int x1 = (-b + Math.Sqrt(diszkr))/(2*a); int x2 = (-b - Math.Sqrt(diszkr))/(2*a); Console.WriteLine(”X1={0}, X2={1}”,X1,X2); }
17 Ha a feltétel igaz, akkor az utasitas1-t kell végrehajtani. Ha a feltétel hamis, akkor pedig az utasitas2-t. Mindkét esetben lehet blokk-jelek között több utasítást is elhelyezni… if ( logikai-feltétel ) utasítás1; else utasítás2; if ( logikai-feltétel ) utasítás1; else utasítás2;
18 logikai feltétel utasítás IGAZ utasítás if ( logikai-feltétel ) utasítás1; else utasítás2; if ( logikai-feltétel ) utasítás1; else utasítás2; HAMIS
19 double diszkr = b*b-4*a*c; if ( 0<diszkr ) { int x1 = (-b + Math.Sqrt(diszkr))/(2*a); int x2 = (-b - Math.Sqrt(diszkr))/(2*a); Console.WriteLine(”X1={0}, X2={1}”,X1,X2); } else Console.WriteLine(”0 vagy 1 megoldás”); Console.WriteLine(”Készen vagyunk…”); double diszkr = b*b-4*a*c; if ( 0<diszkr ) { int x1 = (-b + Math.Sqrt(diszkr))/(2*a); int x2 = (-b - Math.Sqrt(diszkr))/(2*a); Console.WriteLine(”X1={0}, X2={1}”,X1,X2); } else Console.WriteLine(”0 vagy 1 megoldás”); Console.WriteLine(”Készen vagyunk…”); IGAZ? HAMIS?IGAZ!
20 double diszkr = b*b-4*a*c; if ( 0<diszkr ) { int x1 = (-b + Math.Sqrt(diszkr))/(2*a); int x2 = (-b - Math.Sqrt(diszkr))/(2*a); Console.WriteLine(”X1={0}, X2={1}”,X1,X2); } else Console.WriteLine(”0 vagy 1 megoldás”); Console.WriteLine(”Készen vagyunk…”); double diszkr = b*b-4*a*c; if ( 0<diszkr ) { int x1 = (-b + Math.Sqrt(diszkr))/(2*a); int x2 = (-b - Math.Sqrt(diszkr))/(2*a); Console.WriteLine(”X1={0}, X2={1}”,X1,X2); } else Console.WriteLine(”0 vagy 1 megoldás”); Console.WriteLine(”Készen vagyunk…”); IGAZ? HAMIS?HAMIS!
21 switch ( szelektor-kifejezés ) { case eset1: ut1; …; break; case eset2: ut2; …; break; … } switch ( szelektor-kifejezés ) { case eset1: ut1; …; break; case eset2: ut2; …; break; … } string vagy ‘int’ típusú megfelelő típusú konstans utasítás-blokk kötelező elem! break return goto eset
22 int a=2, b=3; switch ( a+b ) { case 4: Console.WriteLine(”4-es eset.”); break; case 5: Console.WriteLine(”4-es eset.”); x=b*a; break; case 6: Console.WriteLine(”6-os eset.”); break; } a=b-3; int a=2, b=3; switch ( a+b ) { case 4: Console.WriteLine(”4-es eset.”); break; case 5: Console.WriteLine(”4-es eset.”); x=b*a; break; case 6: Console.WriteLine(”6-os eset.”); break; } a=b-3; a+b = 5 NEM! IGEN!
23 int a=5, b=4; switch ( a+b ) { case 4: Console.WriteLine(”4-es eset.”); break; case 5: Console.WriteLine(”4-es eset.”); x=b*a; break; case 6: Console.WriteLine(”6-os eset.”); break; } a=b-3; int a=5, b=4; switch ( a+b ) { case 4: Console.WriteLine(”4-es eset.”); break; case 5: Console.WriteLine(”4-es eset.”); x=b*a; break; case 6: Console.WriteLine(”6-os eset.”); break; } a=b-3; a+b = 9 NEM!
24 int a=5, b=4; switch ( a+b ) { case 4: Console.WriteLine(”4-es eset.”); break; case 5: Console.WriteLine(”4-es eset.”); x=b*a; break; default: Console.WriteLine(”Egyéb esetekben”); break; } a=b-3; int a=5, b=4; switch ( a+b ) { case 4: Console.WriteLine(”4-es eset.”); break; case 5: Console.WriteLine(”4-es eset.”); x=b*a; break; default: Console.WriteLine(”Egyéb esetekben”); break; } a=b-3; a+b = 9 NEM! Akkor ez legyen!
25 switch Többirányú elágazás Az eseteket konstansok vagy literálok jelölik Ha van DEFAULT ág, akkor az ágak közül pontosan egy hajtódik végre Ha nincs DEFAULT, akkor az ágak közül maximum egy hajtódik végre
26 switch Gyorsabb, mintha N darab IF-el végeznénk Nem lehet olyan, hogy egy időben több ág is kiválasztódna, mivel minden ágat egy konstans ‘őríz’, és két konstans nem lehet ugyanazon értékű, különben szintaktikai hiba!
27 int a=1, b=3; switch ( a+b ) { case 4: goto case 5; case 5: Console.WriteLine(”4 vagy 5.”); break; default: Console.WriteLine(”Egyéb”); break; } int a=1, b=3; switch ( a+b ) { case 4: goto case 5; case 5: Console.WriteLine(”4 vagy 5.”); break; default: Console.WriteLine(”Egyéb”); break; }