Oszd meg!

Add a Twitter-hez Add a Facebook-hoz Add a Startlaphoz Add az iWiW-hez Add a Google Reader-hez

Közösség

Belépés

E-mail cím:
Jelszó:

Ciklusok a Pascalban

Ciklusok a Pascalban

A programokban gyakran van szükség utasítások ismételt végrehajtására. Az ilyen feladatok megoldására szolgálnak a ciklusok. A Pascalban három féle ciklus található: a for, a while és a repeat-until.

A for ciklusutasítást akkor használjuk, ha pontosan ismerjük az ismétlések számát. A for ciklust két féle képen lehet használni: növekvõ vagy csökkenõ ciklusként. A for ciklusutasítás csak egyetlen utasítás végrehajtására vonatkozik (ha több utasítás, akkor blokk).

A for utasítás alakja növekményes ciklus esetén:

for ciklusváltozó:=kezdõérték to végérték do utasítás;

a végrehajtáshoz fontos hogy teljesüljön:kezdõérték < végérték kezdeti feltétel. A fentieket mindig az alábbi formában kérem (növekményes):

for ciklusváltozó:=kezdõérték to végérték do
begin
   utasítás;
end;

A for utasítás alakja csökkenõ ciklus esetén, vagyis ha kezdõérték > végérték
for ciklusváltozó:=kezdõérték downto végérték do utasítás;

A fentieket mindig így kérem (csökkenõ):

for ciklusváltozó:=kezdõérték downto végérték do
begin
   utasítás;
end;

A FOR ciklus folyamatábrája:

 

A növekményes for ciklus a hozzá szükséges változók deklarációjával:

 

Var i, kezd, veg : integer;

Begin

{kezd értékének beállítása }

{veg értékének beállítása}

 

For i:= kezd to veg do

Begin

            <tevékenység>

End;

End.

A növekményes ciklus akkor fog a ciklusmagba belépni, vagyis a vezérlés akkor kerül a tevékenység-re ha a kezd<veg kezdeti feltétel teljesül. A FOR ciklus estén a ciklusmagban leírt utasításban felhasználhatjuk az i ciklusváltozó értékét, de azt tilos megváltoztatni![1] A kezd és veg értékének beállítása lehet a billentyûzetrõl, vagy valamely értékadó utasítással. A kezd és veg értékének ismertnek kell lennie mielõtt a vezérlés a ciklusfejre kerül!

Az alábbi példa egész szám kiírását végzi 1-tõl 6-ig! A ciklusmag egy szám kiírásából áll!

Program kiir1_6;

Var i, kezd, veg : integer;

Begin

kezd:=1;

veg:=6;

 

For i:= kezd to veg do

Begin

            Write(i);

End
Readln;

End.

N db csillag a képernyõn, képernyõtörléssel és a szükséges crt unit meghívásával:

program Csillag;
uses Crt;      {biztosítja a képernyõ kezelést a programban}
var i, n: byte;
begin
  ClrScr;      {képernyõt közöl}
  ReadLn(n);
  for i := 1 to n do
    Write('*');
  ReadLn
end.

A deklaráció miatt n legfeljebb 255 lehet.

Az alábbi példa két billentyûrõl megadott érték közti számokat írja ki növekvõ sorrendben:

 

Program kiir_tol_ig;

Var i, kezd, veg : integer;

Begin

Write(’Add meg hol kezdjem a számlálást:”);

Readln(kezd);

Write(’Add meg a számlálás végértékét:’);

Readln(veg);

 

For i:= kezd to veg do

Begin

            Write(i:4); {1-1  kiíráshoz 4 karakternyi helyet használ fel}

End
Readln;

End.

Egy FOR-os progi (melyet a szokásos módon át kell, hogy írj!

program  FOR_TEST;
        var      s, j, k, i, l : integer;
        begin
                 s := 0;
                 for  j:= 1 to 5 do
                 begin
                     write( j );
                     s := s + j
                 end;
                 writeln( s );
                 for  k := 0 to 1 do write( k );
                 for  i := 10 downto 1 do writeln( i );
                 j := 3; k := 8; l := 2;
                 for  i := j to k do  writeln( i + l )
        end.

 

A kezdõ és a vég érték lehet negatív is, csak az kell a tényleges kiíráshoz, hogy kezd<veg feltétel teljesüljön.

Az elöl tesztelõ ciklus a Pacalban, a while ciklus

Ciklusaink lehetnek adott számszor lefutók, vagy elõre nem ismert alkalommal lefutók. A nem ismert alkalommal lefutó ciklus lefutási feltételét tehetjük az ismétlõdõ tevékenység elé vagy mögé. Ha az ismétlés feltétele az ismétlõdõ utasítás elõtt áll elöl tesztelõ ciklusról beszélünk.

A while ciklus általános alakja:

while logikai kifejezés do utasítás;

A fenti ciklust mindig az alábbi módon kell leírni:

while (logikai kifejezés) do

begin

 utasítás;

end;

 Szokjuk  meg, hogy a feltételt zárójelbe tesszük.

A folyamatábra:

 

A while utasítás legegyszerûbb alkalmazása, az mikor egy számláló ciklust átírunk elöl tesztelõvé. Nézzük az alábbi példát:

For i:=1 to 6 do

Begin

write(i);

End;

Az i kezdõértéke 1 és végértéke 6, az i értéke egyesével növekszik. Tehát i kezdõértéke 1, vagyis i:=1; minden i-re igaz, hogy i<=6, vagyis a while-os megoldás:

 

i:=1;

while i<= 6 do

begin

write(i);

            i:=i+1; {figyelem, nem FOR-os ciklus, ez biztosítja a kilépést}

end;

 

Egy tipikusan elöl tesztelõ ciklussal megoldandó feladat az alábbi:

Kérdezze meg a gyerek az apját, mit gondol, hogy ma hányast kapott? A gyerek ma is egy szép jelest hozott. Míg az apa rossz jegyet, azaz 5-tõl eltérõt mond addig a gyerek újra kérdezi. Az ismétlésre akkor kerül sor, ha az apa nem találta el a kapott jegyet.

 

Be: jegy

Ciklus míg jegy<>5

            Be: jegy

Ciklus vége

 

A lényeges rész kódja:

 

Readln(jegy);

While (jegy<>5) do

Begin

            Readln(jegy);

End;

A fenti tevékenység az alapja az úgynevezett elõolvasásos végjeles bekérésnek, mely adatok, adatsorok bevitelénél nagy szerepet játszik.

A repeat-until ciklus hasonló a while ciklushoz. Az ismétlést itt is egy logikai kifejezés vezérli. A különbség az, hogy a repeat-until ciklus egyszer mindenképpen végrehajtódik, mert a feltétel (a logikai kifejezés) a ciklus végén kerül kiértékelésre. A ciklusmag addig hajtódik végre, amíg a logikai kifejezés hamis, és akkor fejezõdik be, amikor a logikai kifejezés igazzá válik. Ebben az esetben a logikai kifejezést kilépési feltételnek hívjuk. Az utasítás általános formája:

repeat ciklusmag; until logikai kifejezés;

A ciklusmag több utasításból is állhat. Itt nincs szükség a begin-end kulcsszavak használatára, mert a repeat-until kulcsszavak helyettesítik azokat.
A példa:

repeat
  Osszeg:=Osszeg+Szam;
  Szam:=Szam+1;
until Szam=21;

Az utasítás folyamatábrája:

 

 

 

Összefoglalóan a ciklusokról:

A ciklus fajtája

A futások száma

Legkevesebb hányszor fut le?

Feltételes

Elöl tesztelõ

elõre nem ismert

lehet, hogy egyszer sem

Hátul tesztelõ

elõre nem ismert

legalább egyszer

Számlálós

elõre ismert

lehet, hogy egyszer sem

A ciklus utasításokkal utasítás(ok) ismételt végrehajtását lehet elõírni. Az ismétlések számáról rendelkezésre álló információ alapján dönthetjük el, melyik ciklusszervezõ utasítást alkalmazzuk.

·                                 Ha elõre ismert az ismétlések száma:

for ciklusváltozó:=kezdõérték to/downto végérték do utasítás;

·                                 Ha a végrehajtási feltétel a belépés elõtt ismert (elõltesztelõ):

while logikai kifejezés do utasítás;

·                                 Ha a feltételvizsgálat elõtt egyszer végre kell hajtani (hátultesztelõ):

repeat ciklusmag until logikai kifejezés;

 

 

 


[1] Mi lenne a Ciklus i:= 1 –tõ 5-ig i:=i-1;  ciklus értelme?