←  Tutoriale

AMXX.pl: Support AMX Mod X i SourceMod

»

Pętle

  • +
  • -
kaszewczyk's Photo kaszewczyk 04.02.2009

Witam, nie zauważyłem żeby było coś o pętlach więc postaram się przybliżyć ten temat.

Pętle są to podstawowe elementy każdego z języków programowania w tym również PAWN'a, w językach programowania wyróżniamy 3 typy pętli:
- for
- while
- do,while
lecz jak na razie nie spotkałem się w PAWN'ie z pętlą typu do,while.
Pętle odpowiadają za powtarzanie tego samego bloku kodu n ilość razy gdzie liczba n ustalana jest przez programistę. No dobra teraz pewnie się pytasz po co mam powtarzać kilka razy ten sam kod? i jakie będę czerpał z tego korzyści? teraz proponuje zadać sobie kolejne pytanie! czy jestem masochistą czy nie?! wyobraź sobie sytuację kiedy daną masz 100 elementową tablicę, a twoim zadaniem jest w każdej komórce tej tablicy wpisać 1 więc teraz siedź i klep
new tab[100] ={1,1,1,1,1,...,1}
to się właśnie nazywa masochizm i tu z pomocą przychodzą nam właśnie pętle:

Pętla FOR
Pętla for podobnie jak wszystkie pozostałe pętle umożliwi nam powtórzenie określonych operacji tak długo jak warunek końcowy jest spełniony.

pseudokod:
for(stan_początkowy;warunek_konczoncy;zmianny_po_obrocie_petli)
{
  ciało pętli tu umieszczamy instrukcje które mają być powtarzane przy każdym obrocie pętli
}
Uwaga!!!:
stanów początkowych jak i zmian po obrocie pętli może być kilka lub nawet kilkanaście wtedy oddzielamy je przecinkami.

teraz trochę praktyki i rozwiązanie naszego problemu problemu
new i;
new tab[100];
for(i=0;i<100;i++)
{
  tab[i]=1;
}
prawda że dużo prościej i wygodniej a ile zaoszczędziliśmy czasu!
Analiza:
1: deklarujemy zmienną i;
2. deklarujemy tablicę 100 elementową;
3. zaczynamy pętle jako stan początkowy ustawiamy 0 ponieważ tablice są indexowane właśnie od zera; jako warunek końcowy ustawiamy że wartość zmiennej i ma być mniejsza od 100 ponieważ nasza tablica zawiera 100 komórek, i teraz ustalamy co ma się dziać po każdym obrocie pętli czyli zwiększamy wartość zmiennej i o jeden żeby nie przeoczyć żadnej komórki!
4. otwieramy ciało pętli
5. ponieważ za zadanie mamy wstawić 1 w komórki tablicy więc piszemy nazwę tablicy na jakiej chcemy operować jako nr indexu ustalamy zmienną i aby po każdym obrocie zmieniała nam się komórka i do każdej przypisujemy 1
6. zamykamy ciało pętli

Jeżeli zrozumiałeś działanie pętli for powinieneś również zrozumieć poniższy dowcip

Zona wysyla meza-programiste do sklepu:
- Kup parowki, jak beda jajka, to kup 10.
Maz w sklepie:
- Sa jajka?
- Tak.
- To poprosze 10 parowek.


Pętla WHILE
Jeśli zastanawiasz się, czy warto poznawać kolejny rodzaj pętli, to rzeczywiście twoje wątpliwości nie są bezpodstawne. Musisz wiedzieć, że za pomocą wszystkich pętli można wykonać w zasadzie te same działania.
Po co zatem uczyć się kilku typów, skoro można by było tylko jednego? Odpowiedź jest prosta - dla wygody. To co za pomocą jednego typu pętli można wykonać bardzo prosto, niekiedy wymaga przekształceń, aby zadziałało dokładnie tak samo przy użyciu innej pętli.

Pętla while podobnie jak pętla for oraz jak pętla do while umożliwia powtarzanie instrukcji tak długo jak warunek końcowy jest spełniony.
pseudokod
while (warunek_konczoncy)
{ 
  ciało pętli tu umieszczamy instrukcje które mają być powtarzane przy każdym obrocie pętli
} 

trochę praktyki:
new i=0;
new tab[100]
while(i<100)
{
  tab[i]=1;
  i++;
}
Analiza:
1. definicja zmiennej i zerem bo tablice są indexowane właśnie od 0;
2. deklaracja tablicy 100 elementowej;
3 zaczynamy pętle while i ustalanie warunki jaki musi być spełniony żeby pętla się wykonywała, warunek jest jeden ale może być bardzo złożony za pomocą operatorów logicznych;
4. otwarcie ciała pętli;
5. ponieważ za zadanie mamy wstawić 1 w komórki tablicy więc piszemy nazwę tablicy na jakiej chcemy operować jako nr indexu ustalamy zmienną i aby po każdym obrocie zmieniała nam się komórka i do każdej przypisujemy 1;
6. zwiększamy zmienną i o jeden aby nie pominąć żadnej komórki;
7. zamykamy ciało pętli;

Pętla DO,WHILE
Pętla do while podobnie jak pętla for i podobnie jak wszystkie pozostałe pętle, umożliwi nam powtórzenie określonych operacji tak długo jak warunek końcowy jest spełniony. Tylko w przypadku tej pętli najpierw wykonywany jest blok instrukcji a dopiero później sprawdzany jest warunek.

pseudokod
do
{
  ciało pętli tu umieszczamy instrukcje które mają być powtarzane przy każdym obrocie pętli
}
while (warunek_konczoncy)

i trochę praktyki:
new i=0;
new tab[100];
do
{
  tab[i]=1;
  i++;
}
while(i<99)
Analiza:
1. definicja zmiennej i zerem;
2. deklaracja tablicy 100 elementowej;
3. zaczynamy pętlę do,while;
4. otwieramy ciało pętli;
5. ponieważ za zadanie mamy wstawić 1 w komórki tablicy więc piszemy nazwę tablicy na jakiej chcemy operować jako nr indexu ustalamy zmienną i aby po każdym obrocie zmieniała nam się komórka i do każdej przypisujemy 1;
6. zwiększamy zmienną i o jeden aby nie pominąć żadnej komórki;
7. zamykamy ciało pętli
8. sprawdzamy warunek kończący pętlę zauważmy że kończymy przy liczbie 99 a nie 100 ponieważ w tego rodzaju pętli najpierw wykonywane są instrukcje! więc przy sprawdzaniu warunku wartość i nie jest 0 tylko 1!

uff to chyba ba tyle :ganja: jak coś pominąłem albo popełniłem błąd a nie wyłapałem tego to piszcie.
STOP masochistom!

edit- @Miczu nie wiedziałem że się zerują i mi nawet przez myśl nie przeszło że tak może być, poprawione.
Quote

  • +
  • -
Miczu's Photo Miczu 04.02.2009

Hehe... doczytam reszte pozniej, ale:

W pawnie zmienne przy deklarowaniu sa zerowane. Mozna sprawdzic jak cos ;)
Quote

  • +
  • -
darkman's Photo darkman 04.02.2009

najs stigu ;-)
Quote

  • +
  • -
Sharkmen's Photo Sharkmen 14.04.2010

dzięki Bardzo mi sie to przydalo do Pluginu :)
Quote

  • +
  • -
Fixxor's Photo Fixxor 08.05.2010

Ładnie opisane wszystko, nawet ja zrozumiałem (początkujący) więc opisane tak łatwo dla zielonych także ;P
Dzięki tobie wiem już do czego służą pętle
Quote

  • +
  • -
Sharkmen's Photo Sharkmen 21.01.2011

Dawno już nie pisałem i teraz nie rozumiem pętli While ;|
Edited by Sharkmen, 21.01.2011 06:32.
Quote

  • +
  • -
diablix's Photo diablix 24.05.2011

while (warunek_konczoncy)


Kończący to nie koniecznie, przecież pętla while może sie wykonywać nawet milion razy jeżeli warunek będzie zawsze prawdziwy
Quote

  • +
  • -
R3X's Photo R3X 24.05.2011

tak się dzieje właśnie dlatego, że (warunek_konczoncy) nigdy nie jest spełniony :)
Quote

  • +
  • -
DarkGL's Photo DarkGL 24.05.2011

tak
wogole to kompilator ostrzega przed taka konstrukcja
while(true)
Quote

  • +
  • -
ParadisO's Photo ParadisO 23.09.2011

w językach programowania wyróżniamy 3 typy pętli

jeszcze występuje pętla "repeat" języku pascal
Quote

  • +
  • -
R3X's Photo R3X 23.09.2011

to jest odpowiednik do{}while();
Quote