7. hét Ciklusszervező utasítások
Tartalom:
7.1. Előfeltételes ciklus:
while
7.2.
Előfeltételes ciklus:
for
7.3. Végfeltételes ciklus:
do .. while
7.4. Ciklusok egymásba ágyazása
7.5. Alapvető algoritmusok
7.5.1.
Megszámlálás
7.5.2.
Összegzés, átlagszámítás
7.5.3.
Minimum- és maximum kiválasztás
7.6.
Tesztkérdések
7.7.
Feladatok
Ha egy bizonyos tevékenységet a programban egymásután többször végre kell hajtani, akkor ciklusokat alkalmazunk. A ciklusok végrehajtását, vagy az abból való kilépést feltételekhez kötjük.
Egy ciklus általános felépítése:
ˇ
fej
ˇ
mag
ˇ vég
Az ismétlésre vonatkozó információk vagy a fejben vagy a végben találhatók.
A magban helyezzük el azokat az utasításokat, amelyeket többször végre akarunk hajtani.
A ciklusok működése során két szélsőséges esettel
is találkozhatunk:
ˇ
Üres
ciklus: A ciklusmag egyszer sem fut le.
ˇ
Végtelen ciklus:
Az ismétlődés soha nem áll le.
7.1. Előfeltételes ciklus: while
Szintaktika:
while (feltétel)
<utasítás v. blokk>
Működési elv:
A program a ciklusba való belépés előtt megvizsgálja a feltételt (belépési feltétel), és ha ez teljesül, akkor a ciklusmag végrehajtásra kerül, egyébként nem. Ennél a ciklus fajtánál kialakulhat üres ciklus, abban az esetben, ha a belépési feltétel soha nem teljesül.
Példa: (Írjunk ki a konzolra egymásmellé 6 db csillagot!)
7.2. Előfeltételes ciklus: for
Szintaktika:
for (inicializálás;feltétel;növekmény)
<utasítás v. blokk>
Működési elv:
inicializálás: Itt deklaráljuk a ciklusváltozót, és adjuk meg annak kezdeti értékét.
feltétel: Belépési feltétel, minden ciklus elején kiértékelődik, ha igaz, akkor a ciklus végrehajtásra kerül, egyébként a vezérlés a for utáni utasításra ugrik.
növekmény: Itt változtatjuk meg a ciklusváltozó értékét.
Példa:
A for fejének tagjai hagyhatók üresen is, de a pontosvesszőket ki kell tenni. pl. for(;;)...
7.3. Végfeltételes ciklus: do..while
Szintaktika:
do
<utasítás v. blokk>
while (feltétel);
Működési elv:
A ciklus magja egyszer mindenképpen végrehajtódik, majd a ciklus végén, egy feltételvizsgálat következik, amely eldönti, hogy bent maradunk-e a ciklusban, vagy nem. Ha a feltétel igaz, akkor a ciklusmag újból végrehajtásra kerül. Ez a folyamat addig folytatódik, amíg a feltétel hamissá nem válik (bennmaradási feltétel).
Üres ciklus a végfeltételes ciklusnál nem fordulhat elő, hiszen a ciklus magja legalább egyszer lefut.
Példa:
Az előző három ciklus mindegyike ugyanazt a feladatot oldotta meg, kirajzolt 6 db csillagot a képernyőre.
7.4. Ciklusok egymásba ágyazása
A ciklusainkat egymásba is ágyazhatjuk.
Nézzünk meg egy egyszerű példát két ciklus egymásba ágyazására!
Példa:(Jelenítsük meg a konzolon következő
alakzatot: ********************
********************
********************)
Forrásprogram:
A program elemzése:
A csillagok egy 3 soros, 20 oszlopos táblázatot alkotnak. A kirajzolást úgy tudjuk egyszerűen elképzelni, mintha a táblázat celláiba helyeznénk el a csillagokat.
A külső ciklusban megyünk végig a sorokon, a belső ciklusban pedig az oszlopokon. Először az 1. sor elemeit jelenítjük meg egymásután, majd a 2. sor elemeit, és végül a 3. sor következik. Ha egy teljes sort megjelenítettünk, akkor meg kell oldani a sorváltás problémáját. Ezt egyszerűen egy println("") utasítással is megtehetjük.
Ezzel az algoritmussal egy sorozat, adott tulajdonsággal rendelkező elemeit számoljuk meg.
Az algoritmus menete a következő:
1. A számlálót nullára állítjuk.
2. Végig lépkedünk a sorozat elemein és ha az aktuális elem tulajdonsága megegyezik az adott tulajdonsággal, akkor a számláló értékét egyel megnöveljük.
3. Megjelenítjük a számláló értékét, ez a szám adja az adott tulajdonsággal rendelkező elemek számát.
Példa: ("Ma süt a nap." sztringben megszámoljuk az 'a' karakterek számát.)
7.5.2. Összegzés, átlagszámítás
Az olyan feladatokat, amelyekben a sorozat elemeit valamilyen módon gyűjtenünk kell (pl. göngyölítés) összegzéses feladatoknak nevezzük. Ebbe a feladatcsoportba sorolható a különbség-, illetve a szorzatképzés is.
Átlag kiszámításakor egyszerre két dolgot is végzünk - összegzünk, s közben számlálunk is. Végül a két érték hányadosát vesszük.
Példa: (Addig olvassuk be a számokat, amíg 0-t nem ütünk, majd írjuk ki a számok összegét és átlagát!)
Figyelem: Az átlag számításakor vigyázni kell a 0-val való osztásra!
7.5.3. Minimum- és maximum kiválasztás
Minimumkiválasztás esetén a sorozat legkisebb, maximumkiválasztás esetén a sorozat legnagyobb elemét kell meghatároznunk.
Az algoritmus menete a következő:
1. A sorozat első elemét elhelyezzük egy minimum(maximum) változóba.
2. Sorban végig lépkedünk az elemeken és ha az adott elem kisebb(nagyobb) a minimum(maximum) változóban lévőnél, akkor a változóba lévő elemet kicseréljük vele.
3. Megjelenítjük a változóban található elemet, ez az elem lesz a sorozat minimuma(maximuma).
Példa: (A program bekér 5 db valós számot, majd megjeleníti a legkisebbet!)
7.6. Tesztkérdések
7.7. Feladatok
7.7.1. Készíts programot, amely egymás alá hússzor kiírja a "Jó napot kívánok!" szöveget! (megoldás)
7.7.2. Készíts programot, amely 1-től 10-ig kiírja egymásmellé, vesszővel elválasztva a számok négyzetét! (megoldás)
7.7.3. Írjál programot, ami 50 db kockadobást szimulál, és kiírja a dobásokat egymás mellé, szóközzel elválasztva! (megoldás)
7.7.4. Írjuk ki az 1-200 közötti számok közül azokat az 5-tel oszthatóakat, amelyek nem oszthatók 25-tel! (megoldás)
7.7.5. Kérd be n értékét és készítsd el az alábbi n soros
háromszöget!
minta:
1
1 2
1 2 3
. . .
1 2 3 n
(megoldás)