
Nos csak pár szóra jöttem e rovatba, mert
a Turbo Vision és Tippek - Trükkök rovat elég hosszú lett, így itt kicsit
rövidebb, sôt a legrövidebb leszek.
Elôzô számunkban vettük az elöl és hátultesztelô
ciklusokat ezekre mind a stuktogrammi ábrát, ill. Pascal-ban és C-ben példát.
A léptetéses ciklusra csak a stuktogramm beli ábráját vettük, elevenítsük
fel:
Ezután szeretnék nyelvi példát mutatni
a léptetéses ciklusra:
A Pascal nyelvben használatos léptetéses ciklus
for ciklusváltozó := kezdôérték to végérték do
utasítás vagy utasítás blokk. {maga a ciklus mag}
for ciklusváltozó := kezdôérték downto végérték do
utasítás vagy utasítás blokk. {maga a ciklus mag}
A ciklusra jellemzô tudnivalók:
-
A ciklusváltozó CSAK egész típus
lehet.
-
A ciklusváltozó alap-beállítás szerint
TO-nál eggyel nô DOWNTO-nál eggyel csökken.
Valósítsuk meg az elôzô számban közölt
stuktogramm Pascal forráskódját. Íme a stuktogramm:
Íme a Pascal forráskód:
var mennyi, ossz, i, szam: Integer;
BEGIN
Write('Mennyi szám összege lesz: '); Readln(mennyi); WriteLn;
ossz:=0;
for i:=1 to mennyi do
begin
ReadLn(szam);
ossz:=ossz+szam;
end;
WriteLn('Az összeg: ', ossz);
END.
Lássuk a C nyelv léptetéses ciklusát:
for ( inicializáló rész; lefutási feltétel; módosító rész )
utasítás(blokk); //ez maga a ciklus mag
Láthatjuk, hogy ez már kicsit összetettebb,
mint a Pascal megfelelôje és ebbôl következôen sokkal rugalmasabban is
kezelhetô. Lássuk a jellemzôit ennek is:
-
Látható, hogy a for utáni feltétel
( ) - tehát zárójelben van.
-
Az inicializáló rész arra szolgál,
hogy kezdô értéket adjuk a ciklus változónak, vagy a ciklus változóknak
ugyanis több is lehet. Fontos!!! bármilyen numerikus típus lehet a ciklusváltozó,
tehát valós is !
Ha több ciklusváltozó van akkor azokat
, (veszzôvel) választjuk el egymástól.
Ha befejeztük a inicializáló részt
akkor azt ; (pontoszvesszôvel) zárjuk le.
(Érdekesség képpen megemlítem, hogy
a C++ még lokális deklarációt is megenged az inicializáló részben. De ezzel
óvatosan bánjunk.)
-
Mivel a C rugalmasabb, ezért teljesen a
while() ciklusra formája szerint épül fel a léptetéses ciklus. (Így
lehetséges, a valós változó ciklus-változóként történô használata.)
Tehát a lefutási feltétel a while()-hoz
hasonlóan értékelôdik ki:
- ha feltétel nem 0 akkor
lefut a ciklus, ha 0 akkor kilép a ciklusból
A lefutási feltételhez megadhatunk
veszôvel elválasztva több feltételt is, de mindig csak az utolsó vezérel,
ez értékelôdik ki.
(Nem szükséges összefüggésbe hoznunk
a ciklusváltozót, a lefutási-feltétellel.)
-
Most jön egy érdekesebb rész a módosító
rész, mely ugyancsak több veszôvel elválasztott utasításból is állhat.
A módosító rész, mint neve is mutatja általában a ciklusváltozót módosítja,
de bármely C-ben megengedett parancs - függvény is állhat itt, pl:
for (i=1; i<10; printf("%d", i), i++);
ennek másik megfelelôje:
for (i=1; i<10; i++)
printf("%d", i)
-
Pár megjegyzendô apróság:
- Amint látjuk egy utasításra érvényes,
a közvetlenül mögötte állóra. Ha nincs mögötte semmi akkor ne felejtsük
el kirakni a pontosvesszôt.
- Használható utasításblokkban is,
a {} - a megszokott kapcsozárójelekkel.
- Bármely rész (inicializáló, lefutási
feltétel, módosító) elhagyható, a fordító nem jelez hibát. A pontosvesszôknek
viszont kint kell lenniük. (pl: for(;;))
- Ha a lefutási feltételt elhagyjuk
akkor oda automatikusan 1 (igaz) helyettesítôdik be (pl: for(;1;)) ami
végtelen ciklust jelent. Így óvatosan bánjunk a részek elhagyásával.
Lássuk a stuktogramm C beli megvalósítását:
#include <stdio.h>
#include <conio.h>
void main()
{
int mennyi, ossz, i, szam;
printf("Mennyi szám összege lesz: "); scanf("%d", &mennyi);
ossz=0;
for (i=1; i<=mennyi; i++)
{
scanf("%d", &szam);
ossz+=szam; // ossz = ossz + szam
}
printf("\n\n Összeg: %d", ossz);
}
Persze a módosító rész liberális voltából
a ciklus egy sorral is megadható:
for (i=1; i<=mennyi; scanf("%d", &szam), ossz+=szam, i++);
Nos ennyit a léptetéses ciklusról, következô
számunkban valószínüleg a szubrutinokkal foglalkozunk.
Bérczi László
Köszönetet mondanék fôiskolai
tanáromnak, Bálintné Farkas Judit tanárnônek a felhasznált irodalomért
([1]), és segítségért.
