<!--Dear translator: please NEVER translate the id or anything inside the tags as they are needed in english by the application Thanks a lot in advance.--> <chapter id="reference"> <title >Dokumentacja programistyczna języka &logo; &kturtle;</title> <para >Poniżej znajduje się dokumentacja języka &logo; używanego przez &kturtle;. W tym rozdziale najpierw zostaną krótko wymienione <link linkend="different-instructions" >różne typy instrukcji</link >. Następnie zostaną objaśnione <link linkend="commands" >komendy</link >. Po nich <link linkend="containers" >kontenery</link >, <link linkend="math" >terminy matematyczne</link >, <link linkend="questions" >zapytania</link > oraz <link linkend="controlling-execution" >kontrolery wykonawcze</link >. Na końcu pokazane zostanie jak za pomocą <link linkend="learn" >nauczyciela</link > tworzyć własne komendy.</para> <sect1 id="different-instructions"> <title >Różne typy instrukcji</title> <para >Jak każdy inny język programowania ,LOGO posiada różne typy wyrazów i symboli. Oto różnice pomiędzy typami i krótkie wyjaśnienia.</para> <sect2 id="command"> <title >Komendy</title> <para >Przy użyciu komend wskazujemy &kturtle; czynności do wykonania. Niektóre z komend potrzebują argumentów wejściowych a inne wyjściowych. <screen ># naprzód to komenda z argumentem wejściowym, tutaj jest to liczba 100: naprzód 100 </screen> </para> <para >Szczegółowy opis wszystkich komend &kturtle; znajduje się <link linkend="commands" >tutaj</link >.</para> </sect2> <sect2 id="number"> <title >Liczby</title> <para >Każdy użytkownik z pewnością wie trochę o liczbach. Sposób w jaki liczby używane są przez &kturtle; niezbyt różni się od języka mówionego czy matematyki. </para> <para >Mamy liczby naturalne: <userinput >0</userinput >, <userinput >1</userinput >, <userinput >2</userinput >, <userinput >3</userinput >, <userinput >4</userinput >, <userinput >5</userinput >, itd. Liczby ujemne: <userinput >-1</userinput >, <userinput >-2</userinput >, <userinput >-3</userinput >, itd. Oraz liczby dziesiętne np: <userinput >0.1</userinput >, <userinput >3.14</userinput >, <userinput >33.3333</userinput >, <userinput >-5.05</userinput >, <userinput >-1.0</userinput >. </para> <para >Liczby mogą być używane w <link linkend="math" >obliczeniach matematycznych</link > oraz <link linkend="questions" >zapytaniach</link >. Mogą być również wkładane do <link linkend="containers" >kontenerów</link >.</para> <para >W <link linkend="the-code-editor" >edytorze kodów</link > liczby są <glossterm >podświetlone</glossterm > na niebiesko.</para> </sect2> <sect2 id="string"> <title >Łańcuchy znaków</title> <para >Najpierw przykład: <screen> pisz "Cześć, Jestem łańcuchem znaków." </screen > W tym przykładzie <userinput >pisz</userinput > jest komendą a <userinput >"Cześć, Jestem łańcuchem znaków."</userinput > łańcuchem znaków. Łańcuch zaczyna i kończy się znakiem <userinput >"</userinput >, dzięki niemu &kturtle; rozpoznaje łańcuch znakowy.</para> <para >Łańcuchy mogą być wkładane do <link linkend="containers" >kontenerów</link >. ale nie mogą być używane w <link linkend="math" >obliczeniach matematycznych</link > i <link linkend="questions" >zapytaniach</link >.</para> <para >W <link linkend="the-code-editor" >edytorze kodów</link > liczby są <glossterm >podświetlone</glossterm > na kolor ciemnoczerwony.</para> </sect2> <sect2 id="name"> <title >Nazwy</title> <para >Przy użyciu języka programowania &logo; tworzy się nowe obiekty. Pisząc programy często potrzebować będziemy <link linkend="containers" >kontenerów</link > a w niektórych przypadkach <link linkend="learn" >nauczyciela</link > do tworzenia nowych komend. Tworząc <link linkend="containers" >kontener</link > lub nową komendę za pomocą <link linkend="learn" >nauczyciela</link > należy określić ich nazwę.</para> <para >Można wybrać dowolną nazwę, pod warunkiem, iż nie odnosi się ona już do niczego. Np. nie można nazwać kontenera <link linkend="forward" >naprzód</link >, jako, że jest to nazwa komendy. <screen> # tutaj naprzód jest używane jako kontener, ale ta nazwa jest już używana jako komenda # zatem pokaże się komunikat błędu: naprzód = 20 # natomiast działać będzie: naprzód 20 </screen > Nazwy mogą zawierać tylko litery, cyfry oraz linie poziome (_). ale muszą zaczynać się od litery. </para> <para >Więcej przykładów oraz dokładniejsze wyjaśnienie znajduje się w dokumentacji <link linkend="containers" >kontenerów</link > oraz <link linkend="learn" >nauczyciela</link >. </para> </sect2> <sect2 id="assignment"> <title >Przypisania</title> <para >Przypisań dokonuje się za pomocą symbolu <userinput >=</userinput >. W językach programowania zaleca się czytanie symbolu <userinput >=</userinput > nie jako równa się ale jako oznacza. Zwrot równa się bardziej odpowiada symbolowi <userinput >==</userinput > będącemu <link linkend="questions" >zapytaniem</link >.</para> <para >Przypisań dokonuje się z dwóch powodów, (1) by dodać zawartość do <link linkend="containers" >kontenerów</link >, oraz (2) by zmodyfikować zawartość kontenerów. Na przykład: <screen >x = 10 # kontener x zawiera teraz liczbę 10 W = "Mój wiek to: " # kontener W zawiera teraz łańcuch"Mój wiek to: " # poniższa instrukcja drukuje na płótnie zawartość kontenerów 'W' i 'x' pisz W + x </screen> </para> <para >Więcej przykładów znajduje się z sekcji wyjaśniającej <link linkend="containers" >kontenery</link >.</para> </sect2> <sect2 id="math-symbols"> <title >Symbole matematyczne</title> <para >&kturtle; rozpoznaje wszystkie podstawowe symbole matematyczne: plus (<userinput >+</userinput >), minus (<userinput >-</userinput >), mnożenie (<userinput >*</userinput >), dzielenie (<userinput >/</userinput >) oraz nawiasy <userinput >(</userinput > i <userinput >)</userinput >.</para> <para >Dokładniejsze wyjaśnienie i więcej przykładów znajduje się w sekcji <link linkend="math" >matematyka</link >.</para> </sect2> <sect2 id="question"> <title >Zapytania</title> <para >Możemy zadać proste pytania, na które możliwe są jedynie odpowiedzi 'prawda' lub 'fałsz'.</para> <para >Użycie pytań jest dokładniej wyjaśnione w sekcji <link linkend="questions" >zapytania</link >.</para> </sect2> <sect2 id="questions-glue"> <title >Wyrazy łączące pytania</title> <para >Zapytania mogą być składane razem dzięki tak zwanym wyrazom łączącym. Takimi wyrazami są <userinput >i</userinput >, <userinput >lub</userinput >, oraz: <userinput >nie</userinput >.</para> <para >Użycie wyrazów łączących pytania wyjaśnione jest w sekcji <link linkend="question-glue" >Łączenie pytań</link >.</para> </sect2> <sect2 id="comment"> <title >Komentarze</title> <para >Komentarzami są linie zaczynające się od <userinput >#</userinput >. Na przykład: <screen> # to jest komentarz! pisz "to nie jest komentarz" # poprzednia linia nie jest komentarzem natomiast wcześniejsza jest: # pisz "to nie jest komentarz" </screen > Do kodu możemy dodawać komentarze dla nas bądź dla innych czytających. Komentarzy używa się do: (1) dodawania krótkich opisów programu, (2) wyjaśniania jak działa dany fragment kodu, oraz (3) wykomentowania linii kodu, które powinny być ignorowane (chwilowo) (patrz ostatnia linia przykładu).</para> <para >W <link linkend="the-code-editor" >edytorze kodów</link > komentarze są <glossterm >podświetlone</glossterm > na kolor ciemnożółty.</para> </sect2> </sect1> <sect1 id="commands"> <title >Komendy</title> <para >Używając komend mówimy żółwiowi lub &kturtle; by wykonywał konkretne polecenia. Niektóre komendy wymagają argumentów wyjściowych a niektóre dają coś na wyjściu. W tej sekcji wyjaśniamy działanie wszystkich komend używanych przez &kturtle;. Należy zauważyć, że wszystkie omawiane tutaj wbudowane komendy są w <link linkend="the-code-editor" >edytorze kodu</link > <glossterm >podświetlone</glossterm > na kolor ciemnozielony, co pomaga je rozróżnić.</para> <sect2 id="moving-the-turtle"> <title >Poruszanie żółwia</title> <para >Do poruszania żółwia po ekranie służy kilka komend</para> <sect3 id="forward"> <title >naprzód (np)</title> <variablelist> <varlistentry > <term >naprzód</term> <listitem ><para ><screen >naprzód X</screen> <userinput >naprzód</userinput > przesuwa żółwia do przodu o X pikseli. Gdy ołówek jest skierowany w dół żółw zostawia ślad. <userinput >naprzód</userinput > może być użyty za pomocą skrótu <userinput >np</userinput ></para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="backward"> <title >wstecz (ws)</title> <variablelist> <varlistentry > <term >w tył</term> <listitem ><para ><screen >wstecz X</screen> <userinput >wstecz</userinput > przesuwa żółwia do tyłu o X pikseli. Gdy ołówek jest skierowany w dół żółw zostawia ślad. <userinput >wstecz</userinput > może być użyty za pomocą skrótu <userinput >ws</userinput >.</para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="turnleft"> <title >obróć_w_lewo (lw)</title> <variablelist> <varlistentry > <term >skręć w lewo</term> <listitem ><para ><screen >obróć_w_lewo X</screen> <userinput >obróć_w_lewo</userinput > powoduje, że żółw skręca w lewo o X stopni. <userinput >obróć_w_lewo</userinput > może być użyty za pomocą skrótu <userinput >lw</userinput >.</para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="turnright"> <title >obróć_w_prawo (pw)</title> <variablelist> <varlistentry > <term >skręć w prawo</term> <listitem ><para ><screen >obróć_w_prawo X</screen> <userinput >obróć_w_prawo</userinput > powoduje, że żółw skręca w prawo o X stopni. <userinput >obróć_w_prawo</userinput > może być użyty za pomocą skrótu <userinput >pw</userinput >.</para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="direction"> <title >kierunek (kie)</title> <variablelist> <varlistentry > <term >kierunek</term> <listitem ><para ><screen >kierunek X</screen> <userinput >kierunek</userinput > ustawia kierunek ruchu żółwia na X stopni licząc od zera, nie wiąże się to z poprzednim kierunkiem ruchu żółwia. <userinput >kierunek</userinput > może być użyty za pomocą skrótu <userinput >kie</userinput ></para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="center"> <title >środek</title> <variablelist> <varlistentry > <term >środek</term> <listitem ><para ><screen >środek</screen> <userinput >środek</userinput > przesuwa żółwia na środek płótna.</para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="go"> <title >idź</title> <variablelist> <varlistentry > <term >idź</term> <listitem ><para ><screen >idź X,Y</screen> Komenda <userinput >idź</userinput > przesuwa żółwia na wskazaną lokalizację na płótnie. Ta lokalizacja to X <glossterm linkend="pixels" >pikseli</glossterm > od lewej strony płótna oraz Y <glossterm linkend="pixels" >pikseli</glossterm > od góry płótna. Użycie komendy <userinput >idź</userinput > nie powoduje, że żółw rysuje linie.</para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="gox"> <title >idźx</title> <variablelist> <varlistentry > <term >idźx</term> <listitem ><para ><screen >idźx X</screen> <userinput >idźx</userinput > powoduje przesunięcie żółwia do pozycji X <glossterm linkend="pixels" >pikseli</glossterm > od lewej strony płótna, podczas gdy wysokość pozostaje bez zmiany.</para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="goy"> <title >idźy</title> <variablelist> <varlistentry > <term >idźy</term> <listitem ><para ><screen >idźy Y</screen> <userinput >idźy</userinput > powoduje przesunięcie żółwia do pozycji Y <glossterm linkend="pixels" >pikseli</glossterm > od góry płótna, podczas gdy odległość od lewego brzegu pozostaje bez zmian.</para ></listitem> </varlistentry> </variablelist> </sect3> </sect2> <sect2 id="pen"> <title >Żółw posiada ołówek</title> <para >Żółw posiada ołówek, który rysuje linię gdy żółw się przesuwa. Istnieje kilka komend zarządzających ołówkiem. W tej sekcji wyjaśniamy te komendy.</para> <sect3 id="penup"> <title >podnieś (pod)</title> <variablelist> <varlistentry > <term >podnieś</term> <listitem ><para ><screen >podnieś</screen> <userinput >podnieś</userinput > podnosi ołówek z płótna. Gdy ołówek jest <quote >podniesiony</quote > nie będzie rysowana linia gdy porusza się żółw. Zobacz także <userinput >opuść</userinput >. <userinput >podnieś</userinput > może być użyte za pomocą skrótu <userinput >pod</userinput >.</para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="pendown"> <title >opuść (opu)</title> <variablelist> <varlistentry > <term >opuść</term> <listitem ><para ><screen >opuść</screen> <userinput >opuść</userinput > kładzie ołówek na płótnie. Gdy ołówek jest <quote >położony</quote > będzie rysowana linia gdy porusza się żółw. Zobacz także <userinput >podnieś</userinput >. <userinput >opuść</userinput > może być użyte za pomocą skrótu <userinput >opu</userinput >.</para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="setpenwidth"> <title >ustaw_grubość_pisaka (ugp)</title> <variablelist> <varlistentry > <term >ustaw_grubość_pisaka</term> <listitem ><para ><screen >ustaw_grubość_pisaka X</screen> <userinput >ustaw_grubość_pisaka</userinput > ustawia grubość ołówka (grubość rysowanej linii) na X <glossterm linkend="pixels" >pikseli</glossterm >. <userinput >ustaw_grubość_pisaka</userinput > może być użyte za pomocą skrótu<userinput >ugp</userinput >.</para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="setfgcolor"> <title >kolor_pisaka (kp)</title> <variablelist> <varlistentry > <term >kolor ołówka</term> <listitem ><para ><screen >kolor_pisaka R,G,B</screen> <userinput >kolor_pisaka</userinput > ustawia kolor ołówka. <userinput >kolor_pisaka</userinput > przyjmuje <glossterm linkend="rgb" >kombinację RGB</glossterm > jako argument wejściowy. <userinput >kolor_pisaka</userinput > może być użyty za pomocą skrótu <userinput >kp</userinput >.</para ></listitem> </varlistentry> </variablelist> </sect3> </sect2> <sect2 id="canvas"> <title >Komendy do zarządzania płótnem</title> <para >Istnieje kilka komend sterujących płótnem.</para> <sect3 id="resizecanvas"> <title >przeskaluj_tło (pt)</title> <variablelist> <varlistentry> <term >przeskaluj_tło</term> <listitem ><para ><screen >przeskaluj_tło X,Y</screen> Za pomocą komendy <userinput >przeskaluj_tło</userinput > można ustawić rozmiar płótna. Komenda przyjmuje jako argumenty wejściowe liczby X i Y, gdzie X jest nową szerokością płótna w <glossterm linkend="pixels" >pikselach</glossterm >, a Y jest nową wysokością płótna w <glossterm linkend="pixels" >pikselach</glossterm >. <userinput >przeskaluj_tło</userinput > może być użyte za pomocą skrótu <userinput >pt</userinput >.</para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="setbgcolor"> <title >kolor_tła (kt)</title> <variablelist> <varlistentry > <term >kolor_tła</term> <listitem ><para ><screen >kolor_tła R,G,B</screen> Komenda <userinput >kolor_tła</userinput > ustawia kolor płótna. <userinput >kolor_tła</userinput > przyjmuje <glossterm linkend="rgb" >kombinację RGB</glossterm > jako argument wejściowy. <userinput >kolor_tła</userinput > może być użyty za pomocą skrótu <userinput >kt</userinput >.</para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="wrapon"> <title >zawijaj</title> <variablelist> <varlistentry > <term >zawijaj</term> <listitem ><para ><screen >zawijaj</screen> Przy pomocy komendy <userinput >zawijaj</userinput > można <quote >włączyć</quote > <glossterm linkend="wrapping" >zawijanie</glossterm > płótna. Znaczenie terminu <glossterm linkend="wrapping" >zawijania</glossterm > znajduje się w słowniku.</para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="wrapoff"> <title >nie_zawijaj</title> <variablelist> <varlistentry > <term >nie_zawijaj</term> <listitem ><para ><screen >nie_zawijaj</screen> Przy pomocy komendy <userinput >zawijaj</userinput > można <quote >wyłączyć</quote > <glossterm linkend="wrapping" >zawijanie</glossterm > płótna. Oznacza to, że żółw może wyjść poza płótno i <quote >zgubić się</quote >. Znaczenie terminu <glossterm linkend="wrapping" >zawijania</glossterm > znajduje się w słowniku.</para ></listitem> </varlistentry> </variablelist> </sect3> </sect2> <sect2 id="clean"> <title >Komendy czyszczenia</title> <para >Istnieją dwie komendy czyszczące płótno.</para> <sect3 id="clear"> <title >czyść (cs)</title> <variablelist> <varlistentry > <term >czyść</term> <listitem ><para ><screen >czyść</screen> Komenda <userinput >czyść</userinput > usuwa wszystkie rysunki z płótna. Pozostałe rzeczy zostają: pozycja i kąt ruchu żółwia, kolor płótna, widoczność żółwia, i rozmiar płótna. <userinput >czyść</userinput > może być użyta za pomocą skrótu <userinput >cs</userinput >.</para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="reset"> <title >zeruj</title> <variablelist> <varlistentry > <term >zeruj</term> <listitem ><para ><screen >zeruj</screen> Komenda<userinput >zeruj</userinput > czyści bardziej dokładnie niż komenda <userinput >czyść</userinput >. Po wykonaniu komendy <userinput >zeruj</userinput > płótno wygląda jak po rozpoczęciu pracy &kturtle;. Żółw umieszczony jest na środku ekranu, kolor płótna jest biały, żółw rysuje czarną linię.</para ></listitem> </varlistentry> </variablelist> </sect3> </sect2> <sect2 id="sprites"> <title >Żółw jest sprajtem</title> <para >Najpierw krótkie wytłumaczenia czym jest sprajt: sprajty to małe obrazki, które mogą być przesuwane po ekranie, jak często to widzimy w grach komputerowych. Nasz żółwik jest także sprajtem. Dokładniejsze wyjaśnienie znajduje się w słowniku pod hasłem <glossterm linkend="sprites" >sprajty</glossterm >. </para> <para >Poniżej znajduje się pełen przegląd komend do pracy ze sprajtami.</para> <para >[Obecna wersja &kturtle; nie obsługuje jeszcze użycia sprajtów innych niż żółw. Kolejne wersje będą umożliwiać zmianę żółwia na coś zaprojektowanego przez siebie]</para> <sect3 id="spriteshow"> <title >pokaż</title> <variablelist> <varlistentry > <term >pokaż (pk)</term> <listitem ><para ><screen >pokaż</screen> Komenda <userinput >pokaż</userinput > sprawia, że żółw staje się widoczny (gdy był ukryty). <userinput >pokaż</userinput > może być użyty za pomocą skrótu <userinput >pk</userinput >.</para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="spritehide"> <title >ukryj (uk)</title> <variablelist> <varlistentry > <term >ukryj</term> <listitem ><para ><screen >ukryj</screen> Komenda <userinput >ukryj</userinput > sprawia, że żółw jest ukrywany. Opcja używana gdy żółw nie pasuje do rysunku. <userinput >pokaż</userinput > może być użyty za pomocą skrótu <userinput >uk</userinput >.</para ></listitem> </varlistentry> </variablelist> </sect3> </sect2> <sect2 id="writing"> <title >Czy żółw może pisać?</title> <para >Odpowiedź brzmi: <quote >tak</quote >. Żółw potrafi pisać: wszystko co każe mu się pisać.</para> <sect3 id="print"> <title >pisz</title> <variablelist> <varlistentry > <term >pisz</term> <listitem ><para ><screen >pisz X</screen> <userinput >pisz</userinput > każe żółwiowi pisać podany tekst na płótnie. <userinput >pisz</userinput > przyjmuje jako argumenty wejściowe liczy i łańcuchy znaków. Używając symbolu <quote >+</quote > można <userinput >napisać</userinput > kilka liczb i łańcuchów znaków. Oto mały przykład: <screen >rok = 2003 autor = "Cies" wypisuje autor + " rozpoczął projekt KTurtle w roku " + rok + " i dalej z radością nad nim pracuje!" </screen> </para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="fontsize"> <title >wielkość_czcionki</title> <variablelist> <varlistentry > <term >wielkość_czcionki</term> <listitem ><para ><screen >wielkość_czcionki X</screen> <userinput >wielkość_czcionki</userinput > ustawia rozmiar czcionki używany przy<userinput >wypisywaniu</userinput >. <userinput >wielkość_czcionki</userinput > przyjmuje liczbę jako argument wejściowy. Rozmiar czcionki podawany jest w <glossterm linkend="pixels" >pikselach</glossterm >.</para ></listitem> </varlistentry> </variablelist> </sect3> </sect2> <sect2 id="random"> <title >Komenda rzucająca kości za użytkownika</title> <para >Komenda rzucająca kości za użytkownika, nazywa się <userinput >losowo</userinput >, i jest bardzo użyteczna różnych przypadkach.</para> <variablelist> <varlistentry > <term >losowo</term> <listitem ><para ><screen >losowo X,Y</screen> <userinput >losowo</userinput > przyjmuje argumenty wejściowe i daje argumenty wyjściowe. Jako argumenty wejściowe wymagane są dwie liczby, pierwsza (X) określa minimum argumentu wyjściowego, natomiast druga (Y) określa maksimum. Argument wyjściowy jest losowo wybraną liczbą z przedziału ograniczonego przez podane minimum i maksimum. Oto przykład: <screen> powtórz 500 [ x = losowo 1,20 naprzód x obróć_w_lewo 10 - x ] </screen > Używając komendy <userinput >losowo</userinput > można dodać odrobiny chaosu do programu.</para ></listitem> </varlistentry> </variablelist> </sect2> <sect2 id="dialogs"> <title >Argumenty wejściowe i pomoc przez okna dialogowe</title> <para >Okno dialogowe jest małym wyskakującym okienkiem, które zawiera pomoc dotyczącą argumentów wejściowych. &kturtle; posiada dwie komendy do okien dialogowych, mianowicie: <userinput >wiadomość</userinput > i <userinput >okno_wejścia</userinput ></para> <sect3 id="message"> <title >wiadomość</title> <variablelist> <varlistentry > <term >wiadomość</term> <listitem ><para ><screen >wiadomość X</screen> Komenda <userinput >wiadomość</userinput > przyjmuje jako argument wejściowy <link linkend="string" >łańcuch znaków</link >. Pokazuje się okno dialogowe zawierające tekst z <link linkend="string" >łańcucha</link >. <screen >rok = 2003 autor = "Cies" wypisuje autor + " rozpoczął projekt KTurtle w roku " + rok + " i dalej z radością nad nim pracuje!" </screen> </para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="inputwindow"> <title >okno_wejścia</title> <variablelist> <varlistentry > <term >okno_wejścia</term> <listitem ><para ><screen >okno_wejścia X</screen> <userinput >okno_wejścia</userinput > jako argument wejściowy przyjmuje <link linkend="string" >łańcuch znaków</link >. Pokazuje się wyskakujące okno dialogowe zawierające tekst z łańcucha, tak jak <link linkend="message" >wiadomość</link >. Dodatkowo dodaje to pole wejściowe do okna. Przez to pole użytkownik może wprowadzić <link linkend="number" >liczbę</link > lub <link linkend="string" >łańcuch</link > który może być przechowywany w <link linkend="containers" >kontenerze</link >. Na przykład <screen> wejście = okno_wejścia "Jaki jest Twój wiek?" wyjście = 2003 - wejście pisz "W 2003 będziesz mieć " + wyjście + " lat." </screen > Gdy użytkownik kasuje okno dialogowe, lub nie wprowadza niczego <link linkend="containers" >kontener</link > jest opróżniany.</para ></listitem> </varlistentry> </variablelist> </sect3> </sect2> </sect1> <sect1 id="containers"> <title >Kontenery</title> <para >Kontenery są znakami bądź wyrazami używanymi przez programistów do przechowywania liczb lub tekstu. Kontenery zawierające liczby nazywane są <link linkend="variables" >zmiennymi</link >, kontenery zawierające tekst nazywane są <link linkend="string" >łańcuchami</link >.</para> <para >Kontenery nie używane nie zawierają niczego. Przykład: <screen> pisz N </screen > Nie zostanie wyświetlone nic. Jeżeli spróbujemy wykonać jakieś <link linkend="math" >działanie matematyczne</link > z pustym kontenerem pojawi się komunikat błędu. </para> <sect2 id="variables"> <title >Zmienne: kontenery liczbowe</title> <para >Rozpoczniemy od przykładu: <screen> x = 3 pisz x </screen > W pierwszej linii litera <userinput >x</userinput > staje się zmienną (kontenerem liczbowym). Jak widać wartość zmiennej <userinput >x</userinput > ustawiona jest na 3. W drugiej linii wartość jest wypisywana.</para> <para >Jeżeli chcielibyśmy wypisać znak <quote >x</quote > powinniśmy napisać <screen >pisz "x" </screen> </para> <para >To było łatwe, teraz trudniejszy przykład: <screen> A = 2004 B = 25 C = A + B # kolejna komenda wyświetli "2029" pisz C wstecz 30 # kolejna komenda wyświetli "2004 plus 25" pisz A + " plus " + B wstecz 30 # kolejna komenda wyświetli "1979" pisz A - B </screen > W dwóch pierwszych linijkach zmienne <userinput >A</userinput > i <userinput >B</userinput > zostają ustawione na 2004 i 25. W trzeciej linii <userinput >C</userinput > zostaje ustawiona jako <userinput >A + B</userinput >, co wynosi 2029. Reszta przykładu składa się z 3 komend <userinput >pisz</userinput > z <userinput >wstecz 30</userinput > pomiędzy. <userinput >wstecz 30</userinput > zapewnia, że każde wyjście drukowane jest w nowej linii. W przykładzie można zaobserwować użycie zmiennych w <link linkend="math" >obliczeniach matematycznych</link >.</para> </sect2> <sect2 id="strings"> <title >Kontenery zawierające tekst (łańcuchy)</title> <para >W kodzie programistycznym zwykły tekst rozpoczyna się i kończy zazwyczaj cudzysłowami. Do tej pory widzieliśmy: <screen> pisz "Cześć programisto!" </screen > Tekst jest ograniczony cudzysłowami. Kawałki tego tekstu nazywamy <link linkend="strings" >łańcuchami</link >.</para> <para >Łańcuchy mogą być przechowywane w <link linkend="containers" >kontenerach</link > tak jak <link linkend="number" >liczby</link >. Łańcuchy są bardzo podobne do zmiennych. Największą różnicą jest to, że zamiast liczb zawierają tekst. Z tego powodu łańcuchy nie mogą być używane w <link linkend="math" >wyrażeniach matematycznych</link > i <link linkend="questions" >pytaniach</link >. Przykład użycia łańcuchów: <screen> x = "Cześć " imię = okno_wejścia "Podaj swoje imię..." pisz x + imię + ", jak się masz?" </screen > W pierwszej linii <userinput >x</userinput > jest ustawiane jako <quote >Cześć </quote >. W drugiej linii łańcuch <userinput >imię</userinput > jest ustawiany jako wyjście komendy <userinput >okno_wejścia</userinput >. W kolejnej linii program wypisuje kompozycję trzech linii na płótnie.</para> <para >Program poprosi o podanie imienia. Po wprowadzeniu np. imienia <quote >Paweł</quote >, program wypisuje <quote >Cześć Paweł jak się masz?</quote >. Należy zauważyć, że plus (+) jest jedynym symbolem matematycznym używanym z łańcuchami.</para> </sect2> </sect1> <sect1 id="math"> <title >Czy żółw zna matematykę?</title> <para >Tak, &kturtle; zna matematykę. Potrafi dodawać (+), odejmować (-), mnożyć (*), a także dzielić (/). Oto przykład, który korzysta ze wszystkich tych działań: <screen> a = 20 - 5 b = 15 * 2 c = 30 / 30 d = 1 + 1 pisz "a: "+a+", b: "+b+", c: "+c+", d: "+d </screen > Czy wiesz jakie wartości mają zmienne a, b, c oraz d? Proszę zauważyć <link linkend="assignment" >przypisanie wartości zmiennej</link > za pomocą symbolu <userinput >=</userinput >.</para> <para >Chcąc dokonać prostego obliczenia wpisujemy po prostu: <screen >pisz 2004-12 </screen ></para> <para >Teraz przykład z nawiasami: <screen> pisz ( ( 20 - 5 ) * 2 / 30 ) + 1 </screen > Wyrażenia wewnątrz nawiasów obliczane są najpierw. W tym przykładzie, najpierw zostanie obliczone 20-5, później pomnożone 2, podzielone przez 30, i zostanie dodane 1(co daje 2).</para> </sect1> <sect1 id="questions"> <title >Zadawanie pytań, otrzymywanie odpowiedzi...</title> <para ><link linkend="if" ><userinput >jeśli</userinput ></link > i <link linkend="while" ><userinput >dopóki</userinput ></link > są <link linkend="controlling-execution" >instrukcjami sterującymi</link > które będą omawiane w następnej sekcji. W tej sekcji używamy instrukcji <link linkend="if" ><userinput >jeśli</userinput ></link > by wyjaśnić zapytania.</para> <sect2 id="q"> <title >Zapytania</title> <para >Przykład prostego pytania: <screen> x = 6 jeśli x > 5 [ pisz "cześć" ] </screen > Pytaniem w tym przykładzie jest <userinput >x > 5</userinput > . Jeżeli odpowiedź jest prawdziwa wykonywany jest kod w nawiasach. Zapytania są bardzo istotną częścią częścią programowania i są często używane z <link linkend="controlling-execution" >instrukcjami sterującymi</link >, jak np. <link linkend="if" ><userinput >jeśli</userinput ></link >. Wszystkie liczby i <link linkend="variables" >zmienne</link > (kontenery liczbowe) mogą być porównywane ze sobą przy pomocy zapytań.</para> <para >Poniżej znajdują się wszystkie możliwe pytania: <table> <title >Typy zapytań</title> <tgroup cols="3"> <tbody> <row> <entry ><userinput >a == b</userinput ></entry> <entry >równa się</entry> <entry >odpowiedź jest <quote >prawdą</quote > gdy <userinput >a</userinput > równa się <userinput >b</userinput ></entry> </row> <row> <entry ><userinput >a != b</userinput ></entry> <entry >nie równe</entry> <entry >odpowiedź jest <quote >prawdą</quote > gdy <userinput >a</userinput > nie równa się <userinput >b</userinput ></entry> </row> <row> <entry ><userinput >a > b</userinput ></entry> <entry >większe niż</entry> <entry >odpowiedź jest <quote >prawdą</quote > gdy <userinput >a</userinput > jest większe niż <userinput >b</userinput ></entry> </row> <row> <entry ><userinput >a < b</userinput ></entry> <entry >mniejsze niż</entry> <entry >odpowiedź jest <quote >prawdą</quote > gdy <userinput >a</userinput > jest mniejsze niż <userinput >b</userinput ></entry> </row> <row> <entry ><userinput >a >= b</userinput ></entry> <entry >większe lub równe</entry> <entry >odpowiedź jest <quote >prawdą</quote > gdy <userinput >a</userinput > jest większe lub równe <userinput >b</userinput ></entry> </row> <row> <entry ><userinput >a <= b</userinput ></entry> <entry >mniejsze lub równe</entry> <entry >odpowiedź jest <quote >prawdą</quote > gdy <userinput >a</userinput > mniejsze lub równe <userinput >b</userinput ></entry> </row> </tbody> </tgroup> </table> </para> <para >W <link linkend="the-code-editor" >edytorze kodu</link > pytania są <glossterm >podświetlone</glossterm > na kolor jasno niebieski.</para > </sect2> <sect2 id="question-glue"> <title >Łączniki pytań</title> <para >Wyrazy łączące pytania umożliwiają łączenie kilku małych pytań w jedno duże. <screen> a = 1 b = 5 jeśli (a < 5) i (b == 5) [ pisz "cześć" ] </screen > W tym przykładzie wyraz łączący <userinput >i</userinput > jest użyty do połączenia dwóch pytań (<userinput >a < 5</userinput >, <userinput >b == 5</userinput >). Jeżeli po jednej stronie <userinput >i</userinput > odpowiedź będzie <quote >fałszywa</quote > odpowiedź na całe pytanie będzie <quote >fałszem</quote >, gdyż używając wyrazu <userinput >i</userinput > obie strony muszą być <quote >prawdziwe</quote > by całe pytanie było <quote >prawdą</quote >. Proszę nie zapominać o użyciu nawiasów wokół pytań!</para> <para >Poniżej znajduje się schematyczne wytłumaczenie: <table> <title >Wyrazy łączące pytania</title> <tgroup cols="2"> <tbody> <row> <entry ><userinput >i</userinput ></entry> <entry >By wyrażenie było prawdziwe obie strony muszą być prawdziwe</entry> </row> <row> <entry ><userinput >lub</userinput ></entry> <entry >By wyrażenie było prawdziwe, wystarczy by jedna strona była prawdziwa</entry> </row> <row> <entry ><userinput >nie</userinput ></entry> <entry >Wyjątkowy przypadek: działa jedynie z pytaniami! Zmienia prawdę na fałsz a fałsz na prawdę.</entry> </row> </tbody> </tgroup> </table> </para> <para >W <link linkend="the-code-editor" >edytorze kodu</link > wyrazy łączące pytania są <glossterm >podświetlone</glossterm > na purpurowo.</para> <sect3 id="and"> <title >i</title> <para >Gdy dwa pytania są połączone za pomocą <userinput >i</userinput >, obie strony <userinput >i</userinput > muszą być prawdziwe by wynik był prawdziwy. Na przykład: <screen> a = 1 b = 5 jeśli ((a < 10) i (b == 5)) i (a < b) [ pisz "cześć" ] </screen > W tym przykładzie można zaobserwować pytanie zagnieżdżone w pytaniu.</para> </sect3> <sect3 id="or"> <title >lub</title> <para >Gdy jedno z dwóch wyrażeń połączonych wyrazem <userinput >lub</userinput > jest prawdziwe wynik jest prawdziwy. Na przykład: <screen> a = 1 b = 5 jeśli ((a < 10) lub (b == 10)) lub (a == 0) [ pisz "cześć" ] </screen > W tym przykładzie można zaobserwować pytanie zagnieżdżone w pytaniu.</para> </sect3> <sect3 id="not"> <title >nie</title> <para ><userinput >nie</userinput > jest specjalnym wyrazem, gdyż odnosi się tylko do jednego wyrażenia. <userinput >nie</userinput > zamienia fałsz na prawdę a prawdę na fałsz. Na przykład: <screen> a = 1 b = 5 jeśli nie ((a < 10) i (b == 5)) [ pisz "cześć" ] przeciwnie [ pisz "nie cześć ;-)" ] </screen > W tym przykładzie wyrażenie jest prawdziwe, ale <userinput >nie</userinput > zamienia je na fałszywe. Więc na końcu na<link linkend="the-canvas" >płótnie</link ><userinput >"nie cześć ;-)"</userinput >.</para> </sect3> </sect2> </sect1> <sect1 id="controlling-execution"> <title >Kontola wykonywania</title> <para >Kontrolery wykonania umożliwiają użytkownikowi sterowanie wykonywaniem programu przez —.</para> <para >Komendy kontrolujące wykonanie programu <glossterm >podświetlone</glossterm > są na ciemnozielony kolor oraz mają pogrubioną czcionkę. Nawiasy kwadratowe używane są głównie z komendami kontrolującymi wykonanie i są <glossterm >podświetlone</glossterm > na jasno zielono.</para> <sect2 id="wait"> <title >Zatrzymanie żółwia</title> <para >Napisawszy jakiś program w &kturtle; można zauważyć, że żółw bardzo szybko wykonuje rysunki. Poniższa komenda zatrzymuje żółwia na określoną ilość czasu.</para> <variablelist> <varlistentry> <term >czekaj</term> <listitem ><para ><screen >czekaj X</screen> <userinput >czekaj</userinput > zatrzymuje żółwia na X sekund. <screen> powtórz 36 [ naprzód 5 obróć_w_prawo 10 czekaj 0.5 ] </screen > Kod powoduje rysowanie okręgu, ale po każdym kroku żółw zatrzymuje się na pół sekundy. Daje to wrażenie poruszania się żółwia w zwolnionym tempie.</para ></listitem> </varlistentry> </variablelist> </sect2> <sect2 id="if"> <title >Instrukcja "jeśli"</title> <variablelist> <varlistentry> <term >jeśli</term> <listitem ><para ><screen >jeśli <link linkend="questions" >pytanie</link > [ ... ]</screen> Kod umieszczony w nawiasach jest wykonywany jedynie wtedy gdy <userinput >jeśli</userinput > wartość <link linkend="questions" >wyrażenia</link > jest <quote >prawdziwa</quote >. Więcej informacji na temat <link linkend="questions" >wyrażeń</link > znaleźć można w <link linkend="questions" >sekcji wyrażenia</link >. <screen> x = 6 jeśli x > 5 [ pisz "x jest większe niż pięć!" ] </screen > W pierwszej linijce <userinput >x</userinput > jest ustawiane jako 6. W drugiej linijce, znajduje się <link linkend="questions" >pytanie</link > <userinput >x > 5</userinput >. Jako, że wyrażenie to jest <quote >prawdziwe</quote > kontroler wykonania <userinput >jeśli</userinput > zezwala na wykonanie kodu w nawiasie.</para ></listitem> </varlistentry> </variablelist> </sect2> <sect2 id="while"> <title >Pętla "dopóki"</title> <variablelist> <varlistentry> <term >dopóki</term> <listitem ><para ><screen >dopóki <link linkend="questions" >wyrażenie</link > [ ... ]</screen> Wyrażenie sterujące <userinput >dopóki</userinput > jest podobne do <link linkend="if" ><userinput >jeśli</userinput ></link >. Różnica polega na tym, że <userinput >dopóki</userinput > powtarza wykonywanie kodu między nawiasami dopóki wartość <link linkend="questions" >wyrażenia</link > nie będzie <quote >fałszywa</quote >. <screen> x = 1 dopóki x < 5 [ naprzód 10 czekaj 1 x = x + 1 ] </screen > W pierwszej linii zmienna <userinput >x</userinput > ustawiana jest na 1. W drugiej linii znajduje się <link linkend="questions" >wyrażenie</link > <userinput >x < 5</userinput >. Jako, że wyrażenie to jest <quote >prawdziwe</quote > wyrażenie sterujące <userinput >dopóki</userinput > rozpoczyna wykonywanie kodu między nawiasami dopóki wartość <link linkend="questions" >wyrażenia</link > nie będzie <quote >fałszywa</quote >. W tym przypadku kod w nawiasie zostanie wykonany 4 razy, gdyż po każdym wykonaniu piątej linii <userinput >x</userinput > wzrasta o 1.</para ></listitem> </varlistentry> </variablelist> </sect2> <sect2 id="else"> <title >Jeżeli nie, innymi słowami: "przeciwnie"</title> <variablelist> <varlistentry> <term >przeciwnie</term> <listitem ><para ><screen >jeśli wyrażenie [ ... ] przeciwnie [ ... ]</screen> <userinput >przeciwnie</userinput > może być użyte w dodatku do wyrażenia sterującego <link linkend="if" ><userinput >jeśli</userinput ></link >. Kod pomiędzy nawiasami po <userinput >przeciwnie</userinput > zostanie tylko wtedy gdy wartość <link linkend="questions" >wyrażenia</link > jest <quote >fałszywa</quote >. <screen> zeruj x = 4 jeśli x > 5 [ pisz "x jest większe niż pięć!" ] przeciwnie [ pisz "x jest mniejsze niż 6!" ] </screen > <link linkend="questions" >Wyrażenie</link > sprawdza czy <userinput >x</userinput > jest większy niż 5. Ponieważ w pierwszej linijce <userinput >x</userinput > wynosi 4, wartość wyrażenia jest <quote >fałszywa</quote >. Oznacza to, że kod w nawiasach po <userinput >przeciwnie</userinput > zostanie wykonany.</para ></listitem> </varlistentry> </variablelist> </sect2> <sect2 id="for"> <title >Pętla "dla", pętla zliczająca</title> <variablelist> <varlistentry> <term >dla</term> <listitem ><para ><screen >dla <userinput >punkt początkowy</userinput > do <userinput >punkt końcowy</userinput > [ ... ]</screen> Pętla <userinput >dla</userinput > jest <quote >pętlą zliczającą</quote >, &ie; zlicza za użytkownika. <screen> dla x = 1 do 10 [ pisz x * 7 naprzód 15 ] </screen > Za każdym razem gdy kod w nawiasach jest wykonywany wartość zmiennej <userinput >x</userinput > zwiększa się o 1, dopóki zmienna <userinput >x</userinput > nie osiągnie wartości 10. Kod w nawiasach wypisuje wartość zmiennej <userinput >x</userinput > pomnożonej przez 7. Po wykonaniu programu na płótnie będzie można zobaczyć tabele wielokrotności liczby 7.</para ></listitem> </varlistentry> </variablelist> </sect2> </sect1> <sect1 id="learn"> <title >Tworzenie własnych komend za pomocą <quote >nauczyciela</quote ></title> <para ><userinput >nauczyciel</userinput > jest specjalną komendą, służącą do tworzenia własnych komend. Utworzone komendy mogą przyjmować argumenty <glossterm linkend="input-output" >wejściowe</glossterm > i zwracać <glossterm linkend="input-output" >argumenty wyjściowe</glossterm >. Zobaczmy jak tworzone są nowe komendy: <screen> poznaj okrąg x [ powtórz 36 [ naprzód x obróć_w_lewo 10 ] ] </screen > Nowa komenda zostanie nazwana <userinput >okrąg</userinput >. <userinput >okrąg</userinput > oczekuje jednego <glossterm linkend="input-output" >argumentu wejściowego</glossterm >, liczby określającej rozmiar okręgu. <userinput >okrąg</userinput > nie zwraca żadnego <glossterm linkend="input-output" >argumentu wyjściowego</glossterm >. Komenda <userinput >okrąg</userinput > może być teraz używana jak normalna komenda w reszcie kodu. Oto przykład: <screen >poznaj okrąg X [ powtórz 36 [ naprzód X obróć_w_lewo 10 ] ] idź 30,30 okrąg 20 idź 40,40 okrąg 50 </screen> </para> <para >W następnym przykładzie tworzona jest komenda zwracająca wartość. <screen> zeruj poznaj pomnóżPrzezSiebie n [ r = n * 1 r = n * n powrót r ] i = okno_wejścia "Proszę wprowadzić liczbę i wcisnąć Enter" pisz i + " pomnożone przez siebie daje: " + pomnóżPrzezSiebie i </screen > W przykładzie tworzona jest komenda <userinput >pomnóżPrzezSiebie</userinput >. Argument wejściowy komendy jest mnożony przez siebie i zwracany, za pomocą komendy <anchor id="return"/><userinput >powrót</userinput >. Komenda <userinput >powrót</userinput > umożliwia zwrócenie wartość z utworzonej własnej funkcji. </para> </sect1> </chapter>