Serwis Edukacyjny
w I-LO w Tarnowie
obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

obrazek

Autor: Steven Vickers
Tłumaczył: mgr Jerzy Wałaszek

©2021 mgr Jerzy Wałaszek
I LO w Tarnowie

ROZDZIAŁ 12 – Pętle

Rozkazy: FOR, NEXT, TO, STEP

SPIS TREŚCI
ROZDZIAŁ 1 Przygotowanie ZX81
ROZDZIAŁ 2 Wydawanie komputerowi poleceń
ROZDZIAŁ 3 Lekcja historii
ROZDZIAŁ 4 Sinclair ZX81 jako kalkulator kieszonkowy
ROZDZIAŁ 5 Funkcje
ROZDZIAŁ 6 Zmienne
ROZDZIAŁ 7 Łańcuchy tekstowe
ROZDZIAŁ 8 Programowanie komputera
ROZDZIAŁ 9 Dalsze programowanie komputera
ROZDZIAŁ 10 Jeśli ...
ROZDZIAŁ 11 Zestaw znaków
ROZDZIAŁ 12 Pętle
ROZDZIAŁ 13 Wolno i Szybko
ROZDZIAŁ 14 Podprogramy
ROZDZIAŁ 15 Uruchamianie programów
ROZDZIAŁ 16 Pamięć taśmowa
ROZDZIAŁ 17 Wyświetlanie z bajerami
ROZDZIAŁ 18 Grafika
ROZDZIAŁ 19 Czas i ruch
ROZDZIAŁ 20 Drukarka dla ZX81
ROZDZIAŁ 21 Podłańcuchy
ROZDZIAŁ 22 Tablice
ROZDZIAŁ 23 Gdy zaczyna brakować pamięci
ROZDZIAŁ 24 Liczenie na palcach
ROZDZIAŁ 25 Jak pracuje komputer
ROZDZIAŁ 26 Stosowanie kodu maszynowego
ROZDZIAŁ 27 Organizacja pamięci
ROZDZIAŁ 28 Zmienne systemowe
DODATKI
A Zestaw znaków
B Numery komunikatów
C ZX81 dla znających język BASIC

ROZDZIAŁ 12 – Pętle

Załóżmy, iż chcesz wprowadzić pięć liczb i dodać je razem. Jednym ze sposobów (nie wpisuj tego, o ile nie czujesz obowiązku) jest wpisanie:

  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

Ten sposób jest złą praktyką programowania. Dla pięciu liczb jeszcze jest to do przyjęcia, lecz łatwo wyobrazić sobie, iż dla dziesięciu stałby się on uciążliwy, a dla 100 prawie niemożliwy. Lepszym rozwiązaniem jest zorganizowanie sobie zmiennej zliczającej do pięciu, a następnie zatrzymanie programu, jak poniżej (co już powinieneś wpisać):

10 LET SUMA=0
20 LET LICZNIK=1
30 INPUT A
40 REM LICZNIK = ILOSC WCZYTAN ZMIENNEJ A
50 LET SUMA=SUMA+A
60 LET LICZNIK=LICZNIK+1
70 IF LICZNIK<=5 THEN GOTO 30
80 PRINT SUMA

Zwróć uwagę jak łatwo można zmienić wiersz 70, aby program dodał dziesięć liczb czy nawet sto.

Taki rodzaj zliczania jest tak użyteczny, iż są dwa specjalne polecenia, aby go ułatwić: polecenie FOR i polecenie NEXT. Zawsze używa się ich razem. Wykorzystując je, właśnie wprowadzony przez ciebie program robi dokładnie to samo co:

10 LET SUMA=0
20 FOR L=1 TO 5
30 INPUT A
40 REM L = ILOSC WCZYTAN ZMIENNEJ A
50 LET SUMA=SUMA+A
60 NEXT L
80 PRINT SUMA

(aby otrzymać ten program z poprzedniego, musisz tylko wyedytować wiersze 20, 40, 60 i 70. TO otrzymasz z 4 z SHIFT).

Zwróć uwagę, iż zmieniliśmy nazwę zmiennej LICZNIK na L. Zmienna licznikowa - lub sterująca - pętli FOR-NEXT musi posiadać jednoliterową nazwę.

Wynikiem tego programu jest to, iż L przebiega kolejno przez wartości 1 (wartość startowa), 2, 3, 4 i 5 (wartość końcowa), a dla każdej z nich są wykonywane wiersze 30, 40 i 50. Następnie, gdy L osiągnęło wszystkie swoje pięć wartości, wykonany zostaje wiersz 80.

Dodatkowo zmienna sterująca wcale nie musi zmieniać swojej wartości za każdym razem co 1: możesz to zmienić na cokolwiek innego używając dodatku STEP do polecenia FOR. Najbardziej ogólną postacią polecenia FOR jest:

FOR zmienna sterująca = wartość początkowa TO wartość końcowa STEP krok

gdzie zmienna kontrolna posiada jednoliterową nazwę, a wartość początkowa, końcowa oraz krok są wyrażeniami liczbowymi. Zatem, jeśli w wierszu 20 programu wprowadzisz

20 FOR L=1 TO 5 STEP 3/2

to L przebiegnie przez wartości 1, 2.5 & 4. Zauważ, iż wcale nie musisz ograniczać się do liczb całkowitych oraz zmienna sterująca nie musi dokładnie osiągać wartości końcowej - pętla powtarza się dopóki jej zmienna sterująca jest mniejsza lub równa wartości końcowej (ale zajrzyj do ćwiczenia 4).

Musisz być ostrożny, gdy uruchamiasz razem dwie pętle FOR-NEXT - jedną wewnątrz drugiej. Wypróbuj ten program, który wyświetla kompletny zestaw 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 - N
pętla-M
    |
    |
    |
    |
pętla-M

Widać wyraźnie, iż pętla N jest w całości wewnątrz pętli M - są one poprawnie zagnieżdżone. Musimy natomiast unikać pętli FOR-NEXT, które zachodzą na siebie tak, iż jedna nie jest całkowicie wewnątrz drugiej, jak w tym przykładzie:

ŹLE 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 - M

pętla - N
    |
    |
    |
pętla - N

Pętle FOR-NEXT muszą albo być w całości jedna w drugiej, albo zupełnie osobno.

Następną rzeczą do unikania jest wskakiwanie do wnętrza pętli FOR-NEXT z poza niej. Zmienna sterująca zostaje poprawnie zainicjowana tylko po wykonaniu jej polecenia FOR, a jeśli opuścisz je, to po napotkaniu polecenia NEXT komputer będzie zdezorientowany. Jeśli masz szczęście, otrzymasz wtedy komunikat 1 lub 2 (oznaczający, iż polecenie NEXT nie zawiera rozpoznawalnej zmiennej sterującej).

Podsumowanie

Polecenia: FOR, NEXT, TO, STEP

Ćwiczenia

  1. Przepisz program z rozdziału 11, który wyświetla zestaw znaków, lecz teraz zastosuj w nim pętlę FOR-NEXT (odpowiedź w rozdziale 13).
  1. Zmienna sterująca nie posiada tylko nazwy i wartości, jak normalna zmienna, lecz również wartość końcową, krok oraz numer wiersza, do którego powraca pętla po każdym obiegu (wiersz za poleceniem FOR, gdzie została ustawiona). Po pierwsze przekonaj się, iż gdy polecenie FOR jest wykonywane, cała ta informacja jest dostępna (używając wartości początkowej jako pierwszej wartości przyjmowanej w pętli), a po drugie, że (używając jako przykłady nasz drugi i trzeci program) informacja ta jest wystarczająca, aby zamienić jeden wiersz:

    NEXT
    C

    na dwa wiersze:

    LET
    C=C+1
    IF
    C<=5 THEN GOTO 30

    (Właściwie troszkę tu oszukaliśmy: w rzeczywistości powinno być GOTO 21 zamiast GOTO 30. W naszym programie będzie to miało ten sam efekt.)
  1. Uruchom ten program, a następnie wpisz

    PRINT
    C

    Dlaczego w odpowiedzi dostajemy 6 a nie 5?

    [Odpowiedź: polecenie NEXT w wierszu 60 jest wykonywane 5 razy i za każdym razem do C jest dodawane 1.] Co się stanie, jeśli w wierszu 20 wstawisz STEP 2?
  1. Zmień trzeci program tak, aby zamiast automatycznego dodawania pięciu liczb prosił on o podanie ilości liczb do dodania. Gdy uruchomisz ten program, to co się stanie przy wprowadzeniu 0 oznaczającego, iż nie chcesz dodawać żadnych liczb? Dlaczego mógłbyś podejrzewać, iż sprawi to komputerowi problem; chociaż jest oczywiste, czego chcesz? (komputer musi poszukać polecenia NEXT C, które zwykle nie jest konieczne). W rzeczywistości ZX81 sam się o to zatroszczy.
  1. Wypróbuj ten program wyświetlający liczby od 1 do 10 w odwrotnej kolejności:

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

    Zmień go w program nie wykorzystujący pętli FOR-NEXT w taki sam sposób, jak zmiana programu 3 w program 2 (zobacz do ćwiczenia 2). Dlaczego ujemny krok wprowadza drobną różnicę?
Na początek:  podrozdziału   strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2021 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: i-lo@eduinf.waw.pl

Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.