A program többször végrehajtódó részét ciklusnak nevezzük. A ciklusfeltétel adja meg, mikor kell a ciklusmagot ismét végrehajtani.
Elöltesztelős ciklusmod művelet segítségével ellenőrizzük.Var a:integer; a:=16; while (a mod 7>0) or (a mod 2>0) do a:=a+1; writeln(a); readln; END. while feltétel do utasítás;a értékét, amíg nem felel meg a feladat feltételének (vagyis amíg nem osztható 7-tel vagy nem osztható 2-vel). Ezért ha leáll, akkor azért áll le, mert a osztható 7-tel és osztható 2-vel is.do után csak egy utasítás állhat, ezért több utasításból álló ciklusmagot begin és end közé kell írni.Hátultesztelős ciklusVar a:integer; BEGIN repeat write('Adj meg egy egész számot, 0-ra kilép: '); readln(a); if a mod 11=0 then writeln('osztható 11-gyel.') else writeln('nem osztható 11-gyel.'); until a=0; END. repeat és until közé több utasítást is be lehet írni, az until után pedig a leállás feltételét kell megadni.readln -t, mert a felhasználó 0 beírásával már jelezte, hogy ki akar lépni.Számlálós ciklusVar i:integer; BEGIN i:=1; while i<=10 do begin writeln(i:2,' négyzete=',sqr(i):3); i:=i+1; end; readln; END. A számlálós (vagy for-) ciklus pont ezt csinálja: Var i:integer; BEGIN for i:=1 to 10 do writeln(i:2,' négyzete=',sqr(i):3); readln; END. for változó:= kezdőérték to végérték do utasítás;to helyett downto -t használva visszafelé számol.Var i:integer; BEGIN for i:=1 to 10 do writeln(2*i-1); readln; END. Var fokozat,i:integer; BEGIN write('Mennyire szépen kérjem? '); readln(fokozat); for i:=1 to fokozat do write('nagyon '); writeln('szépen kérem!'); readln; END. Példa ciklusra és elágazásrarandom függvénnyel állítja elő. Pl. random(4) eredménye egy 0 és 3 közötti véletlenszerűen választott egész szám. Természetesen a gép igazi véletlen eseményt nem tud létrehozni (nem dobhat kockával), és ezeket a számokat meghatározott algoritmus alapján állítja elő. Ha a programban kiadjuk a randomize parancsot, minden futtatáskor más véletlen sorozatot kapunk.VAR g,t,c:integer; BEGIN randomize; g:=random(100)+1; c:=0; repeat write('Gondoltam egy számot 1 és 100 között. Találgass: '); readln(t); if g<t then writeln('Kisebbre gondoltam!'); if g>t then writeln('Nagyobbra gondoltam!'); c:=c+1; until g=t; writeln('Eltaláltad ',c,' lépésben!'); writeln('Nyomj entert'); readln; END. Egymásba ágyazott ciklusokCiklusban ciklus is lehet. Ha a külső ciklus n-szer fut le, a belső pedig m-szer, akkor a belső ciklus ciklusmagja összesen n·m alkalommal fog lefutni. A következő példa belső ciklusa 15 db. '*' karaktert ír ki egy sorba, amit a külső ciklus 10-szer ismétel. Az eredmény egy 150 *-ból álló téglalap.Var i,j:integer; BEGIN for i:=1 to 10 do begin for j:=1 to 15 do write('*'); writeln; end;
Feladatok11. Írj programot, amely kiírja a 0, 5, 10, ..., 100 számokat (ötösével) hátultesztelős ciklussal! megoldás
12. Írj programot, amely a következő idétlen játékot játssza a felhasználóval mindaddig, amíg az a "nem" szót beírja. A felhasználó által beírt dolgokat vastagítva jelzem. Írj be egy számot! 6 7! Nyertem! Még egy játék? igen Írj be egy számot! 2000 2001! Nyertem! Még egy játék? nem Kösz a játékot! megoldás
16. Írasd ki (FOR-ciklussal) 1 és 1000 között a 7-tel osztható, páratlan számokat! (Tipp: egyesével számolunk, de csak a feltételnek megfelelő számokat írjuk ki.) megoldás
18. Írasd ki a teljes 10-es szorzótáblát 1*1-től 10*10-ig! (Tipp: egymásba ágyazott ciklusok.) |