ciklusok (iterációk)
DESCRIPTION
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. - PowerPoint PPT PresentationTRANSCRIPT
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.
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!
Folyamatábrája: Pascal kódja:
F
U
HamisIgaz
While F Do
U;
Vagy
While F Do Begin
U1;U2;
End;
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:1.Írassuk ki n természetes, páratlan számok összegét:
S= 1+ 3+ 5+ … +11+ 13+ ...
2.Í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.
3.Számoljátok ki az n. szám faktoriálisát.Pl.: 5!=1*2*3*4*5 =120
4.Mozgassunk a képernyőn egy karaktert, 4 billentyű segítségével.
5.Beolvasunk egy sorozat egész számot. Írassátok ki a sorozatban kapott legnagyobb értéket.
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
2. REPEAT- hátul tesztelő ciklus
Folyamatábrája: Pascal kód:
F
U
HamisIgaz
Repeat U Until
F;
Vagy
Repeat Begin U1;
U2; End;Until F;
1.feladat: Kérjünk be egy számot! A számot csak akkor fogadjuk el, ha az 1 és 31 közé esik.
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+
Az első 4 páros szám: 2,4,6,8
Ezek összege: s=20.
Feladatok:
1. 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.
2. Adjátok meg az első n páros szám szorzatát.
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.
2. FOR- számláló/ növekményes ciklus
Folyamatábrája:
ciklusváltozó:= kezdőérték
ciklusváltozó<= végérték
ciklusváltozó növelése
U
igaz hamis
Pascal kódja:
FOR ciklusváltozó:= kezdőérték TO végérték DO
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
FOR ciklusváltozó:= kezdőérték végérték DO
DOWNTO
Észrevételek:
1.A Do után nem szokás ; tenni
2.Az értékadó utasításban := kell tenni, nemcsak =
3.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.
4.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.
Menükészítés
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 12 11
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*…*nc) E=1- 1*2+1*2*3- … +1*2*3*…*nd) 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!