Petlje (Loops) - while, for, do-while, if-goto
• Šta su petlje?
Petlje su među najosnovnijim i najmoćnijim konceptima programiranja. Petlja u računarskom programu je instrukcija koja se ponavlja sve dok se ne postigne određeni uslov.
U strukturi petlje, petlja postavlja pitanje. Ako odgovor zahteva akciju, ona se izvršava. Isto pitanje se postavlja iznova i iznova sve dok ne bude potrebno dalje preduzimanje mera.
Svaki put kada se postavi pitanje naziva se iteracija.
• Da li to važi i u pawn jeziku?
Da, samo se razlikuju tipovi - while, for, do-while, if-goto.
• Tipovi petlje i njihova funkcija
"while" petlje rade nešto dok je navedeni uslov tačan. Uslov je potpuno istog formata kao uslov u statementu if, samo se više puta proverava i kod se izvršava ako je uslov tačan svaki put kada se proverava.
new
a = 9;
while (a < 10)
{
// Kod unutar while petlje
a++;
}
// Kod nakon petlje
Ovaj kod će proveriti da li je 'a' manje od 10. Ako jeste, izvršavaće se kod unutar zagrada (a++;), povećavajući tako vrednost 'a'. Kada se dostigne kraj petlje, izvršenje koda se vraća nazad na proveru i ponavlja se, ovaj put provera neće uspeti jer 'a' već ima vrednost 10 (prethodno definisana vrednost joj je 9) i onda se petlja automatski preskače te se nastavlja kod koji se nalazi nakon nje. Ako je 'a' počelo kao 8, kod bi se pokrenuo dva puta, ako je od 7 onda tri puta, i tako u krug sve dok se ne dostigne željena vrednost.
"for" petlja je u suštini "compressed" while" petlja. "for" statement ima tri odeljka: inicijalizacija, uslov i finalizacija. Kao petlja "for", gornji primer petlje "while" bi bio napisan:
for (new a = 9; a < 10; a++)
{
// Kod unutar for petlje
}
// Kod nakon petlje
Na primer, ovo je jednostavan kod da petlja "prođe" kroz sve igrače:
for(new i,a = GetMaxPlayers(); i < a; i++)
{
if(IsPlayerConnected(i))
{
// Neki kod za izvršenje
}
}
Bilo koji od uslova u zagradi se može izostaviti tako što ne unesemo kod unutar zagrade.
new
a = 9;
for ( ; a < 10; )
{
// Kod unutar for petlje
a++;
}
// Kod nakon petlje
Ovaj primer čini malo lakšim da pokaže kako se petlja "for" podudara sa petljom "while". Postoje dve vrlo male razlike između dve date "for" petlje. Prvi je da drugi primer deklariše "a" van petlje, što znači da se može koristiti van petlje, u prvom primeru scope-a "a" (odeljak koda za koji postoji promenljiva) je samo unutar petlje. Druga razlika je u tome što se a++ u drugom primeru zapravo izvršava malo pre a++ u prvom primeru, 99% vremena ovo ne čini nikakvu razliku, jedino je važno kada koristite 'continue' (continue u osnovi preskače iteraciju petlje), 'continue' će pozvati a++ u prvom primeru, ali će ga preskočiti u drugom primeru.
"do-while" petlja je "while" petlja gde uslov dolazi posle koda unutar petlje umesto pre. To znači da će se kod iznutra uvek izvršavati najmanje jednom jer se to radi pre nego što se provera završi:
new
a = 10;
do
{
// Kod unutar do-while petlje
a++;
}
while (a < 10); // Obratite pažnju na tačku zarez (;)
// Kod nakon petlje
Da je to bila standardna "while" petlja, promenljiva "a" se ne bi povećavala jer je provera (a < 10) lažna, ali ovde se povećava pre te provere. Ako bi "a" počela kao 9, petlja bi takođe bila izvršena samo jednom. Ako bi počela kao 8, petlja bi bila izvršena dvaput itd...
"if-goto" - Ovo je u suštini neka "zamena" za petlje gore, upotreba goto je generalno izostavljena, međutim zanimljivo je videti šta tačno ta petlja radi:
new
a = 9;
loop_start:
if (a < 10)
{
// Kod unutar petlje
a++;
goto loop_start;
}
// Kod nakon petlje
Ovaj način petlje je jako slabo zastupljen, i ne koristi se tako često, iako je zanimljiv princip njegove funkcije.
"OBOE" je skraćenica od Off By One Error. Ovo je vrlo česta greška kada se petlja izvodi previše ili nekoliko puta. Na primer:
new
a = 0,
b;
while (a <= sizeof (b))
{
b = 0;
}
Ovaj veoma jednostavan primer demonstrira jedan od najčešćih OBOE-a, na prvi pogled ljudi mogu pomisliti da će ovo proći kroz sve sadržaje b i postaviti ih na 0, međutim ova petlja će se zapravo pokrenuti 11 puta i pokušati pristupiti b, što ne postoji (to bi bio 11. slot u b počevši od 0), tako da može izazvati razne probleme. Ovo je poznato kao Out Of Bounds error. (OOB).
Morate biti posebno obazrivi na OBOE kada koristite "do-while" petlje jer se UVEK pokreću bar jednom.
Hvala Vam što ste odvojili vreme da pročitate tutorijal.
Nadam se da ste skapirali kako petlje rade.
Nadam se da ste skapirali kako petlje rade.
Moguće su greške, ne zamerite. Ukoliko uočite nešto što je nepravilno, napišite u komentaru.
Ukoliko Vam treba dodatna pomoć oko petlji, napišite u komentaru ove teme (a ne privatne poruke).
Sve ovo možete da pronađete online, ili na alternativnim samp-wiki stranicama, ali evo i ovde za lenje osobe.
Ukoliko Vam treba dodatna pomoć oko petlji, napišite u komentaru ove teme (a ne privatne poruke).
Sve ovo možete da pronađete online, ili na alternativnim samp-wiki stranicama, ali evo i ovde za lenje osobe.


