330 likes | 463 Views
Ciklusok (iterációk). A program egyik legfontosabb tulajdonsága, hogy ismétléseket képes végrehajtani. A ciklus ( iteráció ) ismétlést jelent, ilyenkor egy vagy több utasítás újra és újra végrehajtódik.
E N D
A program egyik legfontosabb tulajdonsága, hogy ismétléseket képes végrehajtani. A ciklus (iteráció) ismétlést jelent, ilyenkor egy vagy több utasítás újra és újra végrehajtódik. Nem érdemes számítógépre vinni olyan problémát amely egy számolást csak egyszer végez el. Gyakoribbak azok a feladatok, amelyben egy számolási eredményt sokszor kell produkálni különböző induló értékek mellett. Vannak olyan esetek amikor az iterációk számát előre eltudjuk dönteni, de van azonban amikor a futási körülményektől függ. Pl. – ha a hét minden napjára akarunk végezni valamilyen számolást, akkor a program írásakor tudjuk, hogy az iterációk, ismétlések száma 7 lesz. - ha megadott számok között keresünk egy adott tulajdonságú számot, akkor nem tudjuk előre megadni az ismétlések számát. A számokat sorban ellenőrizzük, hogy rendelkezik- e az adott tulajdonsággal és ha igen akkor a keresést nem folytatjuk tovább. A program tehát az adatbekérést addig hajtja végre ismételten, ameddig a program használója nem hajlandó valamilyen, a program számára elfogadható adatot beütni. Ilyenkor az ismétlések számát képtelenség megjósolni. Lehet hogy elsőre beüti a használható értéket, de lehet, hogy még másnap se lép ki a ciklusból.
A ciklusból való kilépésnek feltétele van! Itt az a feltétel, hogy a beütött érték elfogadható legyen. Előfordulhat, hogy a ciklusnak belépési feltétel van: csak akkor akarjuk végrehajtani a ciklus magját (utasítások sorozatát), ha bizonyos feltételek teljesülnek. Pl. csak akkor sípoljon a gép, ha lenyomom a Space billentyűt. A pascal programozási nyelv, három mechanizmust kínál az iterációk megvalósítására. Ezek a következők: WHILE- előtesztelős ciklus (feltételes) REPEAT- hátul tesztelős ciklus (feltételes) FOR- számláló ciklus (növekményes)
1. WHILE-előtesztelős ciklus A program még a ciklusba való belépés előtt megvizsgál egy feltételt (ez a belépési feltétel) és ha ez teljesül, akkor a ciklusmag végrehajtódik, egyébként nem. A ciklusmag ismételten végrehajtódik, míg a belépési feltétel teljesül. Ha már nem teljesül, akkor a vezérlés a ciklus utáni utasításra kerül. WHILE … DO jelentése: amíg … csináld Amíg a feltétel igaz, hajtsd végre az utasítást!
F Igaz Hamis U While F Do U; Vagy While F Do Begin U1; U2; End; Folyamatábrája: Pascal kódja: ciklusfeltétel ciklusmag A while ciklusnak képesnek kell lennie arra, hogy a végrehajtás feltételét megváltoztassa. Ha a ciklusfeltétel sosem változik meg, akkor a ciklusból való kilépés reménytelen, ezt nevezzük végtelen ciklusnak.
A végtelen ciklus programozási hiba, ebben az estben a program lemerevedik, ilyenkor le kell ütni a Ctrl-Break vagy Ctrl-C billentyűkombinációt, mely megszakítja a program futását. Adjuk meg tehát a lehetőséget, hogy a ciklusfeltétel hamis is lehessen. A ciklusfeltétel megváltoztatása a ciklusmag dolga. A while ciklus tipikusan olyan problémák megoldására javasolt, melyben az induló feltételek határozzák meg a ciklusmag végrehajtásának szükségességét. 1.feladat: olvassunk be számokat addig, míg egy nullát nem ütnek be. A nulla lezárja a sorozatot. Írjuk ki a beütött számok darabszámát és összegét.
2.feladat: Írjuk ki az 1 és 100 közé eső összes 3- mal osztható számokat.
Feladatok: • Írassuk ki n természetes, páratlan számok összegét: S= 1+ 3+ 5+ … +11+ 13+ ... • Írjatok egy programot, amely kiszámolja, hogy valamennyi megtakarított pénz, hány hónap múlva éri el a bankban a 100000 Ft- ot, ha havi 2%-os kamattal számol. • Számoljátok ki az n. szám faktoriálisát. Pl.: 5!=1*2*3*4*5 =120 • Mozgassunk a képernyőn egy karaktert, 4 billentyű segítségével. • Beolvasunk egy sorozat egész számot. Írassátok ki a sorozatban kapott legnagyobb értéket.
2. REPEAT-hátul tesztelő ciklus Ebben az esetben a ciklus magja egyszer mindenképpen végrehajtódik, majd a ciklus végén történik egy feltételvizsgálat, ami eldönti, hogy kiléphetünk- e a ciklusból vagy sem. Ha nem léphetünk k, akkor újból végrehajtódik. Itt a feltétel kilépési feltétel, vagyis abba lehet hagyni a ciklust. REPEAT … UNTIL; jelentése: Ismételd … Amíg
U F Igaz Hamis RepeatUUntil F; Vagy Repeat Begin U1; U2; End; Until F; Folyamatábrája: Pascal kód:
1.feladat: Kérjünk be egy számot! A számot csak akkor fogadjuk el, ha az 1 és 31 közé esik.
Az első 4 páros szám: 2,4,6,8 Ezek összege: s=20. 2.feladat: Számítsuk ki az első n természetes páros szám összegét. Az első 4 páros szám: 2, 4, 6.1.lépés: s=0+2=2 2.lépés: s=2+
Feladatok: • Olvassuk be egy háromszög oldalainak hosszuságát. A beolvasást addig ismételjük, míg nem teljesül a következő két feltétel: - az adatok tényleg lehetnek egy háromszög oldalai - a háromszög területe 20 és 30 közé esik Adjunk üzenetet, ha valamelyik feltétel nem teljesül. • Adjátok meg az első n páros szám szorzatát.
2. FOR- számláló/ növekményesciklus Számláló, vagy növekményes ciklus esetén a ciklusmagot egy előre meghatározott szám- szor hajtunk végre. A ciklusváltozót (ciklust kísérő változó), valamint az értékhatárokat (kezdőérték és végérték) a programozó adja meg. Pl. n Byte típusú változó 1 és 10 közötti érétkeire, a végrehajtások száma 10. tehát a kezdőérték 1 és a végérték 10, az ismétlések száma tehát a ciklusváltozó 10. A FOR egy előtesztelős ciklus, ahol előre lehet tudni, hogy a ciklusmag hányszor kerül végrehajtásra. A kezdő és végértékeknek értékadása szerint kompatibilisnek kell lennie a ciklusváltozóval.
ciklusváltozó:= kezdőérték Folyamatábrája: igaz ciklusváltozó<= végérték hamis U ciklusváltozó növelése Pascal kódja: FORciklusváltozó:= kezdőértékTOvégértékDO U;
A FOR ciklus magját mindaddig kell végrehajtani, ameddig a ciklusváltozó értéke egy megadott határon belül van. A ciklusba való belépéskor a ciklusváltozó kezdőértéket kap, amely minden cikluslépésben egyesével növekszik (a DO alkalmazás esetén) illetve csökken (a DOWNTO alkalmazás esetén). A ciklusmag mindaddig hajtódik végre, amíg a ciklusváltozó el nem éri a végértéket. TO FORciklusváltozó:= kezdőértékvégértékDO DOWNTO
Észrevételek: • A Do után nem szokás ; tenni • Az értékadó utasításban := kell tenni, nemcsak = • Ha a ciklusmag több utasításból áll, akkor ahhoz hogy mindegyik utasítást végre hajtsa Begin és ENd közé kell raknunk őket. • A ciklusváltozó bármely felsorolt típus lehet, azaz: byte, ShortInt, Integer, Word, LongInt, valamint lehet karakter, logikai, felsorolt, stb. ezek mind sorszámozott típusúak, ez azért is fontos, mert csak az ilyen típusúakat tudja léptetni a program, a valósat például nem. A kezdő és végértékeknek természetesen a ciklusváltozó típusához kell igazodniuk.
Jelentősége: Például ha kiakarunk számítani egy összeget: S=1+3+5+7+…. +2*n-1, akkor ezt eddigi ismereteink alapján így írnánk meg: s:=0; i:=1; while i<=n do begin s:=s+2*i-1; i:=i+1; end; Kedvező lenne ha bármilyen ilyen típusú utasítást: i:=kezdőérték; while i<= végérték do begin utasítás; i:=i+1; end; könnyebben lehetne megírni, ugyanis gyakran használják. Ezt csakis a növekményes ciklussal lehetne megvalósítani: s:=0; for i:=1 to n do s:=s+2*n-1;
1.feladat: Most 2008- at írunk. Írjuk ki, hogy az elkövetkező években 2022-ig, melyik évben mennyi lesz József fizetése, ha az évenként10%- kal növekszik. József fizetése pillanatnyilag 80ezer Ft.
2.feladat: Rajzoljunk ki a képernyőre egy 40 széles és 10 magas csillagokból álló téglalapot.
Feladatok: 1. Készítsétek el a következő számpiramist, ahol az n szám értékét a billentyűzetről adtok meg, bekéri a program: a) 1 1 2 1 2 3 ……… 1 2 3 … n b) n n-1 n-2 … 3 2 1 ………………… 3 2 1 2 1 1
c) Páratlan számok piramisa: d) Páros számok piramisa: 1 2 1 3 2 4 1 3 5 2 4 6 ……….... …………… 1 3 5 …… (2*n-1) 2 4 6 …… 2*n e) 1 1 2 3 1 2 3 4 5 …………………………………………………. 1 ………………………………………………… (2*n – 1)
2. Számítsátok ki a következő sorozatok értékeit: a) P=(1- 1/2*2)*(1- 1/3*3)* … *(1- 1/n*n) b) S=1+1*2+1*2*3+ … + 1*2*3*…*n c) E=1- 1*2+1*2*3- … +1*2*3*…*n d) F=1- 2+3-4+ … +n 3. Határozd meg egy szám adott kitevőjű hatványra emelésének értékét. 4. Határozd meg egy szám osztóit, írasd is ki őket!