08 Iteracio - Eszterházy Károly Főiskola

Download Report

Transcript 08 Iteracio - Eszterházy Károly Főiskola

Hernyák Zoltán
Web: http://dragon.ektf.hu/aroan, E-Mail: [email protected]
Magasszintű
Programozási Nyelvek I.
Eszterházy Károly Főiskola
Számítástudományi tsz
http://aries.ektf.hu
1
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
2
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
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
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
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
Pozitív vezérlésű előltesztelős ciklus:
vezérlő
feltétel
HAMIS
IGAZ
Ciklusmag
utasításai
7
Negatív vezérlésű előltesztelős ciklus:
vezérlő
feltétel
IGAZ
HAMIS
Ciklusmag
utasításai
8
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
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
Pozitív vezérlésű hátultesztelős ciklus:
Ciklusmag
utasításai
vezérlő
feltétel
IGAZ
HAMIS
11
Negatív vezérlésű hátultesztelős ciklus:
Ciklusmag
utasításai
vezérlő
feltétel
HAMIS
IGAZ
12
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
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
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
Példa:
int i=1;
while (i<=10)
{
Console.WriteLine(i);
i++; // i = i+1;
}
Console.WriteLine(”Kész”);
16
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
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
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
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
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
FOR ciklus
Logikai előltesztelős ciklusok
csoportjába tartozik.
Működése szimulálható WHILE
ciklussal…
22
Példa:
int i=0;
while (i<10)
{
…
i++;
for (int i=0;i<10;i++)
}
{
…
}
23
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
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
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
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