Szerző Téma: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)  (Megtekintve 13093 alkalommal)

[ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
« Dátum: 2010. augusztus 20. - 16:32:21 »
+2 Show voters
A ciklusok használata
 
Üdvözlök mindenkit, szeretném leírni nektek a ciklusok használatát ebben a kis leírásban.
Elõször is, bevezetõnek:
Ciklust akkor használunk, ha ugyanazt a feladatot többször kell elvégezni egymás után.
//(Ciklus fogalma: Ismétlõdõ jelenség.)
Háromféle ciklus létezik. Ezeket egyenként fogom bemutatni példákkal.
2 nagyobb fajta ciklus van : elöltesztelõs (for,while) és hátultesztelõs (do-while) ciklus.
A program az elöltesztelõs ciklusba csak akkor lép be, ha a feltétel teljesül. A feltétel a ciklus elején található.
A hátultesztelõs ciklus használatakor a program mindenképpen belép a programba és mindaddig ismétli, amíg a feltétel teljesül.
Kezdjük is el:
 
A for ciklus
 
Ez a legegyszerûbb és a leggyakrabban használt ciklus,és szerintem ezt mindenkinek ismernie kell.
Ez egy elöltesztelõs ciklus.
Nézzük a ciklus felépítését.
for(ciklusváltozó;ciklusfeltétel;posztfix) //vagy prefix
i++ = posztfix
++i = prefix
Különbség: ebben a konkrét példában( for ciklus ) ugyan nincs, de a prefixes alak használatánál a léptetés mûvelet feldolgozása elõtt lejátszódik, így a változó már az új értékkel vesz részt a folyamatban.
 
new x, y = 5;
x = ++y;
//Az x, és az y értéke is 6 lesz

 

new x, y = 5;
x = y++;
//Az x értéke 5, az y értéke 6 lesz

 
//Észrevételt köszönöm Fade-nak,szép megfogalmazást ZeRo-nak.
Példa:
for(new i = 0;i < 10;i++) // Vagy ++i
{
 //Ez a ciklustörzs,ide jönnek a feladatok.
 printf(\"Az i értéke %d\",i); // A printf függvényel írunk a konzolba.
}
Ez egy nagyon egyszerû kis kód,ami azt eredményezné,hogy addig írjuk ki az i változót a konzolba,ameddig annak értéke kisebb mint 10.Tehát,a ciklus addig fut le amíg a változónk értéke kisebb mint 10.
Mindig azok az utasítások hajtódnak végre,amik a ciklustörzsben vannak.
Ez akkor hasznos a gyakorlatban,hogyha pl. végig akarunk menni az összes játékoson,akik a szerveren tartózkodnak.NEM csak erre lehet használni!
 /* Érdekesség:
Egyes paraméterek elhagyhatók,de a pontosvesszõt ( ; ) mindig ki kell rakni!
Példa:
for(;ciklusfeltétel;értékváltoztatás)
Itt elhagyjuk a ciklusváltozót,a ciklus viszont így is mûködik!
*/
Példa a gyakorlatra:
for(new i = 0;i < GetMaxPlayers();i++)
{
 SpawnPlayer(i);  // Újraspawnoljuk az i-azonosítójú játékost.
}
Ez a példa a gyakorlatban lespawnolja a összes játékost.
Magyarázat:
GetMaxPlayers(); //Ezzel a függvénnyel lekérjük a szerver maximum férõhelyét.Nem vesz fel paramétert.
SpawnPlayer(playerid); //Ezzel a függvénnyel újra lespawnolhatunk egy játékost.Egyetlen paramétere a játékos azonosítója.
A többi szerintem érthetõ,amíg az i értéke kisebb mint GetMaxPlayers();  visszatérési értéke (Pl. 30,vagy 50 stb...),Addig 1 el növeljük és végrehajtjuk a feladatokat,amelyeket a ciklustörzsbe írtunk.Magyarul ha van egy 30 férõhelyes szerverünk,akkor ez a ciklus végigmegy mind a 30-játékoson,és újraspawnolja õket.A ciklus viszont mindenképp lefut 30-szor, akkor is ha az adott azonosítójú játékos nincs csatlakozva.Ezt könnyen megelõzhetjük.
for(new i = 0;i < GetMaxPlayers();i++)
{
 // Spawn elõtt ellenõrizzük,hogy a játékos csatlakozva van-e.
 if(IsPlayerConnected(i)) SpawnPlayer(i);
}
Így a SpawnPlayer függvény nem fut le ha a játékos nincs csatlakozva.
 
A while ciklus
 
Ez a ciklus nagyon hasonlít a feltételes utasításhoz (if).
Ez egy elöltesztelõs ciklus.
if(feltétel)
while(feltétel)
Legalábbis a szerkezete,ugyanis a feltételes utasítás nem fut  le ha a feltétel nem teljesül.
A while ciklus ponthogy fut mindaddig,amíg a feltétel teljesül.
Példa:
new i = 0;
while(i != 10) printf(\"i értéke: %d\",i);
Tehát,amíg az i értéke nem 10,addig lefut a ciklus.Talán egyeseknek feltûnhetett valami,még pedig az, hogy ez a ciklus hibás. Mivel ez egy végtelen ciklus!Magyarázat:Nem módosítjuk megfelelõ módon az i értékét,tehát soha nem lesz az értéke 10!
A for ciklusban ez automatikus,itt magunknak kell figyelnünk rá!
new i = 0;
while(i != 10) printf(\"i étéke: %d\",i),i++;
Na ez a ciklus a céljának megfelelõen mûködik,lefut 10 szer.
Összefoglalva,ez a ciklus addig fut le amíg a feltétel teljesül.
Gyakorlatban,mondjuk fájlok olvasásánál használjuk,de ezzel is megoldható a for ciklusnál használt kis spawn kód.
new i = 0;
while(i != GetMaxPlayers())
{
 if(IsPlayerConnected(i)) SpawnPlayer(i);
 i++;
}
 
A do-while ciklus
 
Ez a ciklus ugyanúgy mûködik mint a while ciklus,annyi különbséggel,hogy az itt leírt utasítások egyszer mindenképp lefutnak, ha teljesül a feltétel,ha nem.
Ez egy hátultesztelõs ciklus.
Szerkezet:
new i = 1;
do
{
 printf(\"i értéke %d\",i);
} while(i != 1)
Ez egy egyszerû példa,létrehozunk egy i változót melynek kezdõértéke 1.
Lefut a ciklus,majd ellenõrizzük hogy az i egyenlõ e 1-el.Ha nem,a ciklus újra lefut,amíg a feltétel teljesül.
Ha igen,a ciklus véget is ért.
A feltétel már teljesült,a ciklus mégis lefutott egyszer.
//A gyakorlatban ne felejtsük el megváltoztatni a megfelelõ módon az i-értékét,vagy végtelen ciklust kapunk.
Nézzük csak a spawnolós kódunkat.
new i = 0;
do
{
 if(IsPlayerConnected(i)) SpawnPlayer(i);
 i++;
} while(i != GetMaxPlayers())
 
Utószó
 
Egyenlõre ennyit a ciklusokról,ha valamit elírtam/nem jól fogalmaztam,hibáztam stb.
Akkor kérlek jelezzétek a témában.
Ha eszembe jut még valami a ciklusokról,akkor az tis hozzáírom a leíráshoz.
Próbáltam egyszerûen leírni,hogy a kezdõk is teljesen megértsék.
« Utoljára szerkesztve: 2011. március 10. - 14:59:21 írta staR »

Nem elérhető Csabesz

  • 7827
    • Profil megtekintése
[ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
« Válasz #1 Dátum: 2010. augusztus 20. - 16:44:21 »
0 Show voters
Szerintem tökéletes leírás lett.  ;)

Nem elérhető ZeRo

  • 4620
  • Ex Globális Moderátor
    • Profil megtekintése
[ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
« Válasz #2 Dátum: 2010. augusztus 20. - 16:59:12 »
0 Show voters
Annyit még hozzáírnék, hogy a ciklusoknak két nagyobb fajtája van, az elöltesztelõ ciklusok( for, while ), és a hátultesztelõ( do-while ), de egyébként szép leírás.

[ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
« Válasz #3 Dátum: 2010. augusztus 20. - 17:00:11 »
0 Show voters
Idézetet írta: ZeRo date=1282316352\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"2912\" data-ipsquote-contentclass=\"forums_Topic
Annyit még hozzáírnék, hogy a ciklusoknak két nagyobb fajtája van, az elöltesztelõ ciklusok( for, while ), és a hátultesztelõ( do-while ), de egyébként szép leírás.
 
Tudtam hogy kifelejtettem valamit,hozzáírom és kösz hogy szoltál.
Ja és köszönöm a dicséreteket.
Szerk: Leírás kiegészítve. (Magyarázat hozzáadva az elejéhez.)
Szerk2:Apró hiba javítva a while ciklusnál.
« Utoljára szerkesztve: 2010. augusztus 20. - 19:26:46 írta ChuckNorris »

Nem elérhető Alpha

[ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
« Válasz #4 Dátum: 2010. augusztus 22. - 15:33:34 »
0 Show voters
Ez sokat segített szép leírás :)

Nem elérhető hpeter94

  • 1450
  • Fórum fenntartó
    • Profil megtekintése
[ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
« Válasz #5 Dátum: 2010. augusztus 23. - 13:01:24 »
0 Show voters
ez télleg tuti :) még énis megértettem :P thx

[ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
« Válasz #6 Dátum: 2010. augusztus 23. - 15:24:50 »
0 Show voters
Idézetet írta: Alpha date=1282484014\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"2912\" data-ipsquote-contentclass=\"forums_Topic
Ez sokat segített szép leírás :)
 


ez télleg tuti :) még énis megértettem :P thx
 
[/quote]
Köszönöm.

GroX

  • Vendég
[ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
« Válasz #7 Dátum: 2010. augusztus 23. - 20:24:33 »
0 Show voters
Kezdõk megértik szerintem
Amúgy
 
for(ciklusváltozó;ciklusfeltétel;értékváltoztatás)[/quote]
Inkább:
for(ciklusváltozó;ciklusfeltétel;posztfix) // vagy prefix
i++ = posztfix
++i = prefix

Nem elérhető kurta999

  • 2759
  • Éllő fédisznó
    • Profil megtekintése
[ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
« Válasz #8 Dátum: 2010. augusztus 23. - 20:43:53 »
0 Show voters
Idézetet írta: Fade date=1282587873\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"2912\" data-ipsquote-contentclass=\"forums_Topic
Kezdõk megértik szerintem
Amúgy
 
for(ciklusváltozó;ciklusfeltétel;értékváltoztatás)
Inkább:
for(ciklusváltozó;ciklusfeltétel;posztfix) // vagy prefix
i++ = posztfix
++i = prefix
 
[/quote]
Szép leírás grat, majd a while-s-nek hasznát veszem.
Lenne egy kérdésem. A poszfix meg a prefix között mi a külömbség ?

Nem elérhető M4tr1X

  • 1131
    • Profil megtekintése
[ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
« Válasz #9 Dátum: 2010. augusztus 23. - 20:49:12 »
0 Show voters
Semmi.

[ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
« Válasz #10 Dátum: 2010. augusztus 23. - 22:23:55 »
0 Show voters
Idézetet írta: Fade date=1282587873\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"2912\" data-ipsquote-contentclass=\"forums_Topic
Kezdõk megértik szerintem
Amúgy
 
for(ciklusváltozó;ciklusfeltétel;értékváltoztatás)
Inkább:
for(ciklusváltozó;ciklusfeltétel;posztfix) // vagy prefix
i++ = posztfix
++i = prefix
 
[/quote]
Ezt nem írtam bele mert meg akartam magyarázni csak itt megingtam,nem vagyok biztos benne hogy jól tudom,és nem akartam hülyeséget írni...
Ha írsz nekem egy magyarázatot ,hogy mi a különbség a 2 közt,akkor beleírom de a saját baromságomat inkább nem,mert egy leírásba nemakarok esetleg téves dolgot írni.

Nem elérhető ZeRo

  • 4620
  • Ex Globális Moderátor
    • Profil megtekintése
[ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
« Válasz #11 Dátum: 2010. augusztus 23. - 22:24:42 »
0 Show voters
Idézetet írta: M4tr1X date=1282589352\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"2912\" data-ipsquote-contentclass=\"forums_Topic
Semmi.
 
De van, ebben a konkrét példában( for ciklus ) ugyan nincs, de a prefixes alak használatánál a léptetés mûvelet feldolgozása elõtt lejátszódik, így a változó már az új értékkel vesz részt a folyamatban.
 

new x, y = 5;
x = ++y;
//Az x, és az y értéke is 6 lesz

 



new x, y = 5;
x = y++;
//Az x értéke 5, az y értéke 6 lesz

[ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
« Válasz #12 Dátum: 2010. augusztus 23. - 22:27:29 »
0 Show voters
Mégis jól tudtam,csak én nem tudtam volna ijen szépen megfogalmazni.
Átis írom.

Nem elérhető M4tr1X

  • 1131
    • Profil megtekintése
[ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
« Válasz #13 Dátum: 2010. augusztus 25. - 15:10:51 »
0 Show voters
Szép tut, grat.
Amit Fade javasolt, azon még lehetne picit csiszolni.
for(ciklusváltozó; ciklusfeltétel; léptetés)

Nem elérhető krisk

  • 2380
    • Profil megtekintése
[ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
« Válasz #14 Dátum: 2010. szeptember 12. - 10:21:10 »
0 Show voters
Nagyon szépen összeírtad, grat!

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal