hlmod.hu
https://hlmod.hu/

Ciklusok
https://hlmod.hu/viewtopic.php?f=55&t=9140
Oldal: 1 / 1

Szerző:  Silent [ 2013.06.25. 10:21 ]
Hozzászólás témája:  Ciklusok

A ciklus kifejezés szinte az összes programozási nyelvben megjelenik, hiszen használata egyszerű, mégis rendkívül hasznos. Segítségével végrehajthatunk bizonyos kódokat, annyiszor amíg az általunk megszabott feltétel teljesül.

For Ciklus
Az első, leggyakraban használt ciklus, a for ciklus. For ciklus felépítése:

for( a ; b ; c ) { d }

Magyarázat:
a: inicializátor
b: feltétel
c: d blokk után lefuttatandó kód
d: törzs

Működése:
1.)a
2.)Amíg b igaz, d
3.)c

Példa:
Kód:
new i
new osszeg
for (i=1; i<=10; i++)
{
   osszeg += i
}

Magyarázat:

  • Az első paraméter, az "i=1", végrehajtódik mielőtt a ciklus elindul, tehát az "i" értéke 1 lesz.
  • Ezután az "increment", növelés paraméter fut le. Ebben a paraméterben egy "post-increment" operátort adtunk meg, így csak a kód lefutása után fog új értéket kapni.
  • Leellenőrzi a feltételt. Az i<=10? Az i jelenleg 1, tehát igen, a feltétel igaz.
  • Mivel a feltétel igaz, az "osszeg+=i" lefut. Tehát az "osszeg" változóhoz hozzáadjuk az "i" változó értékét.
  • A kód lefutott, tehát mostmár az "i++" növeli "i"-t 2-re.
  • Ezután újra elkezdi ugyanazt.
  • i<=10? Igen, most éppen 2. Újra lefut az "osszeg+=i", tehát az "osszeg" 3 lesz.
  • A kód lefutott, az "i++" ismét növeli "i"-t 3-ra.
  • Mindez addig fog menni, amíg az "i" el nem éri a 11-es értéket. Abban a pillanatban a feltétel már nem lesz igaz, így a kódot nem futtatja le és kilép a ciklusból.
  • Az "osszeg" változó értéke végül 55 lesz, ami az 1-től 10-ig terjedő számok összege.

A ciklusunk segítségével könnyen kezelhetjük tömbjeinket is.

Kód:
//Csináljunk egy funkciót, ami összeadja egy adott tömb elemeinek értékét, majd visszaadja azt nekünk.
sum_of_array(tomb[], size)
{
   new i, osszeg
   //A ciklus 0-ról indul és mindaddig fut, míg a tömb méretét el nem éri.
   for  (i=0; i<size; i++)
   {
      osszeg += tomb[i]
   }
 
   return osszeg
}
//Íme a tömbünk:
new tomb[4]
tomb[0] = 1
tomb[1] = 1
tomb[2] = 3
tomb[3] = 4
//Próbáljuk ki a funkciónkat, ami a for ciklussal működik:
new megoldas = sum_of_array(tomb, 4)
//a válasz 9 lesz (1+1+3+4)


Itt van még egy példa a for ciklus használatára. Ezzel a funkcióval összehasonlíthatunk két tömböt, hogy egyenlőek-e.

Kód:
bool:compare_arrays(tomb1[], tomb2[], size)
{
   new i
   for (i=0; i<size, i++)
   {
      //Ha a két elem nem stimmel, false-t, tehát hamisat adunk vissza.
      if (tomb1[i] != tomb2[i])
      {
         return false
      }
   }
 
   //Ha a funkció sikeresen végigfutott true-t, tehát igazat adunk vissza.
   return true
}


A while ciklus
Ez a ciklus is nagyon fontos, de annyira nem bonyolult mint az imént tárgyalt for ciklus.
A while csak egy paramétert kér, ami pedig a feltétel. Mindaddig, míg a feltétel igaz, a kód lefut. Vigyázat, könnyen létrejöhet ilyenkor végtelen ciklus, ami nem éppen egészséges dolog.

Példaként írjuk meg a fenti funkciókat a while segítségével.

Kód:
// Egy egyszerű while ciklus:
new i=0
new osszeg
 
while (++i <= 10)
{
   osszeg+=i
}

//Funkció, amely összeadja a tömbünk elemeinek értékét:
sum_of_array(tomb[], size)
{
   new i=0, osszeg
   // i a kód végrehajtása után növekedik egyel.
   while (i++ < size)
   {
      osszeg += tomb[i]
   }
 
   return osszeg
}

//Az összehasonlító funkciónk while-t használva:
bool:compare_arrays(tomb1[], tomb2[], size)
{
   new i
   while (i++ < size)
   {
      if (tomb1[i] != tomb2[i])
      {
         return false
      }
   }
 
   return true
}



A do-while ciklus
Ez egy igen ritkán használt ciklus, de néha igencsak jól jöhet.
Felépítése:
Kód:
do {} while(feltétel)

Egy egyszerű példa:
Kód:
do
{
    a+=1
}
while(a < 5)


A do-while ciklus mindenféleképp végrehatja legalább egyszer a "do" blokkban szereplő kódot és csak utána ellenőrzi le, hogy a feltétel teljesül-e. Amennyiben igen, akkor mégegyszer végrehatja és így tovább. Ezt a ciklust másképpen hátultesztelős ciklusnak nevezzük.

Szerző:  Metal [ 2013.06.25. 10:29 ]
Hozzászólás témája:  Re: Ciklusok

megjegyzések:

for ciklusnál a 3 rész elhagyható, s így értelmezendő
1: mondjuk úgy h inicializátor
2: feltétel
3: törzs után lefuttatandó kód.

A végrehajtási sorrend:
1.
Amíg 2 igaz: <törzs> 3.

Tehát nem fut le az inkrementálás.

A másik ciklus neve: hátul tesztelő ciklus.

Hirtelen ennyi

Szerző:  Silent [ 2013.06.26. 06:58 ]
Hozzászólás témája:  Re: Ciklusok

Fixed.

Szerző:  JoGoBeLLa [ 2013.06.26. 21:59 ]
Hozzászólás témája:  Re: Ciklusok

Szép leírás, gratulálok! (:

Oldal: 1 / 1 Minden időpont UTC+02:00 időzóna szerinti
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/