Rozdział 4


Pętle

 

Podsumowanie

FOR, NEXT
TO
, STEP

 

Załóżmy, że chcesz wprowadzić pięć liczb i dodać je razem. Jednym ze sposobów (nie wprowadzaj tego, chyba że czujesz się zobowiązany) jest napisanie

 

  10 LET suma=0
  20 INPUT a
  30 LET suma=suma+a
  40 INPUT a
  50 LET suma=suma+a
  60 INPUT a
  70 LET suma=suma+a
  80 INPUT a
  90 LET suma=suma+a
100 INPUT a
110 LET suma=suma+a
120 PRINT suma

 

Taka metoda nie jest dobrą praktyką programowania. Można nad nią zapanować przy pięciu liczbach, lecz wyobraź sobie jak uciążliwy byłby taki program dla dziesięciu liczb, a dodanie w ten sposób stu i więcej liczb byłoby po prostu niemożliwe.

Dużo lepiej jest przygotować sobie zmienną, która będzie zliczać do 5 a następnie zatrzyma program. Robimy to tak (co już powinieneś wprowadzić do komputera):

 

10 LET suma=0
20 LET licznik=1
30 INPUT a
40 REM licznik=biezaca liczba odczytow a
50 LET suma=suma+a
60 LET licznik=licznik+1
70 IF licznik<=5 THEN GO TO 30
80 PRINT suma

 

Zauważ, jak łatwo można by zmienić wiersz 70 tak, aby program dodawał dziesięć liczb, a nawet sto i więcej.

Ten rodzaj zliczania jest tak użyteczny, że istnieją dwa specjalne rozkazy w celu jego ułatwienia: rozkazy FOR oraz NEXT. Zawsze używa się ich razem.

Używając ich, program dopiero co wpisany przez ciebie robi dokładnie to samo co poniższy

 

10 LET suma=0
20 FOR i=1 TO 5
30 INPUT a
40 REM i=biezaca liczba odczytow a
50 LET suma=suma+a
60 NEXT i
80 PRINT suma
 

(aby otrzymać ten program z poprzedniego, po prostu musisz wyedytować wiersze 20, 40, 60 i 70. TO otrzymujesz jako SYMBOL SHIFT z F)

Zwróć uwagę, że zmieniliśmy licznik na i. Zmienna zliczająca - lub zmienna sterująca - pętli FOR - NEXT musi posiadać jednoliterową nazwę.

Efektem tego programu jest przejście zmiennej i przez wartości 1 (wartość początkowa), 2, 3, 4 i 5 (granica), a dla każdej z nich zostają wykonane wiersze 30, 40 i 50. Następnie, gdy i zakończy swoje pięć wartości, jest wykonywany wiersz 80.

Dodatkowa subtelność leży w tym, iż ta zmienna sterująca nie musi się zmieniać za każdym razem co 1 w górę: możesz zmienić to 1 na jakąkolwiek inną pożądaną przez ciebie wartość za pomocą słowa STEP, które jest częścią składową rozkazu FOR. Najbardziej ogólna postać rozkazu FOR to

 

FOR zmienna sterująca = wartość początkowa TO granica STEP krok

 

gdzie zmienna sterująca jest pojedynczą literą, a wartość początkowa, granica oraz skok są czymś, co komputer może wyliczyć jako liczby - tak jak liczby same w sobie lub sumy czy nazwy zmiennych liczbowych. Zatem, jeśli zamienisz w programie wiersz 20 przez

 

20 FOR i=1 TO 5 STEP 3/2

 

to i przebiegnie przez wartości 1, 2.5 i 4. Zauważ, że nie musisz ograniczać się do liczb całkowitych, jak również wartość zmiennej sterującej nie musi dokładnie zrównać się z granicą - pętla będzie kontynuowana dopóki zmienna sterująca ma wartość mniejszą lub równą granicy.

Wypróbuj ten program, aby wypisać liczby od 1 do 10 w kolejności odwrotnej.

 

10 FOR n=10 TO 1 STEP -1
20 PRINT n
30 NEXT n

 

Przed chwilą powiedzieliśmy, że program kontynuuje pętlę dopóki zmienna sterująca ma wartość mniejszą lub równą granicy. Gdyby zastosować to do tego przypadku, dostalibyśmy nonsens. Zwykła reguła musi być zmodyfikowana: jeśli krok jest ujemny, to program kontynuuje pętlę tak długo jak zmienna sterująca jest większa lub równa granicy.

Musisz uważać, jeśli uruchomisz naraz dwie pętle FOR - NEXT jedna w drugiej. Wypróbuj ten program, który drukuje liczby dla pełnego zestawu kostek domina.

 

10 FOR m=0 TO 6
20 FOR n=0 TO m
30 PRINT m;":";n;" ";
40 NEXT n
50 PRINT
60 NEXT m


pętla n
pętla m

 

Musisz upewnić się, że pętla n jest w całości wewnątrz pętli m - są właściwie zagnieżdżone. Należy unikać tworzenia dwóch nakładających się pętli FOR - NEXT, z których żadna nie znajduje się w całości wewnątrz drugiej, jak poniżej:

 

  5 REM ten program jest zly
10 FOR m=0 TO 6
20 FOR n=0 TO m
30 PRINT m;":";n;" ";
40 NEXT m
50 PRINT
60 NEXT n


pętla m
pętla n

 

Dwie pętle FOR - NEXT muszą albo być jedna w drugiej, albo być zupełnie rozdzielone.

Inną rzeczą, której należy unikać, jest wskakiwanie do środka pętli FOR - NEXT z poza niej. Zmienna sterująca jest ustawiana poprawnie tylko po wykonaniu instrukcji FOR, a jeśli jej nie będzie, to następne polecenie NEXT wprawi komputer w zakłopotanie. Prawdopodobnie otrzymasz komunikat błędu NEXT without FOR (NEXT bez FOR) lub  variable not found (zmienna nie odnaleziona).

Nic nie stoi na przeszkodzie, abyś używał FOR - NEXT w rozkazie bezpośrednim. Na przykład, wypróbuj:

 

FOR m=0 TO 10: PRINT m: NEXT m

 

Możesz czasem użyć tego jako (nieco sztucznego) sposobu obejścia ograniczenia nie pozwalającego używać GO TO wewnątrz rozkazu bezpośredniego - ponieważ nie posiada on numeru wiersza. Na przykład:

 

FOR m=0 TO 1 STEP 0: INPUT a: PRINT a: NEXT m

 

Krok zero tutaj sprawia, że rozkaz powtarza się bez końca.

Tego typu rzeczy nie są właściwie zalecane, ponieważ w przypadku pojawienia się błędu tracisz ten rozkaz i musisz wpisać go ponownie - a CONTINUE nie zadziała.

 

Ćwiczenia

  1. Zmienna sterująca nie posiada jedynie nazwy i wartości, jak zwykła zmienna, lecz również granicę, krok oraz odwołanie do rozkazu za odpowiednim poleceniem FOR. Przekonaj się sam, że gdy komputer wykonuje rozkaz FOR, to cała ta informacja jest dla niego dostępna (używając wartości początkowej jako pierwszej wartości przyjmowanej przez zmienną), a również że ta informacja jest wystarczająca dla rozkazu NEXT, aby wiedzieć o ile należy zwiększyć wartość, kiedy skoczyć wstecz i także gdzie wykonać skok.
     
  2. Uruchom trzeci z kolei program z podanych u góry i wpisz

            PRINT c

    Dlaczego odpowiedź brzmi 6 a nie 5?
    (Rozwiązanie: rozkaz NEXT w wierszu 60 jest wykonywany pięć razy i za każdym razem do zmiennej c zostaje dodane 1. Przy ostatnim razie c otrzymuje wartość 6, a wtedy rozkaz NEXT decyduje już nie wracać na początek pętli, lecz kontynuować dalej program z c powyżej swojej granicy.)
    Co się stanie, jeśli w wierszu 20 umieścisz STEP 2?
     
  3. Zmień ten trzeci program tak, aby zamiast automatycznego dodawania pięciu liczb prosił cię, abyś wprowadził pożądaną liczbę dodawań. Gdy uruchomisz ten program, to co się stanie po wprowadzeniu doń liczby 0 oznaczającej, że nie chcesz dodawać liczb? Dlaczego można się po tym spodziewać problemów z komputerem, nawet jeśli jest zupełnie jasne, o co ci chodzi? (Komputer musi poszukać polecenia NEXT c, co zwykle nie jest konieczne.) W rzeczywistości wszystko zostało przewidziane w oprogramowaniu ZX Spectrum.
     
  4. W wierszu 10 czwartego programu z powyższych zmień 10 na 100 i uruchom ten program. Wyświetli on na ekranie liczby od 100 do 79, a następnie u dołu ekranu pojawi się napis scroll? (przewinąć?). Ma to na celu umożliwienie ci zobaczenia liczb, które właśnie mają być przewinięte poza górny margines ekranu. Jeśli naciśniesz n, STOP lub klawisz BREAK, to program się zatrzyma z komunikatem D BREAK - CONT repeats (D PRZERWANIE - CONTINUE powtarza). Jeśli naciśniesz dowolny inny klawisz, to komputer wyświetli kolejne 22 wiersze i zapyta cię ponownie.
     
  5. Usuń wiersz 30 z czwartego programu. Gdy uruchomisz ten nowy, skrócony program, to wyświetli on pierwszą liczbę i zatrzyma się z komunikatem 0 OK. Jeśli wpiszesz

            NEXT

    to program wykona kolejny obieg pętli, wyświetlając następną liczbę.

 

 


   I Liceum Ogólnokształcące   
im. Kazimierza Brodzińskiego
w Tarnowie

©2018 mgr Jerzy Wałaszek

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji
GNU Free Documentation License.

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

W artykułach serwisu są używane cookies. Jeśli nie chcesz ich otrzymywać,
zablokuj je w swojej przeglądarce.
Informacje dodatkowe