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 |
©2023 mgr Jerzy Wałaszek |
Programy, numery wierszy, edycja programów
przy pomocy
,
i EDIT, RUN,
LIST, GO TO, CONTINUE, INPUT, NEW,
REM, PRINT, STOP w danych
INPUT,
BREAK
SPIS TREŚCI |
|
Programy
Numery wierszy
Edycja programów za
pomocą klawiszy
,
i EDIT
RUN, LIST
GO TO, CONTINUE,
INPUT, NEW,
REM, PRINT
STOP w danych wejściowych dla INPUT
BREAK
Wpisz te dwa wiersze programu komputerowego drukującego sumę dwóch liczb:
20 PRINT a 10 LET a=10 |
aby ekran wyglądał następująco (do wyświetlania programów i efektów ich pracy stosuję emulator VbSpec 1.70):
Jak dotąd wprowadziłeś tylko jedną liczbę, zatem wpisz
15 LET b=15
i poszło w program. Byłoby niemożliwe wstawić ten wiersz pomiędzy pierwsze dwa, jeśliby były one ponumerowane 1 i 2 zamiast 10 i 20 (numery wierszy muszą być liczbami całkowitymi z zakresu od 1 do 9999), dlatego więc dobrą praktyką przy pierwszym wprowadzaniu programu jest pozostawienie odstępów w numeracji wierszy.
Teraz musisz zmienić wiersz 20 na
20 PRINT a+b
Mógłbyś wpisać ten cały wiersz od nowa, lecz łatwiej będzie użyć możliwości
edycji, którą opisuje
broszurka wprowadzająca.
Znak
>
przy wierszu 15 jest nazywany kursorem programu, a wskazywany przez niego wiersz
nazywa się wierszem bieżącym. Zwykle będzie to ostatnio wprowadzony wiersz, lecz
można użyć klawiszy
lub
do przesunięcia kursora programu w górę lub w dół (wypróbuj
to, zostawiając na końcu kursor w wierszu 20).
Gdy naciśniesz klawisz EDIT (CAPS SHIFT +
1), kopia bieżącego wiersza zostanie wyświetlona na spodzie ekranu -
w twoim przypadku będzie to kopia wiersza 20. Przytrzymaj wciśnięty klawisz
aż kursor
L
przesunie się na koniec wiersza, wtedy wpisz
+b (bez ENTER)
Wiersz na spodzie ekranu powinien teraz wyglądać następująco
Uruchom program jeszcze raz, a następnie wpisz
PRINT a,b
Zmienne wciąż istnieją, chociaż program się zakończył.
Istnieje pożyteczna metoda z EDIT pozbywania się zawartości dolnej części ekranu. Wpisz sporo śmiecia (bez naciskania ENTER). Jednym ze sposobów pozbycia się tego jest usunięcie przez wciśnięcie i przytrzymanie klawisza DELETE, aż cały wiersz zniknie; lecz inny sposób jest następujący. Jeśli naciśniesz EDIT, śmieci na spodzie ekranu zostaną zastąpione kopią bieżącego wiersza. Jeśli teraz wciśniesz ENTER, to bieżący wiersz zostanie z powrotem wprowadzony do programu bez zmian, zostawiając pustą dolną część ekranu.
Jeśli wprowadzisz przez pomyłkę pewien wiersz, powiedzmy
12 LET b = 8
zostanie on umieszczony w programie, a ty zdasz sobie sprawę z pomyłki. Aby usunąć ten niepotrzebny wiersz, wpisz
12 (oczywiście z ENTER) |
Zauważysz ze zdziwieniem, że zniknął kursor programu. Powinieneś go sobie
wyobrazić jako ukrytego pomiędzy wierszami 10 i 15, zatem gdy naciśniesz
,
przejdzie on w górę do wiersza 10, a gdy naciśniesz
,
przejdzie w dół do wiersza 15.
Wpisz
12 (i ENTER)
Znów kursor programu skryje się pomiędzy wierszami 10 i 15, Teraz naciśnij EDIT, a wiersz 15 zostanie sprowadzony na dół: gdy kursor jest ukryty pomiędzy dwoma wierszami, EDIT sprowadza na dół wiersz następny za nowym numerem wiersza. Wpisz ENTER, aby wyczyścić dolną część ekranu.
Teraz wpisz
30 (i ENTER)
Tym razem kursor programu jest ukryty za końcem programu: a jeśli naciśniesz EDIT, to na dół zostanie sprowadzony wiersz 20.
Na koniec wpisz
LIST 15
Teraz na ekranie zobaczysz
15 LET b=15 20 PRINT a+b |
Wiersz 10 zniknął z ekranu, lecz wciąż jest w twoim programie - o czym możesz
się przekonać, naciskając ENTER. Jedynym rezultatem LIST 15 jest
utworzenie wydruku, który rozpoczyna się od wiersza 15 i umieszczenie kursora
programu na wierszu 15. Jeśli masz bardzo długi program, to prawdopodobnie
LIST będzie bardziej użytecznym sposobem przesuwania kursora programu niż
i
.
To ilustruje następne zastosowanie numerów wierszy: zachowują się one jak nazwy wierszy programu, abyś mógł się do nich odwoływać, w podobny sposób jak za pomocą nazw odwołujesz się do zmiennych.
Sam rozkaz LIST tworzy wydruk od początku programu.
Kolejnym rozkazem z broszurki wprowadzającej jest:
NEW
Usuwa on stary program i jego zmienne z pamięci komputera, Teraz uważnie wpisz ten program, który zamienia temperaturę w stopniach Fahrenheita na stopnie Celsjusza.
10 REM konwersja temperatury 20 PRINT "stp. F","stp. C" 30 PRINT 40 INPUT "Podaj stp. F",F 50 PRINT F,(F-32)*5/9 60 GO TO 40 |
W wierszu 10 będziesz musiał wpisać odpowiedni tekst. Również, pomimo tego, że GO TO posiada w sobie spację, w rzeczywistości jest całe jednym słowem kluczowym (na klawiszu G).
Teraz uruchom go. Zobaczysz nagłówek wydrukowany na ekranie przez wiersz 20, lecz co się stało z wierszem 10? Widocznie komputer zupełnie go zignorował. No więc, dokładnie tak. REM w wierszu 10 oznacza komentarz (ang. remark lub reminder) i jest tam jedynie po to, aby ci przypominać, co robi ten program. Rozkaz komentarza składa się z REM, za którym możesz umieszczać wszystko, co chcesz, a komputer zignoruje to aż do końca wiersza.
Do tej chwili komputer doszedł do rozkazu INPUT w wierszu 40 i czeka, aż wpiszesz wartość dla zmiennej F - wiesz o tym, ponieważ w miejscu oczekiwanego kursora K znajduje się kursor L . Wprowadź jakąś liczbę; pamiętaj o klawiszu ENTER. Teraz komputer wyświetla wynik i czeka na kolejną liczbę. Spowodowane jest to wierszem 60, GO TO 40, który powoduje powrót do wiersza 40 i rozpoczęcie od początku. Więc, wprowadź kolejną temperaturę.
Po wpisaniu kilkunastu takich temperatur możesz się zastanawiać, czy komputer kiedykolwiek się tym znudzi. Nie znudzi się. Gdy następnym razem poprosi o kolejną liczbę, wpisz STOP. Komputer zatrzyma wykonywanie programu i wyświetli komunikat H STOP in INPUT in line 40:1 (H STOP w INPUT w wierszu 40:1), który wyjaśni ci powód zatrzymania oraz w którym miejscu do niego doszło (w pierwszym poleceniu w wierszu 40).
Jeśli chcesz kontynuować program, wpisz
CONTINUE
a komputer poprosi cię o kolejną liczbę.
Gdy używane jest CONTINUE, komputer pamięta numer wiersza w ostatnim raporcie, który ci wyświetlił, o ile nie był to komunikat 0 OK i skacze do tego wiersza: w naszym przypadku powoduje to skok do wiersza 40, czyli do polecenia INPUT.
Zastąp wiersz 60 przez 60 GO TO 31 - nie zrobi to zauważalnej różnicy w czasie pracy programu. Jeśli numer wiersza w rozkazie GO TO odnosi się do nieistniejącego wiersza, to skok jest wykonywany do pierwszego wiersza za danym. To samo odnosi się do RUN; w rzeczywistości samo RUN właściwie znaczy RUN 0.
Teraz wpisuj liczby, aż ekran zacznie być pełny. Gdy będzie pełny, komputer przewinie całą górną część ekranu w górę o jeden wiersz, aby zrobić miejsce, tracąc u góry nagłówek kolumn. Nazywa się to przewijaniem ekranu (ang. scrolling).
Gdy cię to znuży, zatrzymaj program wykorzystując STOP i przywołaj jego wydruk przez naciśnięcie klawisza ENTER.
Spójrz na polecenie PRINT w wierszu 50. Stosowany znak przecinka w tym rozkazie jest bardzo ważny, a musisz pamiętać, że przecinek posiada w języku BASIC bardziej ścisłe reguły niż w języku polskim.
Przecinków używa się do wymuszenia początku wydruku albo od lewego marginesu, albo na środku ekranu, w zależności która z tych pozycji jest następna. Stąd w wierszu 50 przecinek powoduje, iż temperatura w stopniach Celsjusza jest drukowana na środku wiersza. Z drugiej strony przy pomocy średnika następna liczba lub łańcuch zostaje wydrukowany bezpośrednio za poprzedzającym go. Możesz zobaczyć to w wierszu 50, jeśli zastąpisz przecinek średnikiem.
Innym znakiem interpunkcyjnym, który w podobny sposób możesz stosować w poleceniach PRINT, jest apostrof ('). Sprawia on, że wydruk tego, co za nim występuje, rozpocznie się od początku następnego wiersza na ekranie, lecz to i tak się dzieje na końcu każdego polecenia PRINT, więc apostrof nie będzie ci zbyt często potrzebny. To dlatego polecenie PRINT w wierszu 50 zawsze rozpoczyna swój wydruk w nowym wierszu, również dlatego rozkaz PRINT w wierszu 30 tworzy pusty wiersz.
Jeśli chcesz powstrzymać to, aby po jednym rozkazie PRINT następny kontynuował wydruk w tym samym wierszu, zastąp wiersz 50 kolejno przez każdy z poniższych wierszy
50 PRINT F, 50 PRINT F; |
oraz
50 PRINT F
i uruchom każdą wersję - dobrze byłoby również wypróbować
50 PRINT F'
Rozkaz z przecinkiem rozmieszcza wszystko w dwóch kolumnach, wersja ze średnikiem ściska wszystko razem, natomiast wersja bez nich obu lub z apostrofem drukuje każdą liczbę w osobnym wierszu - apostrof sam z siebie przenosi wydruk do nowego wiersza ekranu.
Zapamiętaj różnicę pomiędzy przecinkami i średnikami w rozkazach PRINT; również nie myl ich z dwukropkami (:), których używa się do rozdzielania rozkazów w pojedynczym wierszu.
Teraz dopisz te dodatkowe wiersze:
100 REM ten uprzejmy program pamięta twoje imie 110 INPUT n$ 120 PRINT "Witaj ";n$;"!" 130 GO TO 110 |
To jest oddzielny program od poprzedniego, lecz możesz trzymać oba programy jednocześnie w komputerze. Aby uruchomić ten nowy, wpisz
RUN 100
Ponieważ ten program odczytuje łańcuch zamiast liczby, drukuje dwa cudzysłowy łańcuchowe - to dla ciebie wskazówka, no i zwykle zaoszczędza ci ona również nieco wpisywania. Wypróbuj go z każdym przezwiskiem, które przyjdzie ci do głowy na twój temat.
Za kolejnym razem dostaniesz znów dwa apostrofy, lecz nie musisz ich używać,
gdy nie chcesz. Na przykład, wypróbuj to: wymaż je
(za pomocą
i DELETE), a następnie wpisz
n$
Ponieważ nie ma cudzysłowów łańcuchowych, komputer wie, że musi wykonać jakieś obliczenia: w tym przypadku obliczenia te mają na celu znalezienie wartości zmiennej łańcuchowej o nazwie n$ - akurat tak się składa, że jest to ta zmienna, do której wpisałeś swoje imię w ostatnim obiegu programu. Oczywiście, rozkaz INPUT działa jak LET n$=n$, zatem wartość n$ nie zostanie zmieniona.
Przy następnym obiegu dla porównania wpisz ponownie
n$
lecz tym razem nie usuwaj cudzysłowów. Teraz, aby cię nieco zmylić, zmienna n$ zawiera wartość "n$".
Jeśli przy wprowadzaniu łańcucha chcesz użyć STOP, musisz najpierw
przesunąć kursor wstecz na początek wiersza, używając
.
Teraz wróćmy do tego RUN 100, którego użyliśmy wcześniej. Rozkaz ten po prostu skacze do wiersza 100, zatem czy nie moglibyśmy zamiast niego użyć GO TO 100? W tym przypadku akurat odpowiedź jest twierdząca; lecz różnica istnieje. RUN 100 najpierw usuwa wszystkie zmienne i wymazuje ekran, a następnie postępuje jak zwykłe GO TO 100. Samo GO TO 100 niczego nie usuwa. Mogą zaistnieć sytuacje, w których będziesz chciał uruchomić program bez usuwania żadnych zmiennych; wtedy GO TO będzie konieczne, natomiast RUN może mieć niszczycielski efekt, zatem lepiej nie przyzwyczajać się do automatycznego wpisywania RUN w celu uruchomienia programu.
Kolejną różnicą jest to, że można wpisać RUN bez numeru wiersza, a program uruchomi się od swojego pierwszego wiersza. GO TO zawsze musi posiadać numer wiersza.
Oba powyższe programy zatrzymały się, ponieważ wpisałeś STOP w wierszu wprowadzania danych; czasami - przez pomyłkę - napiszesz program, który nie możesz zatrzymać, a on sam też się nie zatrzyma. Wpisz
200 GO TO 200 RUN 200 |
Wygląda na to, że będzie to działać w nieskończoność, aż wyciągniesz wtyczkę zasilania; lecz istnieje mniej drastyczne lekarstwo. Naciśnij CAPS SHIFT z klawiszem SPACE, który posiada ponad sobą wypisany napis BREAK. Program zostanie wstrzymany z komunikatem L BREAK into program (L PRZERWANIE programu).
Na końcu każdego rozkazu program sprawdza, czy nie zostały naciśnięte te klawisze; a jeśli tak, to zatrzymuje się. Klawisz BREAK może być również użyty, gdy jesteś w trakcie korzystania z magnetofonu lub drukarki lub innych urządzeń, które możesz podłączyć do tego komputera - to na wypadek, gdyby komputer czekał, aż coś dla niego zrobią, a one by tego nie robiły.
W takich przypadkach pojawi się inny komunikat: D BREAK - CONT repeats (D PRZERWA - CONT powtarza). W tym przypadku CONTINUE kontynuuje wykonanie programu od następnego polecenia.
Uruchom program ponownie za pomocą RUN 100 i, gdy poprosi o wprowadzenie danych, wpisz
n$ (po usunięciu cudzysłowów) |
n$ jest niezdefiniowaną zmienną i otrzymasz komunikat
LET n$="coś określonego" |
(co posiada swój własny komunikat 0 OK, 0:1) i
CONTINUE
to okaże się, że możesz bez żadnych kłopotów używać n$ jako danych wejściowych.
W tym przypadku CONTINUE wykonuje skok do polecenia INPUT w wierszu 110. Ignoruje ono komunikat z polecenia LET, ponieważ zawierał on 'OK' i skacze do rozkazu, do którego odwoływał się poprzedni komunikat, czyli do pierwszego rozkazu w wierszu 110. Ma to być użyteczne. Jeśli program zatrzyma się z powodu jakiegoś błędu, to możesz podjąć wszelkie działania, aby ten błąd usunąć, a CONTINUE uruchomi program od przerwanego miejsca.
Jak powiedzieliśmy poprzednio, komunikat L BREAK into program jest specjalny, ponieważ po nim CONTINUE nie powtórzy rozkazu, gdzie program się zatrzymał.
Automatyczny wydruk (taki, który nie jest wynikiem polecenia LIST, lecz pojawia się po wprowadzeniu nowego wiersza) może także cię zaintrygować. Jeśli wpiszesz program z 50 wierszami, każdy to polecenie REM,
1 REM 2 REM 3 REM : : : : 49 REM 50 REM |
to będziesz mógł poeksperymentować.
Pierwszą rzeczą do zapamiętania jest to, iż bieżący wiersz (z > ) zawsze pojawia się na ekranie, zwykle w pobliżu jego środka.
Wpisz:
LIST (i oczywiście ENTER) |
i kiedy pojawi się pytanie scroll? (przewinąć?) (ponieważ wydruk zapełnił ekran), wciśnij n dla 'Nie'. Komputer wyświetli komunikat D BREAK - CONT repeats jakbyś nacisnął BREAK. Na pewnym etapie możesz odkryć, co się stanie, gdy naciśniesz t zamiast n; n, SPACE i STOP liczy się jako Nie, natomiast wszystko inne liczy się jako Tak.
Teraz ponownie naciśnij ENTER, aby otrzymać automatyczny wydruk, na którym powinny się znaleźć na ekranie wiersze od 1 do 22. Teraz wpisz
23 REM
i otrzymasz na ekranie wiersze od 2 do 23; wpisz
28 REM
i otrzymasz wiersze od 7 do 28. (W obu przypadkach, wpisując nowy wiersz, przesunąłeś kursor programu, więc utworzony został nowy wydruk.)
Może wydaje ci się to nieco dowolne. Właściwie komputer stara się dać ci dokładnie to, co chcesz, chociaż ludzie są istotami nieprzewidywalnymi i nie zawsze udaje mu się dobrze zgadnąć.
Komputer zapamiętuje nie tylko bieżący wiersz, który ma się pojawić na ekranie, lecz również górny wiersz na ekranie. Gdy próbuje utworzyć wydruk, to najpierw porównuje górny wiersz z bieżącym. Jeśli górny wiersz występuje za bieżącym, to nie ma sensu od niego rozpoczynać, więc komputer używa bieżący wiersz jako nowy, górny wiersz i tworzy wydruk programu.
W przeciwnym razie jego metoda polega na rozpoczęciu tworzenia wydruku od górnego wiersza i kontynuowanie go aż do wiersza bieżącego, przewijając po drodze zawartość ekranu w razie potrzeby. Jednakże dokonuje on wstępnych obliczeń, aby sprawdzić, ile czasu to zajmie, i jeśli dostanie w odpowiedzi, że zbyt długo, to zmienia górny wiersz na taki, który jest dużo bliżej wiersza bieżącego. Teraz, obliczywszy górny wiersz, rozpoczyna od niego tworzenie wydruku. Jeśli osiągnie koniec programu lub spód ekranu, a bieżący wiersz został wyświetlony, to zatrzymuje tworzenie wydruku. Inaczej przewija go w górę aż bieżący wiersz pojawi się na ekranie, a przy każdym dodatkowo wyświetlanym wierszu, komputer przesuwa się w dół na kolejny w programie wiersz górny, aby przywędrować w pobliże bieżącego wiersza.
Eksperymentuj z przesuwaniem bieżącego wiersza w górę lub w dół, wpisując
numer wiersza REM |
LIST przesuwa bieżący wiersz, lecz nie górny, zatem kolejne wydruki programu mogą się różnić. Na przykład, wpisz
LIST
aby otrzymać wydruk, a następnie wciśnij jeszcze raz ENTER, aby wiersz 1 stał się wierszem górnym, Powinieneś mieć na ekranie wiersze od 1 do 22. Wpisz
LIST 22
co da ci wiersze od 22 do 43; gdy naciśniesz znów ENTER, z powrotem otrzymasz wiersze od 1 do 22. To wydaje się być bardziej użyteczne dla krótkich niż dla długich programów.
Używając powyższego programu pełnego poleceń REM, wpisz
LIST
a następnie n w odpowiedzi na pytanie scroll?. Teraz wpisz
CONTINUE
Rozkaz CONTINUE zachowuje się tutaj dosyć dziwnie, ponieważ dolna część ekranu staje się pusta i nic dalej się nie dzieje; lecz możesz zatrzymać wykonywanie polecenia w normalny sposób za pomocą BREAK. Powodem jest to, że LIST było pierwszym poleceniem w wierszu 0, zatem CONTINUE powtarza ten rozkaz. Niestety, pierwszym rozkazem w wierszu 0 jest teraz samo CONTINUE, więc komputer siedzi w tym miejscu i ciągle w nieskończoność wykonuje polecenie CONTINUE, aż go zatrzymasz.
Możesz to zmienić, zastępując LIST za pomocą
: LIST
dla którego CONTINUE daje komunikat 0 OK (ponieważ CONTINUE skacze do drugiego rozkazu w wierszu 0, a to jest jego koniec) lub
:: LIST
dla którego CONTINUE daje komunikat N Statement lost (Rozkaz N utracony) (ponieważ CONTINUE skacze do trzeciego polecenia w wierszu 0, które już nie istnieje).
Zobaczyłeś właśnie polecenia PRINT, LET, INPUT, RUN, LIST, GO TO, CONTINUE, NEW i REM, a każde z nich może być użyte albo bezpośrednio jako rozkaz, albo w wierszach programu - tak jest dla prawie wszystkich poleceń w języku BASIC komputera ZX Spectrum. RUN, LIST, CONTINUE i NEW zwykle na niewiele przydają się w programach, lecz mimo to mogą być w nich używane.
![]() |
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2023 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.