Tajemnice ATARI

PIERWSZE KROKI

    Z listów jakie otrzymuje redakcja wynika, że poprzednie odcinki cyklu były zbyt "suche", a co za tym idzie ciężkie w przyswajaniu. Niestety pewną porcję wiedzy teoretycznej musiałem wprowadzić, a, by nie ciągnąć tego nudnego procederu w nieskończoność starałem się zmieścić z podstawami działania edytora i podstawowymi elementami składowymi BASICu jak najszybciej. Stąd wielkie stężenie "mądrych" terminów i nazw. Dalej cykl będzie prowadzony w nieco lżejszym stylu.

   W ostatnim odcinku z cyklu "Pierwsze kroki" omówiliśmy pobieżnie niektóre elementy języka Basic - stałe, zmienne, operatory, oraz komendy PRINT, POSITION i INPUT. Pozwolą nam one (dzięki możliwości oglądania wyniku ich działania na monitorze) na lepsze poznanie kolejnych elementów BASICu. Będziemy próbowali budować powoli krótkie programy, przypomnijmy sobie zatem jak zbudowany jest program. Składa się on z ponumerowanych wierszy zawierających komendy. Poszczególne wiersze programu wykonywane są w kolejności numeracji, niezależnie od kolejności wpisywania. Tak więc możemy wpisać najpierw wiersz 10, potem 5, a wykonany zostanie najpierw wiersz o numerze 5. Dobrym zwyczajem jest numerowanie kolejnych wierszy programu co 10 począwszy od 10. Oprócz przejrzystości, ten sposób ma jeszcze jedną zaletę. Łatwo można wprowadzać poprawki do programu wstawiając między już istniejące, nowe wiersze. Każdy wiersz programu może składać się z jednej lub kilku komend języka BASIC oddzielonych dwukropkami. Taki zlepek komend w jednym wierszu wykonuje się nieco szybciej niż gdyby rozdzielić je na kolejne linie programu. Nie należy jednak z tym przesadzać, gdyż i tak mało czytelny program w basicu po zbytnim skomasowaniu, po pewnym czasie dla samego autora stanowić może stek niezrozumiałych komend zamiast przejrzystego listingu. Warunek pełnej czytelności programu spełnić można tylko przy użyciu dużej ilości komentarzy. Komentarze do programu dodaje się tak jak i inne komendy. Słowo kluczowe REM oznacza, że wszystko, aż do końca wiersza będzie traktowane jako komentarz. Oznacza to ni mniej ni więcej jak to, że stojące dalej znaczki składające się na tekst, nie będą analizowane, czy tłumaczone na program, lecz po prostu w procesie translacji pominięte. Parę przykładowych komentarzy:
REM od tego wiersza rozpoczyna się
program
REM PRINT "LOLA"
   Spróbujmy zatem na podstawie wiadomości z poprzedniego odcinka i podanych wyżej zbudować jakiś prosty program. Na początek obliczmy może iloczyn dwóch dowolnych liczb. Pierwszą czynnością przy układaniu konkretnego programu powinno być zgrubne określenie algorytmu, czyli sposobu postępowania. Z grubsza należało by się najpierw zorientować (zapytać) jakie to mają być liczby, a następnie wynik obliczyć i wypisać. Przystępujemy zatem do dzieła. Komendą powodującą oczekiwanie na podanie danych jest jak wiadomo INPUT. Początek programu mógłby wyglądać następująco:
INPUT X,Y
   Pamiętając, że PRINT potrafi wyświetlić wartość wyrażenia koniec zapisalibyśmy na przykład tak:
PRINT X*Y
   Dodajmy numery wierszy i zapiszmy nasz pierwszy programik.
10 INPUT X,Y
20 PRINT X*Y
   Wykonajmy teraz komendę RUN i popatrzmy co się stanie. Pojawi się pytajnik, a po podaniu dwóch liczb poniżej ukaże się wynik mnożenia jednej przez drugą. Wszystko wydaje się w porządku, dopóki my używamy tego dzieła. Spróbujmy posadzić przed komputerem kogoś z rodziny czy znajomych i poprosić go, by na podstawie działania programu określił jakie jest jego zadanie. W dziewięciu przypadkach na 10 wymagać to będzie co najmniej kilkuminutowego zastanowienia. A przecież programy zazwyczaj pisze się z myślą o szerszym gronie użytkowników. Należałoby zatem nasz przykład okrasić jakimiś napisami. Dodajmy zatem wiersz:
5 PRINT "TEN PROGRAM OBLICZA
ILOCZYN DWU LICZB": PRINT "PO
DAJ LICZBY, KTÓRE CHCESZ POMN
OŻYĆ"
   Po uruchomieniu tak zmodyfikowanego programu sprawa wygląda dużo lepiej. A gdybyśmy dodali jeszcze wiersz:
15 ?:? "obliczony wynik:"
byłoby jeszcze ładniej. Kończąc zabawę z mnożeniem zapiszmy może cały program od początku, tak jak mógłby być napisany przez "porządnego" programistę.
10 REM OBLICZANIE ILOCZYNU
DWU LICZB
20 ? "PROGRAM OBLICZA ILOCZYN
DWU LICZB"
30 ?: ?"podaj dwie dowolne liczby";:
INPUT X,Y
40 ? X;"*";Y;" =",X*Y
   Zwróćmy uwagę na wiersze 30 i 40, a konkretnie na użycie separatorów dla komendy PRINT. Średnik w wierszu 30 powoduje wyświetlenie pytajnika zaraz za napisem, natomiast dogłębne zrozumienie wiersza 40 zostawiam Państwu.

   Spróbujmy teraz zmusić program do działania "w kółko". Najprościej można to zrobić dopisując wiersz:
50 RUN
   Nie jest to jednak zbyt eleganckie, a poza tym zawsze musimy oglądać napis PROGRAM OBLICZA ILOCZYN DWU LICZB. Poznajmy zatem jedną z komend zmieniającą kolejność wykonywania programu. Jest to GOTO numer_wiersza, w skrócie G. . Po dopisaniu wiersza
50 GOTO 30
programik będzie się zachowywał w miarę poprawnie. Jedynym jego mankamentem jest to, że nie ma z niego wyjścia! A gdyby tak po obliczeniu iloczynu zapytać użytkownika czy chce się bawić dalej? Jeżeli chcemy by odpowiedzią była jedna literka np. T(ak) lub N(ie) potrzebujemy użyć zmiennej tekstowej. Dopiszmy zatem do programu wiersz
15 DIM ODPOW$(1)
i dalej zapytanie
45 ?"chcesz się dalej bawić";: INPUT
ODPOW$
   Pozostaje tylko rozstrzygnięcie, czy wprowadzoną literką było T czy N. W praktyce wystarczy sprawdzić, czy wciśnięto N i wtedy zareagować opuszczeniem programu. Dlaczego każda inna literka spowoduje powrót do pętli? W takich przypadkach niezależnie od rodzaju programu powinno się przyjmować zasadę, że program jest "trudniej" opuścić niż w nim pozostać. Tak więc, by wrócić do BASICu konieczne jest w naszym wypadku trafienie w N. Do rozstrzygania wartości logicznych wyrażenia służy m.in. komenda:

IF wyrażenie THEN działanie, gdzie wyrażenie jest to wyrażenie logiczne lub arytmetyczne (bądź stała lub zmienna liczbowa) traktowane jak logiczne, czyli przyjmujące wartości TRUE (prawda) bądź FALSE (fałsz). Umownie, wyrażenie arytmetyczne przyjmuje wartość logiczną FALSE gdy w wyniku daje 0, w pozostałych przypadkach przyjmuje wartość TRUE. W wyrażeniu logicznym mogą występować elementy podobnego typu (liczbowe lub tekstowe) wraz z operatorami logicznymi, które oznaczają:

= "równe"
< "mniejsze"
<= "mniejsze lub równe"
> "większe"
>= "większe lub równe"
<> "różne"


   Dodatkowo poszczególne wyrażenia logiczne mogą być łączone w wyrażenie za pomocą operatorów logicznych:

OR suma logiczna (lub)
AND iloczyn logiczny (i)

i funkcji

NOT czyli przeczenia (nieprawda, że).

   Komenda IF działa następująco: jeżeli wyrażenie przyjmuje wartość TRUE (jest prawdziwe) to wykonywane zostaje działanie, jeżeli nie, program przechodzi do następnego wiersza. Działanie może być pojedynczą komendą lub może ich być kilka oddzielonych oczywiście dwukropkami. W wypadku komendy GOTO dozwolone jest podanie tylko numeru wiersza do którego program ma "skoczyć".

   Dokładnym poznaniem wszystkich operatorów i funkcji logicznych zajmiemy się później. Teraz powrócimy do naszego programu. Po dopisaniu wierszy 15 i 45 zmodyfikujmy nieco program, dodając badanie warunku końca.
47 IF ODPOW$<>"N" THEN END
   Zapisana po THEN komenda END jest basicowym poleceniem zakończenia wykonywania programu. Patrząc na cały program nasuwa się pytanie, czy nie można by go troszkę zmienić, tak by skrócił się o wiersz 50. Należy przyjąć założenie, że skok GOTO może się znaleźć w wierszu sprawdzającym warunek, a specjalne zakończenie programu nie musi być sygnalizowane, może nastąpić samoczynnie. Wykasujmy zatem wiersz 47 pisząc po prostu liczbę 47 i naciskając RETURN, wiersz 50 zapiszmy tak:
50 IF ODPOW$<>"N" THEN 30
co w wolnym tłumaczeniu oznacza "jeżeli odpowiedź jest różna od N to wykonuj pętlę programu". Proste, prawda? Zauważmy, że w przypadku, gdy naciśniemy n gdy edytor będzie w trybie wypisywania małych liter (CAPS) to program zrozumie naszą odpowiedź opacznie. Można temu zaradzić, zmieniając wiersz 50 następująco:
50 IP ODPOW$<>"N" OR ODPOW$<>"n" THEN 30
   Użyliśmy wspomnianej przy opisie komendy IF funkcji logicznej OR (lub). Wolny przekład tego wiersza może brzmieć następująco: "jeżeli odpowiedzią nie było N ani n to należy kontynuować program".

   Na dzisiaj byłoby tyle. Następnym razem zajmiemy się bardziej ambitnym programem rozpoznającym płeć użytkownika.

Mirosław Liminowicz



Powrót na start | Powrót do spisu treści | Powrót na stronę główną

Pixel 2001