GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => Tanuljunk PAWN nyelvet => A témát indította: ChuckNorris - 2010. augusztus 20. - 16:32:21

Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: ChuckNorris - 2010. augusztus 20. - 16:32:21
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.
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: Csabesz - 2010. augusztus 20. - 16:44:21
Szerintem tökéletes leírás lett.  ;)
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: ZeRo - 2010. augusztus 20. - 16:59:12
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.
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: ChuckNorris - 2010. augusztus 20. - 17:00:11
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.
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: Alpha - 2010. augusztus 22. - 15:33:34
Ez sokat segített szép leírás :)
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: hpeter94 - 2010. augusztus 23. - 13:01:24
ez télleg tuti :) még énis megértettem :P thx
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: ChuckNorris - 2010. augusztus 23. - 15:24:50
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.
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: GroX - 2010. augusztus 23. - 20:24:33
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
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: kurta999 - 2010. augusztus 23. - 20:43:53
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 ?
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: M4tr1X - 2010. augusztus 23. - 20:49:12
Semmi.
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: ChuckNorris - 2010. augusztus 23. - 22:23:55
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.
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: ZeRo - 2010. augusztus 23. - 22:24:42
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
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: ChuckNorris - 2010. augusztus 23. - 22:27:29
Mégis jól tudtam,csak én nem tudtam volna ijen szépen megfogalmazni.
Átis írom.
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: M4tr1X - 2010. augusztus 25. - 15:10:51
Szép tut, grat.
Amit Fade javasolt, azon még lehetne picit csiszolni.
for(ciklusváltozó; ciklusfeltétel; léptetés)
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: krisk - 2010. szeptember 12. - 10:21:10
Nagyon szépen összeírtad, grat!
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: Popec16 - 2010. október 11. - 21:51:57
Ez jó szint így van például a c++ nyelvcsaládban is , elõltesztelõs ,stb :)!
Szép tut ,Grat!
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: ChuckNorris - 2010. október 12. - 16:09:15
Köszönöm a dicséreteket,és Popec,igen így van C++-ban is .  :D
(Nagyából...)
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: Luciano - 2010. október 12. - 20:43:26
Szép, remek, ügyes kis leírás, nagyon hasznos a kezdõknek!
Prototype
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: Popec16 - 2010. október 15. - 15:08:25
Az a baj hogy szerintem a fele fórumnak fogalma sincs hogy mi az a \"ciklus\" !
/Nem lenézésbõl írtam , és ne vegye magára senki/
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: hpeter94 - 2010. október 15. - 15:12:14
szerintem azért lett itt elmagyarázva nem?
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: ChuckNorris - 2010. október 15. - 15:25:58
Ciklus = Ismétlõdõ jelenség,
de szerintem a leírásból kiderül,hogy mire is való,azért hozzáírom és kösz az észrevételt. :)
Edit: Uh most látom,hogy mégs benne volt már kicsit máskép megfogalmazva:
 
Ciklust akkor használunk, ha ugyanazt a feladatot többször kell elvégezni egymás után. [/quote]
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: kurta999 - 2011. március 01. - 21:31:54
BUMP!
Tudnál írni a do-while-s ciklusra egy konkrét példát, ahol jobb a használata, mint a többinek ?
Mert nemtom eldönteni, hogy hol jobb az. Mivel a végeredmény \"ugyanaz\".
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: ChuckNorris - 2011. március 01. - 21:39:26
Nem ugyan az.
A do-while ciklus akkor jó,ha egy eseményt úgy akarunk ismételni,hogy egyszer mindenképpen lefusson.
Szóval:
 

new i = 1;
do
{
i++;
} while(i >= 1)

 
Így az i értéke már egy,de a ciklus egyszer mégis lefut,mert hátul teszteli a feltételt,így az i értéke 2 lesz.
Még egyszer tömören: Ha azt akarjuk,hogy a ciklus legalább egyszer mindenképpen lefusson,akkor is ha a feltétel már teljesült.
Ha így használtuk volna:
 

new i = 1;
do
{
i++;
} while(i != 1)

 
Akkor végtelen ciklust kapnánk,mert 2bõl soha nem lesz 1 ha csak növeljük a változót.
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: Jim - 2011. március 02. - 16:59:36
Elolvastam a leírást nekem tetszik. Mondjuk a while ciklus kicsit fölösleges szerintem a SAMP ba. Ha kicsif ifezünk és for ciklust használunk akkor gyorsabb lesz a módunk, de a megírási idõ is kicsit növekszik. De mondjuk ez ember és szerverfüggõ.
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: ChuckNorris - 2011. március 02. - 18:10:18
Idézetet írta: Jim date=1299081576\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"2912\" data-ipsquote-contentclass=\"forums_Topic
Elolvastam a leírást nekem tetszik. Mondjuk a while ciklus kicsit fölösleges szerintem a SAMP ba. Ha kicsif ifezünk és for ciklust használunk akkor gyorsabb lesz a módunk, de a megírási idõ is kicsit növekszik. De mondjuk ez ember és szerverfüggõ.
 
while ciklus nélkül pl. hogy olvasnál fájlt?
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: Jim - 2011. március 02. - 18:22:20
Idézetet írta: ChuckNorris date=1299085818\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"2912\" data-ipsquote-contentclass=\"forums_Topic


Elolvastam a leírást nekem tetszik. Mondjuk a while ciklus kicsit fölösleges szerintem a SAMP ba. Ha kicsif ifezünk és for ciklust használunk akkor gyorsabb lesz a módunk, de a megírási idõ is kicsit növekszik. De mondjuk ez ember és szerverfüggõ.
 
while ciklus nélkül pl. hogy olvasnál fájlt?
 
[/quote]
Ezt elismerem ebbe nálad a pont. De azon kívül nincs más nagy haszna (szerintem).
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: kurta999 - 2011. március 02. - 18:28:29
De van, nagyon is. Az ilyen helyekre jobb, mint a for.
While = Ameddig.
pl:
while(fread(...))
while(mysql_fetch_row(...))
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: Jim - 2011. március 02. - 18:55:37
Úgy látszik vita téma lesz ebbõl. Én még kitartok a magam igaza mellett de a vita rontja a közösség értékét tehát abbahagyom.
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: ChuckNorris - 2011. március 02. - 21:18:10
Vita = Érvelés,ellenérvelés
A veszekedés tiltott,az érvelés nem  :)
Különben,while ciklus nélkül te hogy írnál regisztrációs rendszert?A for ciklussal számolgatnád a sorokat?  :D
Vagy pl ezt old meg más mijen ciklussal:
 

new v = 100;
while(v != 50)
{
v--;
}

 
Ezt úgy kéne elképzelni,hogy a változónak nem ismerjük az értékét de le akarjuk csökkenteni 50 re,így készülnek az In-Game creator cucok,banda zóna létrehozók meg a textdraw makerek is. stb...
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: TengeriMalac - 2011. március 10. - 07:21:11
Szép, ahogy olvastam.. Csak szemet szúr a sok írási hiba.
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: ChuckNorris - 2011. március 10. - 14:09:45
Idézetet írta: TengeriMalac date=1299738071\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"2912\" data-ipsquote-contentclass=\"forums_Topic
Szép, ahogy olvastam.. Csak szemet szúr a sok írási hiba.
 
Köszi,de már elég rég írtam,szóval majd átnézem.  :shy:
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: ►ѕтa - 2011. március 10. - 15:00:04
Ne fáradozz Chuck, a nagy részét már átírtam. Amúgy jó leírás, régen innen tanultam meg.
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: ChuckNorris - 2011. március 10. - 15:18:30
Idézetet írta: staR date=1299765604\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"2912\" data-ipsquote-contentclass=\"forums_Topic
Ne fáradozz Chuck, a nagy részét már átírtam. Amúgy jó leírás, régen innen tanultam meg.
 
:heart:
Köszi   :)
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: SoAP - 2011. március 17. - 21:06:47
Tökéletes leírás :D Szép munka és grat  :amazed: Tanultam belõle  :shy:
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: ChuckNorris - 2011. március 17. - 21:10:56
Idézetet írta: SoAP date=1300392407\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"2912\" data-ipsquote-contentclass=\"forums_Topic
Tökéletes leírás :D Szép munka és grat  :amazed: Tanultam belõle  :shy:
 
Köszönöm  :)
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: palesz_88 - 2011. május 27. - 19:11:53
Hát nekem ez kicsit magas, de kezdem kapisgálni :D
 
for(new allplayers = 0; allplayers < MAX_PLAYERS; allplayers++)
{
    SendClientMessage(allplayers, céklakek, \"Ezt most elküldem az összes játékosnak\");
}

Ezt most fejbõl irtam, hibás?
Meg mit jelent a ++?
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: TengeriMalac - 2011. május 27. - 19:32:24
Hozzáad az elõzõ értékhez 1et
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: kurta999 - 2011. május 27. - 19:36:47
Vagy: allplayers = allplayers + 1 :D
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: krisk - 2011. június 26. - 11:26:32
Írhatnál példát egy végtelen ciklusra is.
 

while(1) { }
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: ChuckNorris - 2011. június 26. - 17:55:36
Idézetet írta: krisk date=1309080392\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"2912\" data-ipsquote-contentclass=\"forums_Topic
Írhatnál példát egy végtelen ciklusra is.
 

while(1) { }

 

Nem pont így,de említettem hogyha nem növeljük az értéket a while ciklusnál végtelen ciklust kapunk  :)
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: krisk - 2011. június 26. - 21:14:25
Idézetet írta: ChuckNorris date=1309103736\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"2912\" data-ipsquote-contentclass=\"forums_Topic


Írhatnál példát egy végtelen ciklusra is.
 

while(1) { }

 

Nem pont így,de említettem hogyha nem növeljük az értéket a while ciklusnál végtelen ciklust kapunk  :)
 
[/quote]
Elnézést, ez felett elsíklott a figyelmem, Ismét gratulálok a leíráshoz.
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: ChuckNorris - 2011. június 26. - 21:41:52
Idézetet írta: krisk date=1309115665\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"2912\" data-ipsquote-contentclass=\"forums_Topic


 

Írhatnál példát egy végtelen ciklusra is.
 

while(1) { }

 

Nem pont így,de említettem hogyha nem növeljük az értéket a while ciklusnál végtelen ciklust kapunk  :)
 
[/quote]
Elnézést, ez felett elsíklott a figyelmem, Ismét gratulálok a leíráshoz.
 
[/quote]
Np,emberbõl vagyunk,és köszi ismét  ;)
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: kurta999 - 2011. június 30. - 09:43:41
Én még azt nem értem, hogy mért mindenki ( Egypáran nem, de sokan ) a ciklus alatt hozzák létre az új változót ?
Ez szerintem elég nagy hülyeség, mert feleslegesen foglal le ( Pl ) 500-szor memóriát és szabadít fel. Feleslegesen lassít.
Én mindig létrehozom a ciklus felett, aztán a ciklusban csak nullázom. Szerintem ez sokkal jobb, és gyorsabb is.
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: ChuckNorris - 2011. június 30. - 11:39:27
Az szerintem betudható akár hibának is,mivel leterheli a memóriát teljesen feleslegesen.
Szóval én is mindenkinek kurta módszerét ajánlom. A kezdõknek le is írom:
Rossz módszer:
 

for(new i;i<500;i++)
{
    new a,b,c,d;
    GetPlayerHealth(i,a);
    GetPlayerArmour(i,b);
    //stbstb
}

 
Jó módszer:
 

new a,b,c,d;
for(new i;i<500;i++)
{
    GetPlayerHealth(i,a);
    GetPlayerArmour(i,b);
    //stbstb
}

 
Meg egy másik témában (Fade alternatív ciklusával) Zsolesszka írta, hogy a ciklusok gyorsabbak ha a ciklusban növeljük az értéket.Pl:
 

new player=0;
for( ; player++ != MAX_PLAYERS; ) SetPlayerHealth(player,0);

 
Elvileg gyorsabban lefut,persze ezt még mindig lehet variálni:
 

new player=0,max = GetMaxPlayers();
for( ; player++ != max ; ) SetPlayerHealth(player,0);

 
És itt még nem ellenörzöm le hogy a játékos ID csatlakozva van-e... Szeretem a ciklusokat mert lehet õket variálni  ;)
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: Sheet - 2011. június 30. - 11:54:43
Idézetet írta: ChuckNorris date=1309426767\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"2912\" data-ipsquote-contentclass=\"forums_Topic
Jó módszer:
 

new a,b,c,d;
for(new i;i<500;i++)
{
    GetPlayerHealth(i,a);
    GetPlayerArmour(i,b);
    //stbstb
}

 

ez nem inkább[pawn] for(new i = 0; i < 500; i++)[/pawn]? vagy ennek nincs jelentõsége?
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: ChuckNorris - 2011. június 30. - 11:58:14
Teljesen mindegy,mivel a változó alap értéke 0 lesz ha létrehozod,felesleges beállítani neki  :)
Akár ezt is lehet csinálni:
[pawn]
new a,b,c,d,i;
for(;i<500;i++)
{
    GetPlayerHealth(i,a);
    GetPlayerArmour(i,b);
    //stbstb
}
[/pawn]
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: Sheet - 2011. június 30. - 11:58:50
Idézetet írta: ChuckNorris date=1309427894\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"2912\" data-ipsquote-contentclass=\"forums_Topic
Teljesen mindegy,mivel a változó alap értéke 0 lesz ha létrehozod,felesleges beállítani neki  :)
Akár ezt is lehet csinálni:
[pawn]
new a,b,c,d,i;
for(;i<500;i++)
{
    GetPlayerHealth(i,a);
    GetPlayerArmour(i,b);
    //stbstb
}
[/pawn]
 
Rendben, köszi a magyarázatot :)
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: krisk - 2011. július 24. - 18:18:04
Ez viszont érdekes. Lehet, hogy lassú a sok memória szabaddá tétel/lefoglalás, de viszont nagyobb stringeknél meg kell gondolni, hogy a CPU vagy a RAM? Bár ez csak az igénytelenül megírt scripteknél baj.
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: Xeon - 2011. augusztus 29. - 16:23:38
new player=0;
for( ; player++ != MAX_PLAYERS; ) SetPlayerHealth(player,0);
Végig olvastam és többet tudok mint elõtte, de ezt nem tudom felfogni. Mi a feltétel? Mikor állítja be a játékos életét 0 ra?
Cím: [ Leírás ]A ciklusokról (3 ciklus,példák,magyarázatok)
Írta: ChuckNorris - 2011. augusztus 31. - 18:12:52
Idézetet írta: Xeon date=1314627818\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"2912\" data-ipsquote-contentclass=\"forums_Topic
new player=0;
for( ; player++ != MAX_PLAYERS; ) SetPlayerHealth(player,0);
Végig olvastam és többet tudok mint elõtte, de ezt nem tudom felfogni. Mi a feltétel? Mikor állítja be a játékos életét 0 ra?
 
A ciklus középsõ része. Szóval ez:
player++ != MAX_PLAYERS
Képzeld el így:
 
if(player++ != MAX_PLAYERS)

 
Természetesen ez nem helyes,csak példaképpen.
A feltétel lemagyarosítva itt az,hogy a játékos id nem egyenlõ-e a MAY_PLAYERS definícióval.Ez alapból definiálva van és az értéke 500. Tehát a feltétel az,hogy amíg player változó nem egyenlõ 500-al. A ++ mûveleti jelek megnövelik a változó értékét minden mûvelet végén. Tehát minden játékos id-jén keresztül megy a folyamat. Ez kicsit pazarló,MAX_PLAYERS helyett én inkább így használnám:
 
new player=0,maxplayers=GetMaxPlayers();
for( ; player++ != maxplayers; ) SetPlayerHealth(player,0);