33
Ciklusok (iterációk )

Ciklusok (iterációk)

  • Upload
    aimee

  • View
    34

  • Download
    0

Embed Size (px)

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 Presentation

Citation preview

Page 1: Ciklusok (iterációk)

Ciklusok(iterációk)

Page 2: 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.

Page 3: Ciklusok (iterációk)

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)

Page 4: Ciklusok (iterációk)

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!

Page 5: Ciklusok (iterációk)

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.

Page 6: Ciklusok (iterációk)

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.

Page 7: Ciklusok (iterációk)
Page 8: Ciklusok (iterációk)

2.feladat: Írjuk ki az 1 és 100 közé eső összes 3- mal osztható számokat.

Page 9: Ciklusok (iterációk)

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.

Page 10: Ciklusok (iterációk)

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

Page 11: Ciklusok (iterációk)

Folyamatábrája: Pascal kód:

F

U

HamisIgaz

Repeat U Until

F;

Vagy

Repeat Begin U1;

U2; End;Until F;

Page 12: Ciklusok (iterációk)

1.feladat: Kérjünk be egy számot! A számot csak akkor fogadjuk el, ha az 1 és 31 közé esik.

Page 13: Ciklusok (iterációk)

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.

Page 14: Ciklusok (iterációk)

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.

Page 15: Ciklusok (iterációk)

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

Page 16: Ciklusok (iterációk)

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;

Page 17: Ciklusok (iterációk)

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

Page 18: Ciklusok (iterációk)

É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.

Page 19: Ciklusok (iterációk)

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;

Page 20: Ciklusok (iterációk)

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.

Page 21: Ciklusok (iterációk)
Page 22: Ciklusok (iterációk)

2.feladat: Rajzoljunk ki a képernyőre egy 40 széles és 10 magas csillagokból álló téglalapot.

Page 23: Ciklusok (iterációk)

Menükészítés

Page 24: Ciklusok (iterációk)
Page 25: Ciklusok (iterációk)
Page 26: Ciklusok (iterációk)

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

Page 27: Ciklusok (iterációk)

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)

Page 28: Ciklusok (iterációk)

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!

Page 29: Ciklusok (iterációk)
Page 30: Ciklusok (iterációk)
Page 31: Ciklusok (iterációk)
Page 32: Ciklusok (iterációk)
Page 33: Ciklusok (iterációk)