Programowanie strukturalne w Logo

Krystyna Zielińska [email protected] nauczyciel informatyki Szkoła Podstawowa i Gimnazjum w Szalowej Programowanie strukturalne w Logo 1. Wstęp Pod...
Author: Liliana Sobczyk
1 downloads 0 Views 421KB Size
Krystyna Zielińska [email protected] nauczyciel informatyki Szkoła Podstawowa i Gimnazjum w Szalowej

Programowanie strukturalne w Logo 1. Wstęp Podstawowym celem niniejszego opracowania jest przedstawienie, w sposób możliwie prosty, w oparciu o prezentację rozwiązanych przykładów, zasad programowania strukturalnego w Logo, ze szczególnym uwzględnieniem wersji Logo Komeniusz. Przy wyborze przykładów, kierowałam się możliwością przedstawienia charakterystycznych mechanizmów tego języka. Jednym z istotnych założeń przyświecających twórcom Logo było to, aby instrukcje w tym języku, a w konsekwencji zapisany algorytm brzmiał podobnie do zdań wyrażonych w języku naturalnym. Z tego też względu przyjęto zapis procedur w polskiej wersji.

. 2. Charakterystyka języka Logo Język programowania Logo został opracowany przez Seymourta Paperta i jego

współpracowników

z

Laboratorium

Sztucznej

Inteligencji

w

MIT

(Massachussetts Institute of Technology), zainspirowanych pracami i działalnością francuskiego psychologa i pedagoga J.Piageta, który badał sposoby myślenia dzieci, w różnych etapach ich rozwoju i podejmował próby przyspieszenia tego rozwoju. Logo powstało na początku lat siedemdziesiątych, jako język edukacyjny, przeznaczony do pierwszych kontaktów z komputerem. Spełnia w dużym stopniu warunki

stawiane

nowoczesnym

językom

programowania.

Jest

elastyczne

i jednocześnie łatwe oraz wygodne w użyciu, czytelne i nieobciążające zbędnymi szczegółami użytkownika przy rozwiązywaniu problemów z wykorzystaniem komputera. Mimo swojej prostoty i łatwości w posługiwaniu się nim, Logo jest językiem dość wszechstronnym, nie ograniczającym programisty do wąskiej klasy zastosowań. S.Papert charakteryzuje Logo jednym zdaniem: „Logo nie ma progów i sufitów, jest łatwe do nauczenia się, ale równocześnie jest interesującym wyzwaniem dla wytrawnych programistów”.

1 Charakterystycznym elementem tego języka jest tzw. „grafika żółwia”, najbardziej widoczna w pierwszych kontaktach z Logo. Logo wykorzystuje grafikę do poglądowego, wręcz wciągającego do zabawy, uczenia podstawowych pojęć informatyki związanych z programowaniem strukturalnym, tworzeniem procedur, posługiwaniem się mechanizmem rekurencji, tworzeniem procedur niezmienniczych i prawidłowym

konstruowaniem

wymiany

parametrów

między

poszczególnymi

segmentami programu (procedurami). Logo jest językiem programowania zorientowanym obiektowo. Tym mianem określa się języki programowania, w których wszystko, bez względu na znaczenie jest obiektem. Podobnie jak liczba jest obiektem, tak jest nim również zbiór liczb, czy w ogóle zbiór obiektów zorganizowanych w listy i jest nim także treść procedury. W Logo nie istnieje praktycznie pojęcie programu w rozumieniu klasycznym (tak jak rozumiemy pojęcie programu w języku Pascal). Program jako całość, konkretny tekst, napisany od nagłówka do słowa ”end” czy „stop”, wywoływany najczęściej przez podanie nazwy lub zlecenia „run”, nie ma zupełnie swojego odpowiednika w Logo. Język ten jest językiem proceduralnym i programowanie w nim polega na tworzeniu procedur rozwiązujących konkretne zadanie. Zwykle procedury te używają innych, te z kolei innych i w rzeczywistości może być to bardzo rozbudowana struktura. Wywołanie głównej procedury, to jakby wywołanie programu, ale można też wywołać każdą procedurę osobno, aby na przykład sprawdzić jej poprawność. Tak więc w środowisku Logo mamy do dyspozycji pojedyncze procedury, które wiążemy w logiczną całość lub używamy ich samodzielnie w zależności od tego co chcemy osiągnąć. Praca

z

programem

jest

konwersacyjna

(Logo

jest

językiem

interpretowanym) i bardzo wygodna. W dowolnej chwili można np. wyświetlić na ekranie nazwy zdefiniowanych procedur wraz i ich parametrami lub treść dowolnej procedury czy procedur. Parametry procedur nie są reprezentantami określonych ściśle obiektów. W chwili wywołania w ich miejsca można wstawić dowolny obiekt – parametr bowiem określa że tutaj ma być „coś”, a nie konkretna liczba, napis (słowo), zmienna określonego typu. Parametr w Logo jest szczególnym rodzajem zmiennej – określa on pewną wartość, jaka będzie wstawiona w jego miejsce w chwili wywołania

2 procedury i jako taki nie przedstawia wartości. Ma znaczenie napisu, mówiącego, że w danym miejscu w danej instrukcji będzie kiedyś konkretna wartość. W językach klasycznych (np. w Pascalu), gdzie istnieje pojęcie procedury parametr musi mieć ściśle określony typ. W języku Logo pojęcie zmiennej jest inne aniżeli w językach klasycznych. Mamy tu bowiem do czynienia z nazwami, które mogą zmieniać miejsce swojego „przyczepienia” (operacja przypisz) i oznaczać różne jakościowo obiekty, zarówno proste liczby, jak i złożone struktury, czy nawet obrazy. Nie istnieje pojęcie typu zmiennej. Zmienna albo nie ma wartości, albo reprezentuje obiekt – coś dowolnego pod względem znaczenia. Tok rozumowania przy programowaniu w Logo jest zgodny z naszym naturalnym sposobem myślenia – rozbijania problemu na mniejsze części, które dadzą się już łatwo rozwiązać i składania z tych części rozwiązania całości. Fakt, iż bardzo łatwo użytkownik może sam rozbudować Logo o nowe instrukcje (procedury) i optymalnie dopasować je do rozwiązania określonego problemu, stawia ten język wysoko wśród języków wysokiego poziomu.

3. Grafika żółwia Cechą charakterystyczną w Logo jest tzw. „grafika żółwia” (ang. turtle graphics). Jej istotą jest użycie pełzającego po ekranie wskaźnika, mającego charakterystyczny kształt na przykład równoramiennego trójkąta (zwanego żółwiem), którym można sterować z klawiatury przy użyciu prostych komend i w ten sposób rysować obraz na ekranie. Żółw ma w każdym momencie określone dwie współrzędne położenia na ekranie (zorientowane w układzie kartezjańskim) oraz kąt, określający kierunek w jakim jest ustawiony. Początek układu współrzędnych jest w środku ekranu. Zakresy współrzędnych X i Y zależą od rozdzielczości ekranu. Przy użyciu komend języka Logo można przesuwać żółwia do przodu lub do tyłu na zadaną odległość (liczbę kroków żółwia), albo obracać go w miejscu w prawo lub w lewo o zadaną liczbę stopni. Można przesuwać żółwia do dowolnego miejsca ekranu o zadanych współrzędnych, nie zmieniając jego kierunku, albo skierować go pod dowolnym, zadanym kątem, nie zmieniając jego położenia. Żółw trzyma pióro, które może

3 podnieść, aby przesuwanie nie pozostawiało śladu, albo opuścić i wtedy w momencie ruchu żółwia na ekranie pozostaje ślad. Można określić kolor rysowanej kreski, do czego służy specjalna komenda. Zmieniając kolor pióra w czasie rysowania można otrzymać obraz o dowolnie wybranych barwach. Żółw

może

również ścierać już narysowane kreski, rysując na nich następne w kolorze tła, bądź też przez ponowne przejście po tych kreskach po ustawieniu pisaka w stan ścierania specjalną komendą. Ta możliwość pozwala na usuwanie błędów

w tworzonych

rysunkach oraz na tworzenie grafiki animowanej. Poszczególne komendy sterujące żółwiem można wydawać komputerowi pojedynczo lub można używać dowolnych sekwencji komend.

Najbardziej popularne komendy Logo, to: Postać polecenia

Jego skrót

naprzód liczba_kroków. wstecz liczba_kroków prawo kąt

np ws pw

Jego znaczenie Idż naprzód o daną liczbę kroków Idż do tyłu o daną liczbę kroków Obróć się w prawo o dany kąt (w

stopniach)

lewo kąt

lw

Obróć się w lewo o dany kąt (w

stopniach)

podnieś opuść czyść

pod opu cs

Podnieś pisak Opuść pisak Zmaż rysunki na ekranie

Konstruowanie programu jako hierarchicznej, zagnieżdżonej struktury procedur nazywa się w informatyce programowaniem strukturalnym. Natomiast postępowanie przy rozwiązywaniu problemów charakteryzujące się rozwiązaniem problemu

od

najwyższego,

koncepcyjnego

poziomu,

do

poziomu

języka

programowania metodą kolejnych ulepszeń (ang. stepwise refinement) nazwano programowaniem

zstępującym

(ang.top-down).

Odwrotną

możliwością

jest

programowanie wstępujące (ang. botton-up), w którym do rozwiązania całego problemu dochodzi się od określenia procedur najbardziej elementarnych. W praktycznym rozwiązywaniu problemów metodami informatycznymi, rzadko kiedy stosuje się metodę zstępującą lub wstępującą w czystej postaci, natomiast łączy się te metody ze sobą według konkretnych potrzeb. Wspólne dla obu metod jest dostrzeżenie w rozwiązywanym zadaniu z pomocą komputera hierarchicznej struktury procedur.

4

4. Projekt rysujący szereg domków (z jednym żółwiem) Celem projektu jest narysowanie za pomocą grafiki żółwia, domków przedstawionych na rysunku 1.

Rys. 1 Widok projektu

Aby

utworzyć

przedstawiony

rysunek

należy

posłużyć

się

metodą

programowania strukturalnego, polegającą na konstruowaniu programu jako hierarchicznej, zagnieżdżonej struktury procedur. Przy opracowywaniu tego typu projektów często wykonuje się analizę problemu (w tym przypadku rysunku) i wyodrębnia mniejsze, zazwyczaj powtarzalne elementy lub czynności, czyli od najwyższego koncepcyjnego poziomu, do poziomu języka programowania. Jest to metoda top-down, inaczej metoda zstępująca. Natomiast przy opracowywaniu procedur

często

rozpoczyna

się

rozwiązanie

od

opracowania

najbardziej

elementarnych procedur i przez stopniowe konstruowanie procedur wyższego poziomu dochodzi się do rozwiązania całego problemu. Jest to metoda botton-up, inaczej metoda wstępująca. W rozwiązywaniu zadań często łączy się ze sobą te metody.

5 W pracy posłużono się metodą top-down do analizy projektu, której wynik w postaci grafu przedstawiono na rysunku 2. Natomiast według metody botton-up opracowywano poszczególne procedury, przedstawione w dalszej części pracy.

Rys. 2 Graf projektu „domy”. Jak widać z grafu najbardziej elementarną procedurą projektu jest procedura „kwadrat”.

oto kwadrat :bok powtórz 4 [np :bok pw 90] już

Rys. 3 Rezultat działania procedury kwadrat 50

Z czterech kwadratów budowane jest okno, co przedstawia procedura okna. Niezmiennikiem procedury jest tu położenie żółwia, który na początku, oraz na zakończenie procedury jest w środku okna, ustawiony pionowo.

6

oto okna :rozmiar powtórz 4 [kwadrat 0,5 * :rozmiar pw 90] już

Rys. 4 Rezultat działania procedury okna 50

Kolejną procedurą jest procedura rysująca zarys budynku, nazwana parter. Również tu zachowane jest niezmiennicze położenie żółwia, w pewnym stałym miejscu.

oto parter :szerokość_parteru :wysokość_parteru lw 90 np 0,5 * :szerokość_parteru pw 90 np :wysokość_parteru pw 90 np :szerokość_parteru pw 90 np :wysokość_parteru pw 90 np 0,5 * :szerokość_parteru pw 90 już

Rys. 5 Rezultat działania procedury parter 180 80

Pozostałe procedury rysujące inne elementy obrazu wymagają pomocniczej procedury do bezśladowego przesuwania żółwia w nowe położenie. Jest to procedura przesuń.

oto przesuń :dx :dy pod np :dy pw 90 np :dx lw 90 opu już

7 Następnym elementem programu jest procedura rysująca drzwi, nazwana drzwi.

oto drzwi :szerokość_drzwi :wysokość_drzwi lw 90 np 0,5 * :szerokość_drzwi pw 90 np :wysokość_drzwi pw 90 np :szerokość_drzwi pw 90 np 0,5 * :wysokość_drzwi pw 90 np 0,2 * :szerokość_drzwi ws 0,2 * :szerokość_drzwi lw 90 np 0,5 * :wysokość_drzwi pw 90 np 0,5 * :szerokość_drzwi pw 90 przesuń 0 1 ustalkolormalowania 4 zamaluj przesuń 0 -1 już

Rys. 6 Rezultat działania procedury drzwi 20 60

Kolejna procedura powinna rysować dach. Ale do narysowania kompletnego dachu potrzebna jest bardziej elementarna procedura rysująca komin, przedstawiona poniżej.

oto komin :wymiar lw 90 np 0,5 * :wymiar pw 90 np 2 * :wymiar pw 90 np :wymiar pw 90 np 2 * :wymiar pw 90 np 0,5 * :wymiar pw 90 przesuń 0 1 ustalkolormalowania 4 zamaluj przesuń 0 -1 już

8

Rys. 7 Rezultat działania procedury komin 15

I teraz jest kolej na procedurę rysującą dach (z kominem). Jak można zauważyć i tu też została zachowana zasada niezmienniczości położenia żółwia.

oto dach :szerokość_dachu :wysokość_dachu lw 90 np 0,5 * :szerokość_dachu pw 135 np :wysokość_dachu * pwk 2 pw 45 np :szerokość_dachu - 2 * :wysokość_dachu pw 45 np :wysokość_dachu * pwk 2 pw 135 np 0,5 * :szerokość_dachu pw 90 przesuń 0 1 ustalkolormalowania 12 zamaluj przesuń 0 -1 przesuń 0 :wysokość_dachu komin 0,2 * :wysokość_dachu przesuń 0 ( - :wysokość_dachu ) już

Rys. 8 Rezultat działania procedury dach 180 30

Procedury parter, dach, okna, drzwi umożliwiają już utworzenie rysunku przedstawiającego pojedynczy dom.

oto dom :szerokość_domu parter :szerokość_domu 0,5 * :szerokość_domu przesuń 0 0,5 * :szerokość_domu dach 1,2 * :szerokość_domu 0,3 * :szerokość_domu

9

przesuń 0 -0,5 * :szerokość_domu drzwi 0,2 * :szerokość_domu 0,35 * :szerokość_domu przesuń -0,3 * :szerokość_domu 0,25 * :szerokość_domu okna 0,2 * :szerokość_domu przesuń 0,3 * :szerokość_domu -0,25 * :szerokość_domu przesuń 0,3 * :szerokość_domu 0,25 * :szerokość_domu okna 0,2 * :szerokość_domu przesuń 0 ( 0,2 * :szerokość_domu + 1 ) ustalkolormalowania 14 zamaluj przesuń 0 ( - 0,2 * :szerokość_domu - 1 ) przesuń -0,3 * :szerokość_domu -0,25 * :szerokość_domu już

Rys. 9 Rezultat działania procedury dom 156 Zachowanie niezmienniczości położenia żółwia przy rysowaniu pojedynczego domu umożliwia łatwe skonstruowanie procedury rysującej szereg domków różnej wielkości (i to również dzięki zastosowaniu podprocedur z parametrami).

oto domy :szerokość cs przesuń -160 -130 powtórz 7 [dom :szerokość przesuń 0,9 * :szerokość 0,68 * :szerokość przyp "szerokość :szerokość * 0,80] już

10

Rys. 10 Rezultat działania procedury domy 120

W oknie głównym Logo Komeniusza wciskając klawisz F4 otwieramy okno Pamięć, w którym widzimy wszystkie procedury wchodzące w skład naszego projektu. Żółte kółeczko przy nazwie procedury oznacza, że jest otwarte okno podglądu danej procedury, natomiast czerwone kółeczko oznacza, że dana procedura ma otwarte okno do edycji, w której możemy poprawiać (edytować) daną procedurę. Aby otworzyć okno podglądu danej procedury wystarczy kliknąć dwuklikiem na nazwę tej procedury.

Rys. 11 Otwarte okienko Pamięć

11 Natomiast aby przejść do edycji danej procedury trzeba wcisnąć klawisz F11 po zaznaczeniu nazwy procedury lub z menu górnego wybrać Obiekty i później Edycja. Jest też możliwe bezpośrednie przejście z okna podglądu do okna edycji poprzez dwukrotne kliknięcie na podglądzie. W danej chwili może być edytowana tylko jedna procedura. Okienka podglądu, edycji, pamięci zamykamy w zwykły sposób przyciskiem

.

Nowe procedury piszemy bezpośrednio w głównym oknie Logo Komeniusza. Możemy je również wprowadzać w trybie edycyjnym, wybierając najpierw okno Pamięć (F4), z menu należy wybrać Obiekty, następnie Dodaj procedurę... wpisując w polu tekstowym Nazwę nowej procedury (bez parametrów –parametry wpisuje się później w edycji) i zatwierdzić OK.

5. Podsumowanie Logo Komeniusz jest edukacyjnym językiem programowania i zarazem środowiskiem

dydaktycznym,

to

znaczy

należy

do

kategorii

produktów

najcenniejszych, takich, które umożliwiają zaspokojenie podstawowej potrzeby współczesnego człowieka, a mianowicie potrzeby stałego uczenia się i rozwoju. Logo Komeniusz jest środowiskiem, które odpowiada potrzebom uczniów i nauczycieli. Najbardziej atrakcyjnym, aktywnym i skutecznym sposobem nauki jest samodzielne rozwijanie projektów dydaktycznych, np. gier edukacyjnych. Logo Komeniusz jest nowoczesnym językiem programowania funkcyjnego, w pełni zgodnym z najlepszymi wzorcami, umożliwiającymi programowanie wyrafinowanych operacji na złożonych strukturach danych.

12

6. Literatura ¾ A.Walat; Wprowadzenie do języka i środowiska Logo Komeniusz OEIiZK, Warszawa 1996 ¾ A.Jeske: Logo w zadaniach, PTE Zielona Góra 1988 ¾ A. Walat: Za pomocą komputera. Podręcznik dla klasy I Informatyka dla gimnazjalistów. Oficyna Wydawnicza Pazdro 1999 ¾ A. Drogowski; Elementy informatyki Podręcznik dla ucznia Czarny Kruk Bydgoszcz 1998 ¾ Informatyka w szkole Poradnik dyrektora i nauczyciela Vulcan Wrocław 1993 ¾ A. Drogowski Zbiór ćwiczeń z Logo Czarny Kruk Bydgoszcz 2000 ¾ E. Gurbiel, G.Hardt-Olejniczak, E.Kołczyk, H.Krupnicka, Maciej M.Sysło Informatyka Podręcznik dla ucznia gimnazjum WSiP Warszawa 2000 ¾ G.Koba: Informatyka Podstawowe tematy nie tylko dla gimnazjum WS PWN Warszawa-Wrocław 1999 ¾ M.Mordaka; Informatyka 2000 Podręcznik dla gimnazjum II rok nauki Czarny Kruk Bydgoszcz 2001 ¾ A. Walat: Elementy informatyki dla szkół średnich cz. I Wydawnictwa Edukacyjne Warszawa 1993 ¾ S. Waligórski Programowanie w języku Logo WNT Warszawa 1990

13

7. Spis rysunków Rys. 1 Widok projektu................................................................................................ 4 Rys. 2 Graf projektu „domy”....................................................................................... 5 Rys. 3 Rezultat działania procedury kwadrat 50........................................................ 5 Rys. 4 Rezultat działania procedury okna 50............................................................. 6 Rys. 5 Rezultat działania procedury parter 180 80 .................................................... 6 Rys. 6 Rezultat działania procedury drzwi 20 60 ....................................................... 7 Rys. 7 Rezultat działania procedury komin 15........................................................... 8 Rys. 8 Rezultat działania procedury dach 180 30...................................................... 8 Rys. 9 Rezultat działania procedury dom 156 ........................................................... 9 Rys. 10 Rezultat działania procedury domy 120...................................................... 10 Rys. 11 Otwarte okienko Pamięć............................................................................. 10

14

Spis treści 1

Wstęp .................................................................................................................. 0

2

Charakterystyka języka Logo ........................................................................... 0

3

Grafika żółwia..................................................................................................... 2

4

Projekt rysujący szereg domków (z jednym żółwiem) ......................................... 4

5

Podsumowanie.................................................................................................. 11

6

Literatura ........................................................................................................... 12

7

Spis rysunków ................................................................................................... 13