<!--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 >Справочник &logo;</title> <para >Эта глава начинается с краткого описания <link linkend="different-instructions" >различных типов инструкций</link >. Потом идёт подробное описание каждой <link linkend="commands" >команды</link >, затем описываются <link linkend="containers" >контейнеры</link >, <link linkend="math" >математические операции</link >, <link linkend="questions" >"вопросы"</link > и <link linkend="controlling-execution" >операторы условного выполнения</link >. В конце даётся несколько примеров создания собственных команд с помощью команды <link linkend="learn" >выучи</link >.</para> <sect1 id="different-instructions"> <title >Типы инструкций</title> <sect2 id="command"> <title >Команды</title> <para >Используя команды, вы предписываете Черепашке или KTurtle выполнить какое-либо действие. Некоторые команды нуждаются во входных параметрах, некоторые возвращают результат. В данном разделе объясняются все команды, используемые в KTurtle. <screen ># вперёд - это команда, которой нужно передавать параметры, в нашем случае - это 100: вперёд 100 </screen> </para> <para >Подробное описание всех команд, поддерживаемых &kturtle;, находится <link linkend="commands" >здесь</link >.</para> </sect2> <sect2 id="number"> <title >Числа</title> <para >В Лого есть натуральные числа: <userinput >0</userinput >, <userinput >1</userinput >, <userinput >2</userinput >, <userinput >3</userinput >, <userinput >4</userinput >, <userinput >5</userinput >, ...; отрицательные: <userinput >-1</userinput >, <userinput >-2</userinput >, <userinput >-3</userinput >, ...; и десятичные дроби: <userinput >0.1</userinput >, <userinput >3.14</userinput >, <userinput >33.3333</userinput >, <userinput >-5.05</userinput >, <userinput >-1.0</userinput >. </para> <para >Числа используются в <link linkend="math" >математических расчётах</link > и <link linkend="questions" >вопросах</link >. они могут помещаться в <link linkend="containers" >контейнеры</link >.</para> <para >Числа <glossterm >выделяются</glossterm > синим цветом в <link linkend="the-code-editor" >редакторе кода</link >.</para> </sect2> <sect2 id="string"> <title >Строки</title> <para >Пример: <screen> напиши "Привет, я строка." </screen > В этом примере <userinput >напиши</userinput > - команда, которой передаётся строка <userinput >"Привет, я строка."</userinput >. Строки начинаются и заканчиваются на <userinput >"</userinput >, так &kturtle; может определить, что это строка.</para> <para >Строки можно помещать в <link linkend="containers" >контейнеры</link >.</para> <para >Строки <glossterm >выделяются</glossterm > тёмно-красным в <link linkend="the-code-editor" >редакторе кода</link >.</para> </sect2> <sect2 id="name"> <title >Имена</title> <para >Имена можно давать <link linkend="containers" >контейнерам</link > (переменным) и <link linkend="learn" >новым командам</link >.</para> <para >Имена не могут совпадать с именами команд. <screen> # попытка использовать вперёд в качестве имени, # но оно уже занято командой, так что при выполнении получим ошибку вперёд = 20 # это работает: вперёд 20 </screen > Имена могут состоять из букв, цифр и символа подчёркивания (_), но первой всегда должна быть буква. </para> <para >Для подробностей см. <link linkend="containers" >Контейнеры</link > и справку по команде <link linkend="learn" >выучи</link >. </para> </sect2> <sect2 id="assignment"> <title >Присваивание</title> <para >Присваивание производится символом <userinput >=</userinput >. В большинстве языков программирования лучше читать один символ <userinput >=</userinput > не как 'равно', а как 'становится'. Слово 'равно' больше подходит к <userinput >==</userinput >, это используется в <link linkend="questions" >вопросах</link >.</para> <para >Одинаково можно присваивать значения новым <link linkend="containers" >контейнерам</link > и менять их значение, например: <screen >x = 10 # контейнер x теперь содержит число 10 W = "Сейчас мне столько лет: " # контейнер W теперь содержит строку "Сейчас мне столько лет: " # это выводит на экран содержимое 'W' и 'x' напиши W + x </screen> </para> <para >Для подробностей, обратитесь к <link linkend="containers" >разделу о контейнерах</link >.</para> </sect2> <sect2 id="math-symbols"> <title >Математические знаки</title> <para >&kturtle; поддерживает все основные математические операции: сложение (<userinput >+</userinput >), вычитание (<userinput >-</userinput >), умножение (<userinput >*</userinput >), деление (<userinput >/</userinput >), можно использовать скобки <userinput >(</userinput > и <userinput >)</userinput >.</para> <para >Для подробностей см. раздел <link linkend="math" >Математические вычисления</link >.</para> </sect2> <sect2 id="question"> <title >Вопросы</title> <para >У программы можно спрашивать вопросы и получать на них ответы (истина или ложь)</para> <para >Использование вопросов подробно описано в <link linkend="questions" >соответствующем разделе</link >.</para> </sect2> <sect2 id="questions-glue"> <title >Склеивающие слова в вопросах</title> <para >С помощью них можно соединять несколько вопросов. Это может быть <userinput >и</userinput >, <userinput >или</userinput >, а также специальное <userinput >не</userinput >.</para> <para >Использование склеивающих слов подробно описано в <link linkend="question-glue" >соответствующем разделе</link >.</para> </sect2> <sect2 id="comment"> <title >Комментарии</title> <para >Комментарии - это строки, начинающиеся с <userinput >#</userinput >. Например:<screen> # это комментарий! напиши "это не комментарий" # напиши "а это - комментарий" </screen > Комментарии могут содежать разъяснения к коду, ещё комментарием можно сделать какую-то команду, чтобы она не выполнялась.</para> <para >Комментарии <glossterm >выделяются</glossterm > тёмно-жёлтым в <link linkend="the-code-editor" >редакторе кода</link >.</para> </sect2> </sect1> <sect1 id="commands"> <title >Команды</title> <para >Разные команды делают разные вещи, одни из них требуют дополнительную информацию, некоторые возвращают её. Далее мы опишем каждую из поддерживаемых команд. Заметьте, что такие команды <glossterm >выделяются</glossterm > тёмно-зелёным в <link linkend="the-code-editor" >редакторе кода</link >.</para> <sect2 id="moving-the-turtle"> <title >Двигаем Черепашку.</title> <para >Существует несколько команд для перемещения Черепашки по экрану.</para> <sect3 id="forward"> <title >вперёд (вп)</title> <variablelist> <varlistentry > <term >вперёд</term> <listitem ><para ><screen >вперёд X</screen> <userinput >вперёд</userinput > перемещает Черепашку на X пикселей вперёд. Когда перо опущено Черепашка будет оставлять за собой след. Эта команда также может записываться как <userinput >вп</userinput >.</para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="backward"> <title >назад (нд)</title> <variablelist> <varlistentry > <term >назад</term> <listitem ><para ><screen >назад X</screen> <userinput >назад</userinput > перемещает Черепашку назад на X пикселей. Когда перо опущено Черепашку будет оставлять за собой след. Может так же записываться как <userinput >нд</userinput >.</para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="turnleft"> <title >налево (лв)</title> <variablelist> <varlistentry > <term >налево</term> <listitem ><para ><screen >налево X</screen> Предписывает Черепашке повернуть на X градусов налево. Может записываться и как <userinput >лв</userinput >.</para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="turnright"> <title >направо (tr)</title> <variablelist> <varlistentry > <term >направо</term> <listitem ><para ><screen >направо X</screen> Предписывает Черепашке повернуть на X градусов направо. Может записываться и как <userinput >пр</userinput >.</para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="direction"> <title >направление (нпр)</title> <variablelist> <varlistentry > <term >направление</term> <listitem ><para ><screen >направление X</screen> Устанавливает направление Черепашки на X градусов относительно 0, а не относительно предыдущего направления. Может записываться как <userinput >нпр</userinput >.</para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="center"> <title >центр</title> <variablelist> <varlistentry > <term >центр</term> <listitem ><para ><screen >центр</screen> Перемещает Черепашку в центр холста.</para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="go"> <title >иди</title> <variablelist> <varlistentry > <term >иди</term> <listitem ><para ><screen >иди X,Y</screen> Предписывают Черепашке занять определённое место на холсте. Это место находится на X пикселей от левой границы и на Y пикселей от верхней границы холста. Примечание: при перемещении Черепашка не будет оставлять след.</para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="gox"> <title >иди_гор</title> <variablelist> <varlistentry > <term >иди_гор</term> <listitem ><para ><screen >иди_гор X</screen> <userinput >иди_гор</userinput > используется для перемещения Черепашки на X <glossterm linkend="pixels" >пикселей</glossterm > от левой границы холста, высота остается неизменной.</para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="goy"> <title >иди_верт</title> <variablelist> <varlistentry > <term >иди_верт</term> <listitem ><para ><screen >иди_верт Y</screen> Используется для перемещения Черепашки на Y <glossterm linkend="pixels" >пикселей</glossterm > от верхней границы холста, положение относительно левой границы остаётся неизменным.</para ></listitem> </varlistentry> </variablelist> </sect3> </sect2> <sect2 id="pen"> <title >У Черепашки есть перо</title> <para >У Черепашки есть перо, которым она рисует линию во время перемещения. Есть несколько команд для управления пером. В данном разделе они будут описаны подробно.</para> <sect3 id="penup"> <title >перо_подними (пп)</title> <variablelist> <varlistentry > <term >перо_подними</term> <listitem ><para ><screen >перо_подними</screen> <userinput >перо_подними</userinput > отрывает перо от холста. Пока перо оторвано, Черепашка не будет рисовать линию во время перемещений. Может записываться и как pu. См. также <userinput >перо_опусти</userinput >.</para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="pendown"> <title >перо_опусти (по)</title> <variablelist> <varlistentry > <term >перо_опусти</term> <listitem ><para ><screen >перо_опусти</screen> <userinput >перо_опусти</userinput > опускает перо на холст. Когда перо опущено, Черепашка рисует линию при перемещениях. Может записываться и как pd. См. также <userinput >перо_подними</userinput >.</para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="setpenwidth"> <title >нов_ширина_пера (ншп)</title> <variablelist> <varlistentry > <term >нов_ширина_пера</term> <listitem ><para ><screen >нов_ширина_пера X</screen> <userinput >нов_ширина_пера</userinput > устанавливает ширину пера (ширину линии) в X <glossterm linkend="pixels" >пикселей</glossterm >. Может записываться и как <userinput >ншп</userinput >.</para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="setfgcolor"> <title >нов_цвет_пера (нцп)</title> <variablelist> <varlistentry > <term >нов_цвет_пера</term> <listitem ><para ><screen >нов_цвет_пера R,G,B</screen> <userinput >нов_цвет_пера</userinput > устанавливает цвет пера. В качестве параметров указывается интенсивность <glossterm linkend="rgb" >красной, зеленой и синей</glossterm > составляющих цвета (0..255). Может записываться и как <userinput >нцп</userinput >.</para ></listitem> </varlistentry> </variablelist> </sect3> </sect2> <sect2 id="canvas"> <title >Команды для работы с холстом.</title> <para >Существует несколько команд для работы с холстом.</para> <sect3 id="resizecanvas"> <title >нов_размер_холста (нрх)</title> <variablelist> <varlistentry> <term >нов_размер_холста</term> <listitem ><para ><screen >нов_размер_холста X,Y</screen> С помощью этой команды можно поменять размер холста. В качестве входных параметров задаются ширина X и высота Y в <glossterm linkend="pixels" >пикселях</glossterm >. Может записываться и как <userinput >нрх</userinput >.</para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="setbgcolor"> <title >нов_цвет_холста (нцх)</title> <variablelist> <varlistentry > <term >нов_цвет_холста</term> <listitem ><para ><screen >нов_цвет_холста R,G,B</screen> <userinput >нов_цвет_холста</userinput > устанавливает цвет холста. Входными параметрами является <glossterm linkend="rgb" >комбинация RGB</glossterm >. Может записываться и как <userinput >нцх</userinput >.</para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="wrapon"> <title >обёртка_вкл</title> <variablelist> <varlistentry > <term >обёртка_вкл</term> <listitem ><para ><screen >обёртка_вкл</screen> Этой командой вы устанавливаете <glossterm linkend="wrapping" >обёртку холста</glossterm >. Это значит, что при достижении края холста Черепашка не исчезнет, а окажется на его противоположной стороне.</para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="wrapoff"> <title >обёртка_выкл</title> <variablelist> <varlistentry > <term >обёртка_выкл</term> <listitem ><para ><screen >обёртка_выкл</screen> Этой командой вы отключаете <glossterm linkend="wrapping" >обёртку холста</glossterm >. Это значит, что Черепашка может выйти за границы холста и “исчезнуть”.</para ></listitem> </varlistentry> </variablelist> </sect3> </sect2> <sect2 id="clean"> <title >Команды очистки</title> <para >Существуют две команды очистки холста.</para> <sect3 id="clear"> <title >очисти (очс)</title> <variablelist> <varlistentry > <term >очисти</term> <listitem ><para ><screen >очисти</screen> Этой командой вы можете очистить холст от всех следов. Все остальное останется по-прежнему: позиция и угол направления Черепашки, цвет холста, видимость Черепашки и размер холста. Может записываться и как <userinput >очс</userinput >.</para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="reset"> <title >сброс</title> <variablelist> <varlistentry > <term >сброс</term> <listitem ><para ><screen >сброс</screen> Очищает более объёмно, нежели команда <userinput >очисти</userinput >. После выполнения этой команды всё будет выглядеть так, как будто вы только что запустили KTurtle. Черепашка будет расположена в центре экрана, цвет холста будет белым, цвет пера Черепашки также будет белым.</para ></listitem> </varlistentry> </variablelist> </sect3> </sect2> <sect2 id="sprites"> <title >Черепашка - это спрайт.</title> <para >Большинство людей и понятия не имеют, что такое спрайты, так вот, спрайты – это маленькие картинки, которые можно перемещать по экрану. Так что Черепашка - <glossterm linkend="sprites" >спрайт</glossterm >! </para> <para >Ниже будет дано подробное описание всех команд работы со спрайтами.</para> <para >Текущая версия KTurtle пока не поддерживает использование спрайтов, отличных от Черепашки. В ближайшем будущем вы сможете заменить Черепашку на любой другой персонаж собственной придумки.</para> <sect3 id="spriteshow"> <title >покажи</title> <variablelist> <varlistentry > <term >покажи (пж)</term> <listitem ><para ><screen >покажи</screen> Делает Черепашку видимой после того, как она была скрыта. Так же может записываться как <userinput >пж</userinput >.</para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="spritehide"> <title >спрячь (сч)</title> <variablelist> <varlistentry > <term >спрячь</term> <listitem ><para ><screen >спрячь</screen> Скрывает Черепашку. Это полезно, когда Черепашка не уместна в ваших рисунках. Может записываться и как <userinput >сч</userinput >.</para ></listitem> </varlistentry> </variablelist> </sect3> </sect2> <sect2 id="writing"> <title >Может ли Черепашка печатать на холсте?</title> <para >Черепашка может написать всё, что вы ей прикажете.</para> <sect3 id="print"> <title >напиши</title> <variablelist> <varlistentry > <term >напиши</term> <listitem ><para ><screen >напиши X</screen> Команда <userinput >напиши</userinput > используется для указания Черепашки написать что-либо на холсте. В качестве входных параметров можно передавать строки или числа. Вы можете печатать различные числа и строки, комбинируя их вместе оператором <quote >+</quote >. Вот маленький пример. <screen >год = 2003 автор = "Cies" напиши автор + " started the KTurtle project in " + год + " and still enjoys working on it!" </screen> </para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="fontsize"> <title >нов_размер_шрифта</title> <variablelist> <varlistentry > <term >нов_размер_шрифта</term> <listitem ><para ><screen >нов_размер_шрифта X</screen> Устанавливает размер шрифта, используемого для печати. Входной параметр один, он должен быть числом. Размер задаётся в <glossterm linkend="pixels" >пикселях</glossterm >.</para ></listitem> </varlistentry> </variablelist> </sect3> </sect2> <sect2 id="random"> <title >Команды для получения случайных чисел.</title> <para >Команда, которая “бросает игральную кость” для вас.</para> <variablelist> <varlistentry > <term >случайное</term> <listitem ><para ><screen >случайное X,Y</screen> <userinput >случайное</userinput > – команда, которая имеет входные и выходные параметры. На входе требуются два числа, первое (X) зада`т нижний порог получаемых чисел (минимум), второе (Y) зада`т верхний порог (максимум). Выходной параметр – это псевдослучайное число, которое не меньше минимума и не больше максимума. Вот маленький пример:<screen> повтори 500 [ x = случайное 1,20 вперёд x налево 10 - x ] </screen >Используя <userinput >случайное</userinput >, вы можете привнести немного “хаоса” в вашу программу.</para ></listitem> </varlistentry> </variablelist> </sect2> <sect2 id="dialogs"> <title >Взаимодействие через диалоги</title> <para >Диалог - маленькое окно, в котором предлагается ввести что-нибудь. В &kturtle; есть две команды для реализации интерактивности: <userinput >сообщение</userinput > <userinput >окно_вопроса</userinput ></para> <sect3 id="message"> <title >сообщение</title> <variablelist> <varlistentry > <term >сообщение</term> <listitem ><para ><screen >сообщение X</screen> Команде <userinput >сообщение</userinput > требуется передать <link linkend="string" >строку</link >, она будет показана в появившемся окне. <screen >год = 2003 автор = "Cies" напиши автор + " started the KTurtle project in " + год + " and still enjoys working on it!" </screen> </para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="inputwindow"> <title >окно_вопроса</title> <variablelist> <varlistentry > <term >окно_вопроса</term> <listitem ><para ><screen >окно_вопроса X</screen> Команде <userinput >окно_вопроса</userinput > требуется передать <link linkend="string" >строку</link >, она будет показана в появившемся окне, аналогично команде <link linkend="message" >сообщение</link >. Но, кроме этого, в окне будет поле для ввода <link linkend="number" >числа</link > или <link linkend="string" >текста</link >. Например <screen> результат = окно_вопроса "Сколько вам лет?" осталось = 18 - результат напиши "Через " + осталось + " лет вам будет разрешено водить машину." </screen > Если пользователь ничего не введёт и просто закроет окно, переменная <userinput >осталось</userinput > будет пустой.</para ></listitem> </varlistentry> </variablelist> </sect3> </sect2> </sect1> <sect1 id="containers"> <title >Контейнеры.</title> <para >Контейнеры - это символы или слова, которые используются программистом для хранения чисел или текста.Контейнеры, содержащие числа, называются переменными, а содержащие текст - строками.</para> <para >Контейнеры до первого их использования содержат 0 по умолчанию. Вот пример:<screen> напиши N </screen > Не будет напечатано ничего. Если мы будет использовать <link linkend="math" >математические</link > операции с пустыми контейнерами, то получим ошибки. </para> <sect2 id="variables"> <title >Переменные: числовые контейнеры</title> <para >Давайте начнём с небольшого примера: <screen> x = 3 напиши x </screen > В первой строке символ <userinput >x</userinput > объявляется переменной (числовым контейнером). Как вы можете увидеть, значение переменной <userinput >x</userinput > устанавливается равной трём. На второй строке это значение выводится на печать.</para> <para >Помните, что если мы хотим напечатать <quote >x</quote >, мы должны написать <screen >напиши "x" </screen> </para> <para >Это было совсем просто, вот пример посложнее: <screen> A = 2004 B = 25 C = A + B # следующая команда напечатает "2029" напиши C назад 30 # следующая команда напечатает "2004 плюс 25" напиши A + " плюс " + B назад 30 # следующая команда напечатает "1979" напиши A - B </screen > В первых двух строках переменные <userinput >A</userinput > и <userinput >B</userinput > устанавливаются равными 2004 и 25.В третьей строке переменной <userinput >С</userinput > присваивается результат <userinput >A + B</userinput >, который равен 2029. Остальное в примере – три команды печати на холсте с командой <userinput >назад 30</userinput > между ними.Команда <userinput >назад 30</userinput > используется здесь для уверенности в том, что каждая новая печать на холст будет на новой строке. В данном примере также демонстрируется, как переменные могут быть использованы в <link linkend="math" >математических</link > расчётах.</para> </sect2> <sect2 id="strings"> <title >Текстовые контейнеры</title> <para >Обычный текст заключается в кавычки, например: <screen> напиши "Привет, программист!" </screen > то, что между кавычками, называется<link linkend="strings" >строкой</link >.</para> <para >Строки во многом похожи на <link linkend="containers" >переменные</link >. Главное же отличие состоит в том, что строки не могут быть использованы в <link linkend="math" >математических выражениях </link >и <link linkend="questions" >вопросах</link >. Пример использования строк: <screen> x = "Привет " имя = окно_вопроса "Введите своё имя..." напиши x + имя + ", как дела?" </screen > В первой строке x присваивается текст <quote >Привет</quote >. Затем строке <userinput >name</userinput > присваивается результат выполнения команды <userinput >окно_вопроса</userinput > и на холсте печатается комбинация полученных трёх строк.</para> <para >Эта программа спрашивает ваше имя. Когда вы вводите, к примеру, имя <quote >Павел</quote >, программа выводит на печать <quote >Привет Павел, как дела?</quote >. Пожалуйста, не забывайте, что <quote >+</quote > - единственная математическая операция , которая может использоваться при работе со строками.</para> </sect2> </sect1> <sect1 id="math"> <title >Может ли Черепашка делать вычисления?</title> <para >Да, Черепашке под силу заниматься математическими вычислениями. Вы можете складывать (+), вычитать (-), умножать (*) и делить (/). Вот пример, демонстрирующий использование всех этих команд.<screen> a = 20 - 5 b = 15 * 2 c = 30 / 30 d = 1 + 1 напиши "a: "+a+", b: "+b+", c: "+c+", d: "+d </screen > Знаете ли вы, какие значения примут a, b, c и d? Обратите внимание на использование символа <link linkend="assignment" >присваивания</link > <userinput >=</userinput >.</para> <para >Если в программе вам нужно вычислить простое выражение, вы можете поступать следующим образом: <screen >напиши 2004-12 </screen ></para> <para >Вот пример с приоритетом вычисления: <screen> напиши ( ( 20 - 5 ) * 2 / 30 ) + 1 </screen > Выражение в скобках будет вычислено первым. В данном примере сначала будет получена разность 20 – 5, затем полученное значение будет умножено на 2, поделено на 30, и напоследок будет добавлена единица (результат равен 2).</para> </sect1> <sect1 id="questions"> <title >Задаём вопросы, получаем ответы...</title> <para >В следующем разделе мы обсудим команды <link linkend="controlling-execution" >контроля выполнения</link > <link linkend="if" ><userinput >если</userinput ></link > и <link linkend="while" ><userinput >пока</userinput ></link >. В этом разделе мы будем использовать команду <userinput >если</userinput > для объяснения вопросов.</para> <sect2 id="q"> <title >Вопросы</title> <para >Простой пример с вопросом: <screen> x = 6 если x > 5 [ напиши "hello" ] </screen > В данном примере вопросом является <userinput >x > 5</userinput >. Если будет получен ответ “истина” (true), будут выполнены команды в скобках. Вопросы - важная часть программирования. Чаще всего они используются вместе с <link linkend="controlling-execution" >операторами контроля</link >, такими как если. Все числа и <link linkend="variables" >переменные</link > (числовые контейнеры) могут сравниваться друг с другом с помощью вопросов.</para> <para >Вот возможные вопросы: <table> <title >Типы вопросов</title> <tgroup cols="3"> <tbody> <row> <entry ><userinput >a == b</userinput ></entry> <entry >равенство</entry> <entry >ответ <quote >истина</quote > (<quote >true</quote >), если <userinput >a</userinput > равно <userinput >b</userinput ></entry> </row> <row> <entry ><userinput >a != b</userinput ></entry> <entry >неравенство</entry> <entry >ответ <quote >истина</quote > (<quote >true</quote >), если <userinput >a</userinput > не равно <userinput >b</userinput ></entry> </row> <row> <entry ><userinput >a > b</userinput ></entry> <entry >больше</entry> <entry >ответ <quote >истина</quote > (<quote >true</quote >), если <userinput >a</userinput > больше <userinput >b</userinput ></entry> </row> <row> <entry ><userinput >a < b</userinput ></entry> <entry >меньше</entry> <entry >ответ <quote >истина</quote > (<quote >true</quote >), если <userinput >a</userinput > меньше <userinput >b</userinput ></entry> </row> <row> <entry ><userinput >a >= b</userinput ></entry> <entry >больше или равно</entry> <entry >ответ <quote >истина</quote > (<quote >true</quote >), если <userinput >a</userinput > больше или равно <userinput >b</userinput ></entry> </row> <row> <entry ><userinput >a <= b</userinput ></entry> <entry >меньше или равно</entry> <entry >ответ <quote >истина</quote > (<quote >true</quote >), если <userinput >a</userinput > меньше или равно <userinput >b</userinput ></entry> </row> </tbody> </tgroup> </table> </para> <para >Вопросы <glossterm >подсвечиваются</glossterm > (выделяются) голубым в <link linkend="the-code-editor" >редакторе кода</link >.</para > </sect2> <sect2 id="question-glue"> <title >Вопросный клей</title> <para >Вопросы также могут быть совмещены друг с другом с помощью <quote >вопросного клея</quote >. Это позволяет использовать несколько вопросов как один большой. <screen> a = 1 b = 5 если (a < 5) и (b == 5) [ напиши "hello" ] </screen > В этом вопросе “склеивающее слово” - <userinput >и</userinput >, оно используется, чтобы совместить два вопроса (a < 5, b==5) вместе. Если с одной стороны результатом будет <quote >ложь</quote >, то и ответ на весь вопрос будет <quote >ложь</quote >, потому, что с этим “склеивающим словом” обе стороны должны быть равны <quote >истина</quote > для получения ответа на весь вопрос <quote >истина</quote >.</para> <para >Вот краткий обзор управляющих операторов, более детально они описаны ниже: <table> <title >“Склеивающие слова” для вопросов</title> <tgroup cols="2"> <tbody> <row> <entry ><userinput >и</userinput ></entry> <entry >Обе стороны должны быть равны <quote >истина</quote > для получения ответа <quote >истина</quote > на весь вопрос.</entry> </row> <row> <entry ><userinput >или</userinput ></entry> <entry >Если хотя бы одна сторона равна <quote >истина</quote >, то и ответ будет <quote >истина</quote >.</entry> </row> <row> <entry ><userinput >не</userinput ></entry> <entry >Только если обе стороны <quote >ложь</quote >, ответ будет <quote >ложь</quote >.</entry> </row> </tbody> </tgroup> </table> </para> <para >Склеивающие слова <glossterm >подсвечиваются</glossterm > фиолетовым в <link linkend="the-code-editor" >редакторе кода</link >.</para> <sect3 id="and"> <title >и</title> <para >Если вопросы соединяются при помощи <userinput >и</userinput >, для получения общего ответа "истина", они все должны быть истинными, например: <screen> a = 1 b = 5 если ((a < 10) и (b == 5)) и (a < b) [ напиши "хм" ] </screen ></para> </sect3> <sect3 id="or"> <title >или</title> <para >Если ответ хотя бы на один из вопросов - "истина", то и общий ответ будет таким же, например: <screen> a = 1 b = 5 если ((a < 10) или (b == 10)) или (a == 0) [ напиши "хм" ] </screen ></para> </sect3> <sect3 id="not"> <title >не</title> <para >Это специальная приставка, меняющая ответ на противоположный, например: <screen> a = 1 b = 5 если не ((a < 10) и (b == 5)) [ напиши "хм" ] иначе [ напиши "не хм ;-)" ] </screen > В этом примере ответ на заданный вопрос - "истина", а приставка <userinput >не</userinput > изменяет это на "ложь", так что на <link linkend="the-canvas" >холсте</link > будет напечатано<userinput >"не хм ;-)"</userinput >.</para> </sect3> </sect2> </sect1> <sect1 id="controlling-execution"> <title >Контроль над выполнением</title> <para >Управляющие операторы позволяют вам контролировать процесс выполнения (о чём говорит само их название).</para> <para >Управляющие операторы <glossterm >выделяются</glossterm > тёмно-зелёным цветом и жирным начертанием шрифта. Квадратные скобки, используемые вместе с ними, выделяются светло-зелёным.</para> <sect2 id="wait"> <title >Может ли Черепашка ждать?</title> <para >Если вы уже немного попрактиковались в программировании в KTurtle, вы могли заметить, что Черепашка может рисовать чересчур быстро. Следующая команда позволяет избежать этого.</para> <variablelist> <varlistentry> <term >жди</term> <listitem ><para ><screen >жди X</screen> <userinput >жди</userinput > указывает Черепашке подождать X секунд.<screen> повтори 36 [ вперёд 5 направо 10 жди 0.5 ] </screen > Данный код рисует круг, при этом после каждого шага Черепашка будет ждать пол секунды.Это создаёт впечатление неторопливого движения.</para ></listitem> </varlistentry> </variablelist> </sect2> <sect2 id="if"> <title >Условное выполнение</title> <para ></para> <variablelist> <varlistentry> <term >если</term> <listitem ><para ><screen >если <link linkend="questions" >вопрос</link > [ ... ]</screen> Код, расположенный между скобками, будет выполнен только тогда, когда ответом на вопрос будет <quote >истина</quote >. Для более подробной информации прочитайте, пожалуйста, раздел <link linkend="questions" >Вопросы</link >.<screen> x = 6 если x > 5 [ напиши "x больше пяти!" ] </screen > В первой строке контейнеру <userinput >x</userinput > присваивается 6. Во второй задаётся <link linkend="questions" >вопрос</link > <userinput >x > 5</userinput >. Если ответом на него будет <quote >истина</quote >, управляющий оператор <userinput >если</userinput > позволит выполнить код, расположенный между скобками.</para ></listitem> </varlistentry> </variablelist> </sect2> <sect2 id="while"> <title >Цикл "пока"</title> <para ></para> <variablelist> <varlistentry> <term >пока</term> <listitem ><para ><screen >пока <link linkend="questions" >вопрос</link > [ ... ]</screen> Управляющий оператор <userinput >пока</userinput > очень похож на <link linkend="if" ><userinput >если</userinput ></link >. Разница в том, что <userinput >пока</userinput > будет повторять код, расположенный между скобками, до тех пор, пока ответом на вопрос не станет <quote >ложь</quote >.<screen> x = 1 пока x < 5 [ вперёд 10 жди 1 x = x + 1 ] </screen > В первой строке <userinput >x</userinput > присваивается 1. На второй строке задаётся <link linkend="questions" >вопрос</link > <userinput >x < 5</userinput >. Так как ответ на этот вопрос - <quote >истина</quote >, оператор <userinput >пока</userinput > начнёт выполнять код между скобками, пока ответом на вопрос не станет <quote >ложь</quote >. В данном случае код между скобками будет выполнен 4 раза потому, что на каждом прогоне в пятой строке <userinput >x</userinput > будет увеличиваться на 1.</para ></listitem> </varlistentry> </variablelist> </sect2> <sect2 id="else"> <title >"Иначе"</title> <para ></para> <variablelist> <varlistentry> <term >иначе</term> <listitem ><para ><screen >если вопрос [ ... ] иначе [ ... ]</screen> Может быть дополнением к оператору условного выполнения <link linkend="if" ><userinput >if</userinput ></link >. Код между скобками, расположенными после <userinput >else</userinput > будет выполнен тогда, когда ответом на <link linkend="questions" >вопрос</link > будет <quote >ложь</quote >. <screen> сброс x = 4 если x > 5 [ напиши "x больше пяти!" ] иначе [ напиши "x меньше пяти!" ] </screen > <userinput >Если</userinput > ставит <link linkend="questions" >вопрос</link >, больше ли <userinput >x</userinput > чем 5. Т.к. <userinput >x</userinput > равно 4, ответ на вопрос - <quote >ложь</quote >. Поэтому выполняется код в скобках после <userinput >иначе</userinput >.</para ></listitem> </varlistentry> </variablelist> </sect2> <sect2 id="for"> <title >Считающий цикл "для"</title> <para ></para> <variablelist> <varlistentry> <term >для</term> <listitem ><para ><screen >для <userinput >начальное число</userinput > до <userinput >конечное число</userinput > [ ... ]</screen> <userinput >Для</userinput > - это цикл <quote >со счётчиком</quote >. <screen> для x = 1 до 10 [ напиши x * 7 вперёд 15 ] </screen > Каждый раз, когда выполняется код в скобках, значение <userinput >x</userinput > на 1, и так до тех пор, пока <userinput >x</userinput > не станет равным 10. Код в скобках выводит на печать произведение <userinput >x</userinput > и 7. После завершения выполнения программы вы увидите таблицу умножения на 7.</para ></listitem> </varlistentry> </variablelist> </sect2> </sect1> <sect1 id="learn"> <title >Создавайте свои собственные команды!</title> <para ><userinput >Выучи</userinput > - это особенная команда, потому что она предназначена для создания ваших собственных команд. Создаваемые вами команды могут <glossterm linkend="input-output" >принимать входные параметры и возвращать различные значения</glossterm >. Давайте посмотрим, как создаются собственные команды: <screen> выучи круг x [ повтори 36 [ вперёд x налево 10 ] ] </screen > Новая команда называется <userinput >круг</userinput >. Её <glossterm linkend="input-output" >входным параметром</glossterm > является число - размер круга. Теперь команду <userinput >круг</userinput > можно использовать как же, как и обычные команды: <screen >выучи круг X [ повтори 36 [ вперёд X налево 10 ] ] иди 30,30 круг 20 иди 40,40 круг 50 </screen> </para> <para >В следующем примере будет создана команда, возвращающая значение.<screen> сброс выучи квадрат_числа n [ r = n * n верни r ] i = окно_вопроса "Введите число и нажмите OK" напиши i + ", помноженное на себя: " + квадрат_числа i </screen > В данном примере создана новая команда с именем<userinput >квадрат_числа</userinput >. Ей передаётся число, а она возвращает его квадрат. </para> </sect1> </chapter>