270 likes | 413 Views
Iteráció. Hernyák Zoltán Web: http://dragon.ektf.hu/aroan , E-Mail: aroan@aries.ektf.hu Magasszintű Programozási Nyelvek I. Eszterházy Károly Főiskola Számítástudományi tsz http://aries.ektf.hu. 1. Iteráció. Programvezérlési szerkezetek.
E N D
Iteráció Hernyák Zoltán Web: http://dragon.ektf.hu/aroan, E-Mail: aroan@aries.ektf.hu Magasszintű Programozási Nyelvek I. Eszterházy Károly Főiskola Számítástudományi tsz http://aries.ektf.hu 1
Iteráció Programvezérlési szerkezetek • Az utasítások végrehajtási sorrendjét szabályozzák. • Szekvencia: ugyanabban a sorrendben kell végrehajtani az utasításokat, amilyen sorrendben az a forráskódban szerepel • Szelekció (elágazás): utasítások csoportját vagy végre kell hajtani, vagy nem • Iteráció (ciklus): utasítások csoportját ismételten, többször is végre kell hajtani 2
A "szelekció" vezérlési szerkezet while ( logikai-feltétel ) utasítás; A logikai feltételt (kifejezést) ciklus vezérlő feltételnek hívják. Az utasítást (utasításblokkot) ciklusmagnak hívják. A vezérlő feltétel szabályozza, hogy meddig kell végrehajtani a ciklusmag utasításait. 3
A "szelekció" vezérlési szerkezet Ciklusok osztályozása vezérlés szerint Pozitív vezérlésű ciklusok: a ciklusmag utasításait mindaddig újra-és-újra végre kell hajtani, amíg a vezérlő feltétel értéke IGAZ. Ez esetben a ciklus vezérlő feltételét ‘ciklusban maradás feltételének’ szokták hívni. 4
A "szelekció" vezérlési szerkezet Ciklusok osztályozása vezérlés szerint Negatív vezérlésű ciklusok: a ciklusmag utasításait addig kell ismételni, amíg a vezérlő feltétel értéke HAMIS. Ez esetben a ciklus vezérlő feltételét ‘ciklusból kilépés feltételének’ szokták hívni. 5
A "szelekció" vezérlési szerkezet Ciklusok osztályozása tesztelés szerint Előltesztelő ciklusok: a, kiértékelődik a ciklus vezérlő feltétele b, ha nem megfelelő, akkor ‘e’ lépés c, ciklusmag végrehajtása d, ugrás az ‘a’ lépésre e, futás folytatása a ciklust követő következő utasítással (ciklus vége) 6
A "szelekció" vezérlési szerkezet Pozitív vezérlésű előltesztelős ciklus: IGAZ vezérlő feltétel Ciklusmag utasításai HAMIS 7
A "szelekció" vezérlési szerkezet Negatív vezérlésű előltesztelős ciklus: HAMIS vezérlő feltétel Ciklusmag utasításai IGAZ 8
A "szelekció" vezérlési szerkezet Előltesztelő ciklusok Fontos jellemzőjük, hogy elképzelhető olyan eset, hogy a ciklusmag egyetlen egyszer sem hajtódik végre, amennyiben a vezérlő feltétel már legelső esetben sem megfelelő értékű. Ekkor a ciklus ‘el sem indul’. 9
A "szelekció" vezérlési szerkezet Ciklusok osztályozása tesztelés szerint Hátultesztelő ciklusok: a, ciklusmag végrehajtása b, kiértékelődik a ciklus vezérlő feltétele b, ha megfelelő, akkor ‘a’ lépés újra c, futás folytatása a ciklust követő következő utasítással (ciklus vége) 10
A "szelekció" vezérlési szerkezet Pozitív vezérlésű hátultesztelős ciklus: Ciklusmag utasításai vezérlő feltétel IGAZ HAMIS 11
A "szelekció" vezérlési szerkezet Negatív vezérlésű hátultesztelős ciklus: Ciklusmag utasításai HAMIS vezérlő feltétel IGAZ 12
A "szelekció" vezérlési szerkezet Hátultesztelős ciklusok Fontos jellemzőjük, hogy a ciklusmag egyszer garantáltan végrehajtódik, legfeljebb többször már nem. 13
A "szelekció" vezérlési szerkezet Pozitív vezérlésű logikai előltesztelős ciklus while (feltétel) utasítás; • while (feltétel) • { • utasítás; • utasítás; • utasítás; • } • köv.utasítás IGAZ! IGAZ? HAMIS? HAMIS! 14
A "szelekció" vezérlési szerkezet Pozitív vezérlésű logikai hátultesztelős ciklus do utasítás; while (feltétel); do { utasítás; utasítás; } while (feltétel); köv.utasítás IGAZ? HAMIS? IGAZ! HAMIS! 15
A "szelekció" vezérlési szerkezet Példa: int i=1; while (i<=10) { Console.WriteLine(i); i++; // i = i+1; } Console.WriteLine(”Kész”); 16
A "szelekció" vezérlési szerkezet Példa: int a = int.Parse( Console.ReadLine() ); int i=2, db=0; while (i<a) { if (a%i==0) db++; i++; } Console.WriteLine(”Db={0}”,db); 17
A "szelekció" vezérlési szerkezet BREAK utasítás A „break” azonnal terminálja az őt tartalmazó ciklust, a végrehajtás azonnal a ciklust követő utasításra ugrik. 18
A "szelekció" vezérlési szerkezet Példa (‘középentesztelős’ ciklus): int db=0; while (true) { int a = int.Parse( Console.ReadLine() ); if (a==0) break; if (a%2==0) db++; } Console.WriteLine(”Db={0}”,db); 19
A "szelekció" vezérlési szerkezet CONTINUE utasítás A „continue” azonnal befejezi az aktuális ciklusmag végrehajtását (átugorja a maradék sorokat), és a vezérlés átkerül a ciklus vezérlő feltételének kiértékelésére. 20
A "szelekció" vezérlési szerkezet Példa: int i=0,ossz=0; while (i<10) { int a = int.Parse( Console.ReadLine() ); if (a<0) continue ossz = ossz + a; i++; } Console.WriteLine(”Osszeg={0}”,ossz); 21
A "szelekció" vezérlési szerkezet FOR ciklus Logikai előltesztelős ciklusok csoportjába tartozik. Működése szimulálható WHILE ciklussal… 22
A "szelekció" vezérlési szerkezet Példa: int i=0; while (i<10) { … i++; } for (int i=0;i<10;i++) { … } 23
A "szelekció" vezérlési szerkezet for(kezdőkif; log.feltétel; it.lépés) ut; Kezdőkifejezés általában értékadó utasítás csak egyszer hajtódik végre a ciklus vezérlő feltétele, pozitív vezérlésű, előltesztelős eset Iterációs lépés minden ciklusmag végrehajtás után automatikusan lefut ez a lépés is ciklusmag a, kezdőkif. végrehajtása b, amennyiben feltétel hamis –> break c, ciklusmag d, iterációs lépés e, újra ‘b’ lépés 24
A "szelekció" vezérlési szerkezet for(kezdőkif; log.feltétel; it.lépés) ut; BREAK: hasonlóan működik, azonnal kilép a for ciklusból a következő utasításra. CONTINUE: először az iterációs lépésre ugrik, csak utána a feltétel kiértékelésre! 25
A "szelekció" vezérlési szerkezet Példa: int ossz=0; for (int i=0;i<10;i++) { int a = int.Parse( Console.ReadLine() ); if (a<0) continue ossz = ossz + a; } Console.WriteLine(”Osszeg={0}”,ossz); ez uaz, mint a 21-es fólia while ciklusa? 26
A "szelekció" vezérlési szerkezet foreach ciklus Lista-alapú ciklus, egy adott lista minden elemét fel kell dolgozni egyesével, később lesz szó róla a lista mint adatszerkezet ismertetése után 27