Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Pętle


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
10 odpowiedzi w tym temacie

#1 kaszewczyk

    Pomocny

  • Użytkownik

Reputacja: 13
Początkujący

  • Postów:42
Offline

Napisano 04.02.2009 10:00

*
Popularny

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.
  • +
  • -
  • 10

#2 Miczu

    Godlike

  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 04.02.2009 10:30

Hehe... doczytam reszte pozniej, ale:

W pawnie zmienne przy deklarowaniu sa zerowane. Mozna sprawdzic jak cos ;)
  • +
  • -
  • 0

#3 darkman

    Wszechwiedzący

  • Przyjaciel

Reputacja: 87
Zaawansowany

  • Postów:553
  • Lokalizacja:inactive
Offline

Napisano 04.02.2009 15:11

najs stigu ;-)
  • +
  • -
  • 0

#4 Sharkmen

    Pomocny

  • Użytkownik

Reputacja: 18
Początkujący

  • Postów:70
  • GG:
  • Imię:Przemek
  • Lokalizacja:Byczyna
Offline

Napisano 14.04.2010 16:23

dzięki Bardzo mi sie to przydalo do Pluginu :)
  • +
  • -
  • 0

Dołączona grafika


#5 Fixxor

    Początkujący

  • Użytkownik

Reputacja: 0
Nowy

  • Postów:12
  • Lokalizacja:Częstochowa
Offline

Napisano 08.05.2010 12:10

Ł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
  • +
  • -
  • 0
CsMods.pl & Amxx.pl
CsMods.pl & Amxx.pl
CsMods.pl & Amxx.pl
CsMods.pl & Amxx.pl
CsMods.pl & Amxx.pl
CsMods.pl & Amxx.pl

#6 Sharkmen

    Pomocny

  • Użytkownik

Reputacja: 18
Początkujący

  • Postów:70
  • GG:
  • Imię:Przemek
  • Lokalizacja:Byczyna
Offline

Napisano 21.01.2011 06:31

Dawno już nie pisałem i teraz nie rozumiem pętli While ;|

Użytkownik Sharkmen edytował ten post 21.01.2011 06:32

  • +
  • -
  • 0

Dołączona grafika


#7 diablix

    emeryt

  • Przyjaciel

Reputacja: 507
Wszechwiedzący

  • Postów:663
  • GG:
  • Steam:steam
  • Imię:Daniel
  • Lokalizacja:Warszawa
Offline

Napisano 24.05.2011 10:19

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
  • +
  • -
  • 0

#8 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 24.05.2011 10:41

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

#9 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 553
Godlike

  • Postów:11 976
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 24.05.2011 12:52

tak
wogole to kompilator ostrzega przed taka konstrukcja
while(true)
  • +
  • -
  • 0

#10 ParadisO

    Wszechmogący

  • Power User

Reputacja: 128
Zaawansowany

  • Postów:689
  • Lokalizacja:Częstochowa
Offline

Napisano 23.09.2011 20:03

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

jeszcze występuje pętla "repeat" języku pascal
  • +
  • -
  • 0

#11 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 23.09.2011 21:43

to jest odpowiednik do{}while();
  • +
  • -
  • 0




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych