Serwis Edukacyjny w I-LO w Tarnowie Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej Tłumaczenie: mgr Jerzy Wałaszek |
©2024 mgr Jerzy Wałaszek |
FOR, NEXT, TO, STEP
Wprowadzenie pętli FOR - NEXT
SPIS TREŚCI |
|
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.
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2024 mgr Jerzy Wałaszek |
Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email:
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.