Skocz do zawartości

4. Pętle


# CSH External VIP Project

Masz dosyć problemów z czynnikiem zaufania w CS2 lub notorycznymi banami?

Sprawdź CSH External VIP Project.


Więcej informacji  

Rekomendowane odpowiedzi

Kolejny temat o którym znajdziecie pełno informacji we wszystkich kursach programowania

Prosiłbym byście czytali całe tematy kursu a nie tylko pierwszy post bo ja też się mylę i czasami o czymś zapomnę, a kontynuacje zazwyczaj można znaleźć w kolejnych postach.

 

Pętle to taki bajer, który wykonuje jakąś część programu dopóki nie rozkażemy mu przestać. Załóżmy, że chcemy by program wypisał nam liczby parzyste do 100 i zamiast pisać coś takiego:

$zmienna=0
$zmienna=$zmienna+2
msgbox(0,"kolejna liczba parzysta jest równa:",$zmienna)
$zmienna=$zmienna+2
msgbox(0,"kolejna liczba parzysta jest równa:",$zmienna)
$zmienna=$zmienna+2
msgbox(0,"kolejna liczba parzysta jest równa:",$zmienna)
$zmienna=$zmienna+2
msgbox(0,"kolejna liczba parzysta jest równa:",$zmienna)
$zmienna=$zmienna+2
msgbox(0,"kolejna liczba parzysta jest równa:",$zmienna)
$zmienna=$zmienna+2
msgbox(0,"kolejna liczba....

i tak dalej jeszcze z kilkadziesiąt razy
możemy wstawić to:

$zmienna=$zmienna+2
msgbox(0,"kolejna liczba parzysta jest równa:",$zmienna)
w pętlę która zakoączy się gdy $zmienna będzie równa 100

 

chyba załapaliście o co biega więc zaczniemy od pierwszej pętli (są ich 3 o ile pamiętam, a jeśli się mylę to pewnie stanley_p mnie poprawi ), która nazywa się Do...Until

Do
...instrukcje...
Until ...argument koączący...
Ta pętla wykonuje się dopóki nie spełni się(nie będzie się zgadzał) argument koączący. Pokaże wam to na przykładzie o którym mówiłem na początku:

$zmienna=0
Do
$zmienna=$zmienna+2
msgbox(0,"kolejna liczba parzysta jest równa:",$zmienna)
Until $zmienna=100
krótsze od poprzedniego, a działa tak samo nieprawdaż? Zresztą sami sprawdźcie jak działa

Zauważcie że deklaracja zmiennej występuje przed pętlą Dlaczego? Ponieważ gdybyśmy ją umieścili w pętli to pętla nigdy by się nie zakoączyła (no chyba że wyłączylibyśmy program)

a $zmienna byłaby raz równa 0 a drugi raz równa 2. Myślę że zauważyliście dlaczego tak by się stało. Jeśli nie, to spróbujcie wstawić deklarację zmiennej do pętli i przeanalizujcie kod linijka po linijce. Sprawdzajcie co będzie się działo ze zmienną w kolejnych pętlach. Jeśli także nie wiecie gdzie zaznaczyliśmy, że pętla ma koączyć się gdy zmienna osiągnie wartość 100, to zwróćcie uwagę na ostatnią linijkę:

Until $zmienna=100
Gdybyśmy mięli to przetłumaczyć, to tłumaczenie brzmiałoby tak: Dopóki $zmienna nie będzie równa 100 wykonuj pętle.

 

Myślę, że zrozumieliście o co chodzi. Teraz zajmiemy się kolejną pętlą czyli While...WEnd:

While ...argument trwania pętli...
...instrukcje...
WEnd
Jest to podobna pętla do poprzedniej. Różni się tym, że ta pętla trwa tylko wtedy gdy argument jest spełniony(poprzednia, gdy argument był spełniony, koączyła się). Podam poprzedni przykład(z liczbami parzystymi) wykorzystując pętle While:

$zmienna=0
While $zmienna<>100
$zmienna=$zmienna+2
msgbox(0,"kolejna liczba parzysta jest równa:",$zmienna)
WEnd
Jak widzicie tutaj kluczowe znaczenie ma linijka druga czyli początek pętli. W niej zawarte jest kiedy pętla zakoączy się. Pamiętacie jeszcze ten <> operator? Oznacza on "różne". Tłumaczmy więc: "Dopóki zmienna jest różna od 100 wykonuj pętle". Jak mówiłem różnica niewielka. Właściwie nie spotkałem się jeszcze z takim przykładem gdzie nie mógłbym zastosować tych dwóch pętli (Do i While) zamiennie.

 

Czas na ostatnią pętle (chyba najbardziej skomplikowaną) czyli For...Next w skrócie. Wygląda ona tak:

For ...zmienna... To ...Liczba koącząca... Step ...inkr/dekr...
...instrukcje...
Next
Ta pętla różni się dość mocno od poprzednich. Zmienna (od której zależy jak długo będzie trwała pętla) może przyjmować teraz tylko wartości numeryczne (w poprzednich pętlach zmienna ta mogła zawierać liczby i ciągi znaków). To jak długo będzie trwała pętla zależy od pierwszej linijki. Jeśli nie wiecie co to jest...inkr/dekr... to wam wytłumaczę. W innych językach programowania używa się pojęć inkrementacja i dekrementacja(w AutoIT nie spotkałem się z nimi). Oznaczają one analogicznie dodawania(inkr.) lub odejmowania(dekr.) zawartości zmiennej o 1. Dałem taką nazwę by skojarzyło nam się, że Step służy do dodawania lub odejmowania liczb od zmiennej (nie tylko o 1 ale i o inne wartości). Najpierw wykonam nasz przykład dla całej lekcji za pomocą pętli for...next:

For $zmienna=0 To 100 Step +2
msgbox(0,"kolejna liczba parzysta jest równa:",$zmienna)
Next
Tłumaczenie: Dla zmiennej $zmienna równej 0 aż do osiągnięcia wartości 100 wykonuj instrukcje, przy czym po każdej pętli dodawaj do zmiennej liczbę 2. Trochę pomieszane, ale myślę, że załapiecie o co chodzi. Jeśli nie to odsyłam do kursów w innych językach programowania. Jak zapewne zauważyliście zmienna deklarowana jest podczas tworzenia pętli (jest to zmienna lokalna i działa tylko w tej pętli dzięki czemu możemy użyć tej samej nazwy zmiennej poza pętlą i będzie ona mogła przyjmować inne wartości choć nazwę będzie miała tą samą). Brakuje też części kodu:

$zmienna=$zmienna+2
ponieważ jest ona jakby zawarta w momencie Step +2. Jestem pewien że już wiecie o co chodzi w pętli For..Next. Nie będę jej już więcej omawiał, ponieważ nie wiem o czym mam mówić. Chyba wszystko na jej temat powiedziałem.

 

Wydawałoby się że to już wszystko o pętlach, ale jest jeszcze jedna rzecz. W pętlach możemy użyć dwóch komend:

ContinueLoop ;kontynuje pętle
ExitLoop ;wychodzi z pętli/przerywa pętle
nie będę tego omawiał gdyż to jest łatwe do zrozumienia. Napiszę tylko prosty program i zadaniem domowym będzie rozgryzienie jak on działa (analiza kodu):

;program podaje liczby parzyste do 200 i co 10 liczb pyta się czy ma podawac dalej
$LicznikLiczb=0
For $zmienna=0 to 200 step +2
MsgBox(0,"kolejna liczba parzysta jest równa:",$zmienna)
$LicznikLiczb=$LicznikLiczb+1
If $LicznikLiczb=10 Then
$msg=MsgBox(4,"Zapytanie:","Kontynuować program?")
$LicznikLiczb=0
If $msg=7 Then
ExitLoop
Else
ContinueLoop
EndIf
EndIf
Next
Jest jedna rzecz której możecie nie wiedzieć. Funkcja MsgBox zwraca do zmiennej przycisk który wcisnął użytkownik. Jeśli wciśnie Tak to zwraca cyfrę 6, a jeśli wciśnie nie to zwraca 7. Dlatego właśnie wiem co wciśniecie bo funkcja MsgBox zwraca mi wciśnięty przycisk do zmiennej $msg. Resztę domyślcie się sami. Więcej na temat funkcji MsgBox poszukajcie w helpie w SciTE editorze.

 

Co powinieneś wiedzieć po tej lekcji:

- Co to są pętle, ile ich jest, i jak je stosować

- Co zwraca funkcja MsgBox do zmiennej

- (trochę ponad temat) Co to jest inkrementacja i dekrementacja.

Pozdrawiam,

Yubasek.

Odnośnik do komentarza

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Regulamin. Polityka prywatności