hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2024.03.28. 19:59



Jelenlévő felhasználók

Jelenleg 206 felhasználó van jelen :: 2 regisztrált, 0 rejtett és 204 vendég

A legtöbb felhasználó (1565 fő) 2020.11.21. 11:26-kor tartózkodott itt.

Regisztrált felhasználók: Bing [Bot], Google [Bot] az elmúlt 5 percben aktív felhasználók alapján

Utoljára aktív
Ahhoz hogy lásd ki volt utoljára aktív, be kell jelentkezned.



Az oldal teljeskörű
használatához regisztrálj.

Regisztráció

Kereső


Új téma nyitása  Hozzászólás a témához  [ 4 hozzászólás ] 
Szerző Üzenet
 Hozzászólás témája: Ciklusok
HozzászólásElküldve: 2013.06.25. 10:21 
Offline
Signore Senior
Avatar

Csatlakozott: 2011.09.09. 17:39
Hozzászólások: 4020
Megköszönt másnak: 12 alkalommal
Megköszönték neki: 139 alkalommal
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.


A hozzászólást 2 alkalommal szerkesztették, utoljára Silent 2013.06.26. 06:56-kor.

Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Ciklusok
HozzászólásElküldve: 2013.06.25. 10:29 
Offline
Imperátor
Avatar

Csatlakozott: 2009.04.21. 09:33
Hozzászólások: 3991
Megköszönt másnak: 5 alkalommal
Megköszönték neki: 135 alkalommal
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

_________________
Kód:
I'm back

Kép


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Ciklusok
HozzászólásElküldve: 2013.06.26. 06:58 
Offline
Signore Senior
Avatar

Csatlakozott: 2011.09.09. 17:39
Hozzászólások: 4020
Megköszönt másnak: 12 alkalommal
Megköszönték neki: 139 alkalommal
Fixed.


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Ciklusok
HozzászólásElküldve: 2013.06.26. 21:59 
Offline
Őstag

Csatlakozott: 2013.01.27. 17:48
Hozzászólások: 1247
Megköszönt másnak: 6 alkalommal
Megköszönték neki: 61 alkalommal
Szép leírás, gratulálok! (:

_________________
banned user


Hozzászólás jelentése
Vissza a tetejére
   
Hozzászólások megjelenítése:  Rendezés  
Új téma nyitása  Hozzászólás a témához  [ 4 hozzászólás ] 


Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 1 vendég


Nyithatsz új témákat ebben a fórumban.
Válaszolhatsz egy témára ebben a fórumban.
Nem szerkesztheted a hozzászólásaidat ebben a fórumban.
Nem törölheted a hozzászólásaidat ebben a fórumban.
Nem küldhetsz csatolmányokat ebben a fórumban.

Keresés:
Ugrás:  
Powered by phpBB® Forum Software © phpBB Limited
Magyar fordítás © Magyar phpBB Közösség
Portal: Kiss Portal Extension © Michael O'Toole