Navigation


RSS: tutorialok Jelenleg 9 vendég és 0 tag van az oldalon.

Ciklusok

szerző: elodani
dátum: 2009-05-22
Kategóriák:
  Pascal/Alapok

Ebben a részben a pascal nyelv ciklusait szeretném bemutatni.

Nos nézzünk pár alapfogalmat ez ügyben:
ciklusmag:Azok a műveletek amiket a ciklusban végrehajtunk.
ciklusváltozó:Egy egész (byte, shortint, integer, word...) típusú változó, amit a FOR ciklus használ. Jelölése általában egy betű i-től kezdődően (i,j,k,l...) (később még bővebben lesz szó róla)

És most már belevághatunk egyenest a közepébe

Nos íme egy definíció amit múltkor ígértem:
A ciklus egy olyan eljárás, amelyben egy (vagy több) művelet kerül ismételten végrehajtásra egy feltétel teljesülésétől függően.

Természetesen, ha több műveletet szeretnénk végrehajtani akkor itt is kell a
begin end; halálos páros (kivéve amkor nem, de erről majd később)

hivatalos nevük:ismétléses vezérlési szerkezetek

Fajtái:
-Számlálásos (for ciklus)
-Elöltesztelős (while ciklus)
-Hátultesztelős (repeat ciklus)

A FOR ciklus
Ez a típusú ciklus tulajdonképpen valahányszor végrehajt egy vagy több műveletet.(természetesen a valamennyit mi határozzuk meg)

Nos, van még egy szép def. a tarsolyomban(és még nem fogytam ki... ;)
Adott egy segéd-(cikus-) változó(lsd. fent) és egy művelet. A segédváltozó növekvő(vagy csökkenő) sorrendben felveszi egy intervallum minden értékét, majd végrehajtásra kerül a művelet.

Pascalul ez így néz ki:
for seged:=1 to 100 do Művelet;
Szabad fordításban ez annyit tesz: Arra, hogy seged 1 -től 100 -ig csináld: művelet-et

megj: ha, csökkenő sorrendben szeretnénk menni akkor a to lecserélendő downto ra

Nézünk erre egy egyszerű példát:
  1. program egytolszazig;
  2. var i,osszeg:integer;
  3. begin
  4.   osszeg:=0;
  5.   for i:=1 to 100 do osszeg:=osszeg+i;
  6.   writeln(osszeg);
  7.   readln;
  8. end.

Ez a kis pogi először lenullázza osszeg változót, majd egytől 100-ig az összes egész számot összeadja, végül kiírja, és megáll, hogy megnézhessük az eredményt.

A WHILE ciklus
Nos, ő már kicsit komolyabb fickó, Ő az elöltesztelős ciklus Az ő def.-je valami ilyesmi:

Adott egy F feltétel, valamint egy művelet.
működése a következő:
1) Kiértékeljük F feltételt (igaz/hamis)
2) Ha a feltétel hamis akkor a ciklus véget ér.
3) Ha a feltétel igaz, akkor végrehajtjuk a művelet(ek)et, és az első ponttól folytatjuk.

Van ezzel a ciklussal egy igen komoly veszély, ugyanis ha a műveletek egyike sincs hatással a feltételre, akkor végtelen ciklusba esünk, ez pedig nem túl jó...(sőt nagyon rossz).

Nézzük a fenti példaprogramot ezzel a ciklussal:
  1. program egytolszazig;
  2. var osszeg,i:integer;
  3. begin
  4.   osszeg:=0;
  5.   i:=1;
  6.   while i<=100 do begin
  7.     i:=i+1;    
  8.     osszeg:=osszeg+i;
  9.   end;
  10.  
  11.   writeln(osszeg);
  12.   readln;
  13. end.


Nos ez ugyanazt csinálja, mint az előző csak más a ciklus benne.
Ugye észrevettük, hogy itt az i "sima" változó, tehát nekünk kell megnövelnünk.

A REPEAT ciklus

Hasonlít az elöltesztelőshöz, de mégis teljesen más, lévén, hogy hátultesztelős. :D

Legyen adott megint egy F feltétel, és egy művelet
működése a következő:
1) Végrehajtjuk a művelet(ek)et
2) Kiértékeljük a feltételt, ha hamis az 1. ponttal folytatjuk.
3) Ha Igaz véget ér a ciklus.

Ennek típusnak van egy igen különleges tulajdonsága: Ide nem kell begin end; szemben minden mással(ez az amiről az előb beszéltem)

És még valami: Ugye mindenki észrevette, hogy ez addig ismétel amíg a feltétel hamis! szemben ugyebár az elöltesztelős haverjával.

Nézzük a már ismerős példát ezzel a ciklussal:
  1. program egytolszazig;
  2. var i,osszeg:integer;
  3. begin
  4.   osszeg:=0;
  5.   i:=0;
  6.   repeat
  7.     i:=i+1;
  8.     osszeg:=osszeg+i;
  9.   until i=100;
  10. end.


Természetesen a ciklusokat jóval hasznosabb dolgokra is lehet használni, mint az első néhány szám összeadása. Vannak feladatok amikre az egyik típus a jó vannak amikre a másik, tehát érdemes mindet megjegyezni.

Akinek nem teljesen tiszta, hogy mi mit csinál,(az olvassa el még párszor) de ha semmiképp sem tudja megérteni akkor nyugodtan írja meg bánatait nekem.

Igyekeztem röviden és érthetően írni, ha kimaradt valami, ami szerinted fontos,akkor azt is nyugodtan írd meg.

Aki meg nem hiszi, járjon utána...