Rozdział 2


Podstawowe wiadomości o programowaniu

 

Podsumowanie

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 już wiesz, ponieważ te wiersze rozpoczynały się od liczb, nie zostały natychmiast wykonane, lecz zapisane w pamięci w postaci wierszy programu. Zauważysz tu również, że numery wierszy rządzą ich kolejnością wewnątrz programu: jest to najważniejsze, gdy program zostaje uruchomiony, lecz odzwierciedla się również w kolejności wierszy na wydruku programu, który teraz widzisz na ekranie.

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

 

 

Wciśnij ENTER, a nowy wiersz zastąpi w programie stary wiersz 20, więc ekran będzie wyglądał następująco:

 

 

Uchom ten program, wykorzystując RUN i ENTER, a suma zostanie wyświetlona:

 

 

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 pamieta 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 2 Variable not found 110:1 (2 Zmienna nie znaleziona w wierszu 110, rozkaz 1). Jeśli teraz wpiszesz

 

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.

 

Ćwiczenia

  1. Umieść polecenie LIST w programie, aby po uruchomieniu wyświetlał on sam siebie.
  2. Napisz program, który odczytuje ceny i wypisuje dla nich wartość podatku VAT (22%). Użyj poleceń PRINT do wyświetlania zapowiedzi komputera na temat tego, co chce zrobić. Niech komputer przesadnie uprzejmie prosi o dane. Zmodyfikuj ten program tak, aby można również było wprowadzać stawkę podatku VAT (dopuść wartość zero na wypadek przyszłych zmian w systemach pobierania podatków).
  3. Napisz program, który będzie odczytywał kolejne liczby i wypisywał ich bieżącą sumę. (Podpowiedź: utwórz dwie zmienne o nazwie suma - ustaw ją na początku programu na zero - oraz czynnik. Odczytaj czynnik, dodaj go do sumy, wyświetl obie zmienne i wróć ponownie do odczytu następnego czynnika.)
  4. Co mogłoby CONTINUE i NEW robić w jakimś programie? Czy możesz w ogóle wymyślić jakieś zastosowania dla nich?

 

 


   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