Feladat: hasonlítsuk össze a háromféle ciklust
Ebben a
feladatban ugyanazt a problémát fogjuk megoldani a három különböző ciklus
segítségével.
Szeretnénk
megtudni annak a sorozatnak az összegét, amelyik 5-től kezdődik, 10 számot
tartalmaz, ahol minden elem (item) az előzőnek a duplája.
Tehát: 5 +10 +20
+40 +80 +160 +320 +640 +1280 +2560
A várt eredmény: 5115
13. ábra
A program kód:
namespace ConsoleApplication8
{
class Program
{
static void Main(string[]
args)
{
//for
ciklus használata
int
data = 5;
int
store = 5;
for
(int i = 0; i < 9; i++)
{
data *= 2;
System.Console.WriteLine("A \"data\" változó tartalma "
+ (i + 1) + ". lépésben = " +
data);
store += data;
System.Console.WriteLine("A \"data\" változó tartalma "
+ (i + 1) + ". lépésben = " +
data);
}
System.Console.WriteLine("Eredmény a \"for\" használatával: "
+ store);
//a while
ciklus használata
int
data2 = 5;
int
store2 = 5;
int
i2 = 0;
while
(i2 < 9)
{
i2++;
data2 *= 2;
System.Console.WriteLine("A \"data\" változó tartalma "
+ (i2 + 1) + ". lépésben = " +
data2);
store2 += data2;
System.Console.WriteLine("A \"data\" változó tartalma "
+ (i2 + 1) + ". lépésben = " +
data2);
}
System.Console.WriteLine("Eredmény a \"while\" használatával:
" + store2);
//do-while
ciklus használata
data = 5;
store = 5;
int
j = 0;
do
{
j++;
data *= 2;
System.Console.WriteLine("A \"data\" változó tartalma "
+ (j + 1) + ". lépésben = " +
data);
store += data;
System.Console.WriteLine("A \"data\" változó tartalma "
+ (j + 1) + ". lépésben = " +
data);
}
while
(j < 9);
System.Console.WriteLine("Eredmény a \"do-while\" használatával:
" + store);
}
}
}
Nem ez a
legrövidebb megoldás, ám a ciklusok megtanulásához tökéletesen jó.
A kódban láthatjuk,
hogy a programban a következő változók találhatóak: store (tároló), data
(adat), j, i (az i kétszer is, majd megnézzük, hogy ez hogyan lehetséges). Az
első lépésben a változót deklaráljuk és inicializáljuk 5-re.
int data=5;
int store=5;
Fontos, hogy megértsük,
hogy ezzel az inicializálással kapjuk meg 10 elemből álló sorozatunk első
elemeit. Következtetés: a mi ciklusfeltételünk nem lehet több 8-nál (azaz
kisebb, mint 9).
for(int
i=0;i<9;i++) {
A léptető
kifejezés i=i+1, ami azt jelenti, hogy 0-tól 8-ig megy a ciklus.
Az utasítás első
futása során megduplázzuk az adat változók értékét. Ez a következő képletet
jelenti data = data * 2;.
Azután
megjelenítjük az aktuális változó értékét (vegyük figyelembe a korábban
említett escape karaktert: \” utasítja a fordítót, hogy mutassa a következő “
jelet.)
System.Console.WriteLine("A
\"data\" változó tartalma "+(i+1)+". lépésben =
"+data);
Hozzáadunk egy új
adatot a tároló változóhoz, megtartva az eredetit és az újat is. Ez a képlete:
store=store+data;
store += data;
Megjelenítjük a
store (tároló) változó aktuális értékét.
System.Console.WriteLine("A
\"data\" változó tartalma "+(i+1)+". lépésben =
"+data);
}
Végül
megjelenítjük a tároló változó értékét: 5115
System.Console.WriteLine("Eredmény
a \"for\" használatával: "+store);
Megoldás a while
ciklus használatával:
Az adat és tároló
változók a fő hatókőrben vannak és lehetőségünk van újra használni őket (ahogy
azt tettük a do-while ciklusnál, ahol ismét az 5 értéket adtunk nekik) vagy
deklarálunk és inicializálunk új változókat, melyeket data2 és store2-nek
hívunk.
int data2=5;
int store2=5;
A változót előbb
kell deklarálni és inicializálni a while cikluson kívül. Ez lesz az
inicializáló kifejezés.
int i=0;
A ciklus futási
feltétele a while szót követi.
while(i2<9)
{
i2++;
A ciklus feltétel
teljesülésekor a ciklusváltozót kell módosítani az forráskódban. Ha ezt
elfelejtettük, akkor egy soha véget nem érő végtelen ciklust kapunk, mert az i
változó nem éri el a 9-et, így a ciklus soha nem áll meg. Ne feledjük, hogy i++
megegyezik i=i+1-el;
data2 *= 2;
System.Console.WriteLine(„A
\"data\" változó tartalma "+(i2+1)+". lépésben =
"+data2);
store2 += data2;
System.Console.WriteLine(„A
\"data\" változó tartalma "+(i2+1)+". lépésben =
"+data2);
}
System.Console.WriteLine("Eredmény
a \"while\" használatával: "+store2);
A harmadik megoldás do-while ciklus használatával
A meglévő
változókat újra használhatjuk (nem i = a deklaráció nem látható) új értékekkel.
data=5;
store=5;
int j=0;
Használhatjuk az
i változót, de helyette bevezethetünk egy újat, hagyományosan elnevezve: az abc
következő betűjével:
do
{
j++;
Ha a
ciklusfeltétel teljesül, akkor a ciklusváltozót az utasításnak megfelelően kell
változtatni. Ha elfelejtettük ezt megtenni, akkor egy soha véget nem érő
ciklust kapunk, mert a j változó soha nem éri el a 9-et, így a ciklus soha nem
áll meg.
data *= 2;
System.Console.WriteLine(„A
\"data\" változó tartalma "+(j+1)+". lépésben =
"+data);
store += data;
System.Console.WriteLine(„A
\"data\" változó tartalma "+(j+1)+". lépésben =
"+data);
}
while(j<9);
Ahol a
ciklusfeltételt pontosvessző követi!
System.Console.WriteLine("Eredmény
a \"do-while\" használatával: "+store);