SiS

LOGO

W poprzednim odcinku celowo pominąłem kilka ogólnych uwag odnośnie do programowania w LOGO. Pierwsza dotyczy wywołania LOGO, czyli uruchomienia translatora języka. Od tej pory pisząc LOGO, będę miał na myśli polskie LOGO, a jest ono dostępne w postaci interpretera (program PTI LOGO) na mikrokomputerze ZX Spectrum. 

Jak zatem rozpocząć konwersację z LOGO? Na pewno prawie wszyscy użytkownicy Spectrum uśmiechną się wyrozumiale i odpowiedzą: trzeba je wgrać z kasety. Oczywiście tak jest, ale dla porządku oraz dla tych, którzy może nie wiedzą, przypomnę te podstawowe rzeczy. Mikrokomputer ZX Spectrum w wersji 48K lub Plus ma ok. 48 000 bajtów (nie licząc pamięci typu ROM), czyli komórek pamięci. Tyle też wymaga interpreter LOGO. Jasno więc z tego wynika, że Spectrum 16 K (jest ich zresztą coraz mniej) nie nadaje się do korzystania z LOGO. Mając już komputer włączamy go do sieci i widzimy napis „© 1982 Sinclair Research Ltd”. W tym momencie możemy podawać rozkazy lub układać programy w języku Basic, który jest automatycznie dostępny. Firma Sinclair wyposażyła swój komputer w interpreter (rodzaj translatora) tego języka, który jest na stałe w pamięci — jest zapisany w ROM-ie. Siłą rzeczy, aby uruchomić LOGO, musimy napisać rozkaz w Basic’u „LOAD „. Mając kasetę z programem PTI LOGO, wgrywamy go, podobnie jak to czynimy z każdym innym programem czy grą. Program PTI LOGO (nazwa błyskająca) wgrywa się około 4 minut. Po tym czasie na ekranie powinien pojawić się napis „Polskie LOGO wer. 9 cPTI/1986”. Po tym też można poznać LOGO, o którym piszemy, gdyż krąży wiele wersji polskiego LOGO, będących atrapami, różniących się od siebie, wprowadzających tym samym zamieszanie. Wersje te są złe i nie warto zwracać na nie uwagi.

Kiedy widzimy już napis obwieszczający, że LOGO jest wgrane, widzimy również znak „?” i migający kursor. Taka sytuacja na ekranie informuje nas, że LOGO gotowe jest przyjmować komendy. Wykonanie komendy następuje po wciśnięciu klawisza ENTER. Pisząc zatem jakiś ciąg znaków postępujemy podobnie jak przy pisaniu listu; sami wiemy, co napisaliśmy i aby ktoś przeczytał, trzeba list wysłać — wcisnąć ENTER. Poprzednio bawiąc się żółwiem — zauważyliśmy, że wprowadzane przez nas komendy i w ogóle wszystkie teksty widoczne były tylko w dwóch dolnych liniach ekranu, LOGO bowiem ma dwa tryby: graficzny i tekstowy. Wykonanie jakiejkolwiek komendy graficznej (związanej z żółwiem) powoduje przejście do trybu graficznego — tylko dwie linie przeznaczone są na tekst. W trybie tekstowym cały ekran dostępny jest na napisy, a przechodzi się do tego trybu, pisząc TEKSTY lub w skrócie TS (w angielskim LOGO TEXTSCREEN TS). Spróbujmy napisać „PŹ”, a następnie „XXX”. Po wprowadzeniu komendy „pokaż żółwia”, ukazuje się on na środku ekranu. Następnie po wprowadzeniu XXX w dolnych liniach wyświetla się: „Nic wiem jak zrobić XXX”. Tylko w tych dwóch liniach widzimy naszą konwersację. Napiszmy teraz „TS”, a następnie „XXX”. Żółw znika, znak zapytania pokazuje się u góry ekranu, a komunikat o błędzie w następnej górnej linii. Teraz jesteśmy w trybie tekstowym. Zostawmy na chwilę nasze rysunki i żółwia. Napiszmy: PISZ 24

Po wciśnięciu ENTER, na ekranie pojawi się 24. Napiszmy teraz: 

PISZ „LOGO

Jeden cudzysłów przed słowem oznacza, że słowo ma być wzięte dosłownie, tzn. traktowane jako ciąg znaków — napis. Teraz na ekranie po wciśnięciu ENTER pojawi się LOGO.

Poznaliśmy komendę PISZ, która ma też skrót PP (angielskie LOGO — PRINT PR). Powoduje ona wyświetlenie, jaka jest podana. Wartość ta może być liczbą, słowem, ale może być też ciągiem słów — co w LOGO nazywa się listą. Napiszmy: 

PP [Dzisiaj jest ładna pogoda]

W nawiasach kwadratowych jest lista wyrazów, które wyświetlone zostaną po naciśnięciu ENTER. Z poprzedniego odcinka pamiętamy, że można powtarzać jakieś czynności dowolną ilość razy, pisząc komendę POWTÓRZ. Napiszmy: POWTÓRZ 15 [pisz [trala lala la]]

Komenda znaczy: powtórz 15 razy instrukcje podane w nawiasie kwadratowym. W nawiasie kwadratowym jest tylko jedna instrukcja — PISZ, która ma wpisać ciąg wyrazów ujęty w nawiasy kwadratowe. Wynik jest zatem zgodny z tym, co widzimy na ekranie — 15 napisów „trala lala la” jeden pod drugim. LOGO umie oczywiście liczyć. Spróbujmy napisać: 

PISZ 12+13

otrzymamy wynik 25. Podobnie możemy napisać PISZ 34/2 lub PP 1.3*3. Kropka dziesiętna umożliwia nam wprowadzanie dowolnej liczby ułamkowej. Weźmy tak:

 

PISZ 2.234-3.33-5-7*8/100 powinien wyświetlić

            się wynik 0.

 

Wyrażenie może być dowolnie długie, może zawierać nawiasy np:

PP (3+2)*5 daje oczywiście 25.

Tyle na razie o arytmetyce w LOGO. W następnych odcinkach dowiemy się o innych matematycznych możliwościach, o różnych funkcjach, które LOGO zna i o sposobie ich wykorzystania. Teraz jeszcze przyda nam się znajomość jednej funkcji pomocnej przy rysowaniu koła.

Wprowadźmy: PISZ PI↑

Wyświetli się 3.1415927. Funkcja pi↑ oznacza stałą pi i zamiast pisać 3.141 możemy jej używać.

Wróćmy teraz do rysunków. Umiemy już poruszać żółwia, obracać, podnosić pióro, by nie ciągnął kreski i właściwie możemy wszystko narysować. Jednak narysowanie choćby kwadratu wymaga napisania jednej dość długiej linii. Jeśli chcemy narysować kilka kwadratów w różnych miejscach, musimy za każdym razem powtarzać ten sam ciąg dobrze znanych komend. Nauczmy zatem LOGO rysować kwadrat tak, żeby nic tracić czasu na powtarzanie w kółko tego samego. Napiszmy:

? OTO kwadrat
> POWTÓRZ 4 [naprzód 40 prawo 90]
> JUŻ
KWADRAT zdefiniowane

Po napisaniu pierwszej linii i jej wprowadzeniu pojawia się znaczek „>” zamiast znaku zapytania. Oznacza to, że LOGO zapamiętuje wprowadzaną linię, lecz jej nie wykonuje — jesteśmy w trakcie definicji procedury. Po napisaniu słowa „już”, które oznacza, że skończyliśmy opisywać treść procedury — LOGO pisze np. KWADRAT zdefiniowane — od tej pory zna nowe słowo. Napiszmy zatem

? kwadrat

i faktycznie rysuje się od razu cały kwadrat. Słowa kwadrat możemy teraz używać i w nowych procedurach, na przykład: OTO ROZETA POWTÓRZ 8 [kwadrat pw 45]

JUŻ

Wywołajmy

? rozeta

i rysuje się kwadrat za kwadratem, obracany o 45 stopni. Zdefiniujmy teraz taką procedurę: 

OTO SERWETKA 
POWTÓRZ 9 [rozeta prawo 10] 
JUŻ

Po wywołaniu „serwetka”, na ekranie powstaje dość efektowny rysunek, przypominający ręcznie robioną serwetkę. Spróbujmy jeszcze:

OTO REKLAMA
SERWETKA
PISZ [ALE ŁADNA SERWETKA!)
JUŻ

Teraz mamy serwetkę z podpisem. W tym momencie radzę poeksperymentować sobie i korzystając z możliwości definicji procedur, pohasać żółwiem po ekranie. Dobrze jest definiować procedury po uprzednim przejściu do trybu tekstowego (pisząc TEKSTY lub TS), bo wszystkie teksty widzimy. Odpowiednikiem „OTO” — początku definicji procedury — jest w angielskim LOGO „TO”, a odpowiednikiem „JUŻ” — „END”.

Narysujmy teraz kwadrat i „wjedźmy” żółwiem do jego środka. Spróbujmy na przykład: 

? kwadrat pod prawo 45 naprzód 20

Podane w jednej linii komendy spowodują narysowanie kwadratu, podniesienie rysującego piórka, obrócenie żółwia o 45 stopni w prawo i przeniesienie go wewnątrz kwadratu. Podnieśliśmy piórko, by żółw nie mazał „wchodząc” do wnętrza. Napiszmy teraz: 

ZAMALUJ

i cały kwadrat zostanie wypełniony kolorem kreski. Komenda ZAMALUJ lub w skrócie ZAM powoduje wypełnienie kolorem kreski figury, wewnątrz której znajduje się żółw. Pozwala nam ona dowolnie kolorować rysunki na ekranie, ale trzeba o niej wiedzieć jeszcze coś więcej. Zanim opowiemy sobie o zmienianiu kolorów piórka-pisaka, tła, ramki i o sposobie, w jaki komenda ZAMALUJ działa, spróbujmy narysować na ekranie koło. Ponieważ ekran składa się z punktów, więc na pewno idealnego koła nic uda nam się naryso

wać. Wystarczy więc przyjąć, że koło to wielokąt foremny o dość dużej liczbie boków, np. 36. Zdefiniujmy procedurę: 

OTO KOLO
POWTÓRZ 36 [NP 10 PW 10]
JUŻ

Zdefiniowaliśmy 36-kąt. Żółw „idzie” 10 kroków do przodu i skręca o 10 stopni w prawo. Jeśli 36 razy to powtórzyć, narysuje figurę, która może być uważana za koło. Ile kroków wynosi promień tego koła? Wykorzystując znajomość elementarnego wzoru na obwód koła, mamy: obwód = 2*pi*r, zatem r = obwód/(2*pi). No, ale obwód naszego koła, to tyle, ile „przeszliśmy” żółwiem, czyli 36*10. Stąd promień: r = 36*10/(2*3.14). Zauważmy, że wzór ten pozwala rysować koła o dowolnych promieniach, bo liczba kroków w jednym ruchu wynosi podobnie: liczba kroków = 2*pi*r/36. W jaki sposób narysować kolo o dowolnym promieniu, korzystając tylko z jednej uniwersalnej procedury, dowiemy się w następnym odcinku. Na razie zdefiniujmy procedurę rysującą koło o promieniu np. 40. Środek tego koła ma znajdować się w punkcie, gdzie znajduje się żółw. A zatem: 

OTO KOŁO
POD NP 40 PW 90 OPU OPU - opuść
POWTÓRZ 36 POD - podnieś
 NP 2*PI*40/36 PW 10 LW - lewo
POD LW 90 WS 40 OPU WS - wstecz
JUŻ

Żółw był w środku, ale trochę z boku. I dlatego pewne miejsca nie zostały pokolorowane. Sposób, w jaki rysunek zostaje zamalowany, jest następujący: 1. Z miejsca, gdzie stoi żółw, prowadzona jest pionowa kreska (w górę i w dół) do brzegów figury.

Zauważmy, że jeśli wewnątrz są jakieś niepotrzebne kreski (jak w ostatnim przykładzie z kołem) mają one najczęściej wpływ na kolorowanie. Dlatego też, aby pokolorować „wklęsłe” figury, należy żółwiem kilkakrotnie „najeżdżać” na kawałki niezamalowane. Sposób ten nie jest zbyt wygodny, ale w angielskim LOGO w ogóle nie można figur zamalowywać (nie ma odpowiednika ZAMALUJ). Algorytmy, skutecznie wypełniające kolorem figurę zamkniętą, wymagają dość dużo pamięci czy to na swą treść (dość skomplikowana strategia), czy na pamiętanie rysunku (algorytm „pożaru prerii”). Dla potrzeb LOGO na Spectrum zaadaptowany został ten prosty, ale i bardzo mało kosztowny sposób kolorowania. Siłą rzeczy nie jest najlepszy.

Jeśli dysponujemy telewizorem lub monitorem kolorowym, możemy pobawić się w robienie różnokolorowych rysunków (w telewizorach czarno-białych będą to odcienie). Mamy do dyspozycji 8 kolorów. Komenda ustawiająca kolor pisaka to po prostu PISAK n, gdzie n to numer koloru widoczny na klawiaturze. Tak więc PISAK 2 spowoduje, że żółw i jego ewentualna kreska będą od tej chwili czerwone. Podobnie jest z ustawieniem koloru tła — TŁO 6 — spowoduje, że tło rysunku stanie się żółte. I jeszcze tzw. BORDER, czyli margines-ramka. Piszemy po prostu RAMKA 1 i „border” stanie się niebieski. Wszystkie te komendy odnoszą się do grafiki. W trybie tekstowym również możemy ingerować w kolory wyświetlanych tekstów. Czynimy to komendą:

KOLORYT [n m], gdzie n to numer koloru tła tekstów, a m to numer koloru atramentu.

Osobiście radzę przy dłuższej pracy, zwłaszcza z telewizorem używać do tła i ramki koloru czarnego, a do atramentu żółtego, — mniej męczą się oczy. Należy więc wykonać: PISAK 6 TŁO 0 KOLORYT [0 6). Warto przy okazji wiedzieć, że informacje o niektórych kolorach są dostępne dzięki funkcjom: TŁO↑, PISAK↑, KOLORYT↑. Spróbujmy napisać:

(PISZ „TŁO TŁO↑ „PISAK PISAK↑ „KOLORYT KOLORYT↑)

a potem zróbmy np. PISAK 4 i ponownie powyższą linię. Kolor pisaka zostanie już zaktualizowany. Cała linia, a raczej komenda PISZ została wzięta w nawiasy okrągłe. Normalnie komenda PISZ ma jeden parametr, którego wartość wyświetla. Postawienie nawiasu przed komendą powoduje, że wszystko, aż do nawiasu zamykającego, zostanie potraktowane jako parametr PISZ. Tak więc tutaj zostało wypisane po kolei: słowo TŁO

(bo było „TŁO), wartość liczbowa dla koloru tła (wartość funkcji TŁO↑, której działanie jest identyczne jak funkcji PI↑, czyli zwrócenie wartości), słowo PISAK („PISAK), numer pisaka (PISA↑), słowo KOLORYT („KOLORYT) i dwie liczby — kolor tła i atramentu dla napisów (KOLORYT↑). Zdefiniujmy teraz następującą procedurę:

OTO KOLORY
POWTÓRZ 8 [PISAK PISAK↑+1 NP 40 PW 45] 
JUŻ

Zobaczymy ośmiokąt z każdym bokiem innego koloru. Zauważmy, że za każdym razem ustawiamy kolor pisaka na bieżący (PISAK↑) plus jeden, tzn. zmieniamy kolor. Gdy chcemy go zmienić z białego na czarny, dodajemy do siódemki jeden, ale nie zrobi się osiem, lecz zero — kolory działają w kółko. Zróbmy teraz inne doświadczenie. Wywołajmy zdefiniowaną wcześniej procedurę KOŁO — rysującą koło o promieniu 40 kroków, a następującej procedurze: 

OTO ZGRZYT
CS 
PISAK 6
TŁO 7
KOŁO 2
ZAMALUJ
POD
NP 40 
PISAK 0
OPU
KOŁO 2
ZAMALUJ
JUŻ

Cóż się dzieje? Kolory nakładając się, zmieniają całe kwadraciki. Dzieje się tak dlatego, że w obrębie takiego kwadracika (8 punktów na 8) są dostępne tylko dwa kolory — tła i kreski — co za tym idzie, któryś z kolorów kresek wybiera się ostatni. Napiszmy teraz 

NEG

i zobaczymy, jak przedziwny jest negatyw tego rysunku. NEG to komenda powodująca zrobienie negatywu ekranu. Powrót do „pozytywu”, to znów NEG. Spróbujmy wprowadzić taką procedurę: 

OTO MIGMIG
POWTÓRZ 100 [NEG] 
JUŻ

Przy wywołaniu widać jak ekran jest podzielony na trzy pasy — co zresztą widać najlepiej przy wgrywaniu jakiejkolwiek gry (winiety-obrazki reklamowe wgrywają się partiami od góry).

Przypomnijmy znane nam już słowa języka LOGO: 

 

PTI LOGO    angielskie LOGO    znaczenie

PŻ    showturtle st    pokaż żółwia

SŻ    hidetirtle ht    schowaj żółwia

naprzód np    forward fd    naprzód o n kroków

wstecz ws    back bk    wstecz o n kroków

prawo PW    right rt    w prawo o n stopni

lewo lw    left lt    w lewo o n stopni

czyść  cs    clearscreen cs    wyczyść ekran

zmaz    clean    wyczyść ekran, ale żółw pozostałe gdzie był

wróć    home    żółw na środek

pod    penup pc    podnieś pisak

opr    pendown pd    opuść pisak

powtórz    repeat    powtórz n razy coś

ścieranie    penerase pe    żółw ściera gumka

teksty ts    texxtscreen ts    tryb tekstowy

pisz PP    print PR    pisz - wyświetl coś

pi↑    ----    stała pi

OTO    TO    początek definicji — nagłówek

już    end    koniec definicji

zamaluj zam    ----    zamal. figury

pisak    setpc    ustala kolor pisaka

PISAK↑    pencolour PC    zwraca numer koloru pisaka

TŁO    SETBG    ustala kolor tła

TŁO↑    BACKGROUND BG     zwraca numer koloru tła 

RAMKA    SETBORDER SETBG    ustala kolor

KOLORYT    SETTC    ustala kolory tła i atramentu dla napisów  

KOLORYT↑    textcolour tc    zwraca numery kolorów 

NEG koloru tła    ----    negatyw ekranu

 

 

Pracując w LOGO możemy całkowicie zapomnieć, że na klawiszach ZX Spectrum są jakieś słowa np. INPUT czy RETURN. Dla nas ważne są tylko litery (duże po wciśnięciu CAPS SHIFT) i niektóre inne znaki np. + / itp. Wszystko w LOGO wprowadza się znaczek po znaczku, co wcale nie jest tak niewygodne, jak się niektórym może zdawać. Wszystkie profesjonalne komputery czy mikrokomputery mają klawiaturę podobną do maszyny do pisania, a nic do słownika. W Spectrum zastosowano taką klawiaturę (a raczej taki sposób pracy z Basic’em) ze względu na małą pamięć (każde słowo BASICa kodowane jest jako jeden znak) oraz ze względu na analfabetów, którzy napisaliby np. SAFE zamiast SAVE.

W przyszłym miesiącu poznamy procedury z parametrami, nauczymy się też posługiwać edytorem — by móc poprawiać treści procedur oraz wyjaśnimy sobie to co na pewno każdy zauważył. Po kilku chwilach zabawy żółwiem „wyjeżdża” on nam poza ekran (celowo lub nic) i wtedy pojawia się po przeciwnej stronie. Dlaczego tak się zachowuje i czy może inaczej — to właśnie wyjaśnimy sobie w przyszłym odcinku.

„SIS”

SiS

Połączone artykuły
„LOGO”
SiS - IKS 4/1986

W poprzednim odcinku celowo pominąłem kilka ogólnych uwag odnośnie do programowania w LOGO. Pierwsza dotyczy wywołania LOGO, czyli uruchomienia translatora języka. Od tej pory pisząc LOGO, będę miał na myśli polskie LOGO, a jest ono dostępne w postaci interpretera (program PTI LOGO) na mikrokomputerze ZX Spectrum.