PARTNERI:

Marketing


-UPOZORENJE-

Samo registrovani članovi mogu da vide/koriste forum u celini.
Prijavite se ili registrujte nalog na Balkan SA-MP forumu.


Autor Tema: [Tutorial] Loops - while, for, do-while, if-goto  (Pročitano 403 puta)

0 članova i 1 gost pregledaju ovu temu.

Van mreže Vasic

Loops - while, for, do-while, if-goto
« poslato: Mart 11, 2022, 17:53:53 posle podne »
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.

Pawno Code: [Izaberi]
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:

Pawno Code: [Izaberi]
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:

Pawno Code: [Izaberi]
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.

Pawno Code: [Izaberi]
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:

Pawno Code: [Izaberi]
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:

Pawno Code: [Izaberi]
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:

Pawno Code: [Izaberi]
new
a = 0,
b[10];
while (a <= sizeof (b))
{
b[a] = 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[10], š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.

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.
« Poslednja izmena: Mart 11, 2022, 17:55:29 posle podne Vasic »
• Website: www.vasic.dev
Cyber Security Enthusiast
 
Korisnici koji su se zahvalili: neshallon

Van mreže Deleted User

Odg: Loops - while, for, do-while, if-goto
« Odgovor #1 poslato: Mart 11, 2022, 18:59:13 posle podne »
Top brate, sad vise ne objasnjavam petlje 15x nego link pa neka citaju sami.
Jos bih dodao da se svaka petlja moze prekinuti uz pomoc break ili return. Break ce da prekine petlju i da nastavi kod, dok return prekida trenutnu funkciju kao i obicno.
Takodje trenutna iteracija se moze prekinuti i vratiti na pocetak petlje uz continue naredbu.

I da, goto iskreno po meni ne pripada u pelje (iako se petlja moze napraviti sa goto/jmp - sta vise svaki loop je koristi u masinskom kodu), to je obicna jump naredba i njena funkcija je da preskoci na odredjeni deo koda. Takodje tu naredbu ne preporucujem nikome da koristi, postoje dobri razlozi zasto je obsolete i noviji jezici je ne implementiraju.
 
Korisnici koji su se zahvalili: Vasic, neshallon

Na mreži neshallon

Odg: Loops - while, for, do-while, if-goto
« Odgovor #2 poslato: Mart 11, 2022, 19:44:15 posle podne »
Lepo odradjeno, lepo pojasnjeno  :)
The future belongs to your dream

Offline Forever
 
Korisnici koji su se zahvalili: Vasic

Van mreže Vasic

Odg: Loops - while, for, do-while, if-goto
« Odgovor #3 poslato: Mart 11, 2022, 19:48:05 posle podne »
Top brate, sad vise ne objasnjavam petlje 15x nego link pa neka citaju sami.
Jos bih dodao da se svaka petlja moze prekinuti uz pomoc break ili return. Break ce da prekine petlju i da nastavi kod, dok return prekida trenutnu funkciju kao i obicno.
Takodje trenutna iteracija se moze prekinuti i vratiti na pocetak petlje uz continue naredbu.

I da, goto iskreno po meni ne pripada u pelje (iako se petlja moze napraviti sa goto/jmp - sta vise svaki loop je koristi u masinskom kodu), to je obicna jump naredba i njena funkcija je da preskoci na odredjeni deo koda. Takodje tu naredbu ne preporucujem nikome da koristi, postoje dobri razlozi zasto je obsolete i noviji jezici je ne implementiraju.
edit:
ne zeli da mi posalje poruku kako treba, forum ima neki waf pa blokira request

ugl. da, i ja sam bas razmisljao o break i return ali sam zaboravio posle da dodam. Sad je malo kasno, a ovde sam u komentaru ispisao ali nesto nece da mi prihvati request, valjda WAF blokira, ne znam zbog cega.
Sto se tice continue naredbe, u kratkim crtama je opisana negde u tutorijalu, znam da sam je stavio.
« Poslednja izmena: Mart 11, 2022, 19:52:14 posle podne Vasic »
• Website: www.vasic.dev
Cyber Security Enthusiast
 

Van mreže .fuck

Odg: Loops - while, for, do-while, if-goto
« Odgovor #4 poslato: Mart 13, 2022, 02:32:12 pre podne »
iskreno top odradjeno i detaljno objasnjeno  8)
>> fucking (with style) in process.
- Respect for : @Galardo | @V0ID | @bunta | @Muma | @__vedran.xyz77 |@LoOdak |
 
Korisnici koji su se zahvalili: Vasic

Van mreže MadeMan1106

Odg: Loops - while, for, do-while, if-goto
« Odgovor #5 poslato: Mart 13, 2022, 12:54:02 posle podne »
Lijepo :)
2016 - 2022 -- Offline
 
Korisnici koji su se zahvalili: Vasic