<chapter id="reference"> <title >Руководство программиста &turtlescript;</title> <para >Это руководство по языку программирования &turtlescript;, используемому в &kturtle;. В первой части рассматриваются некоторые аспекты <link linkend="grammar" >грамматики</link > программ на &turtlescript;. Вторая часть описывает исключительно <link linkend="mathematical-operators" >математические операторы</link >, <link linkend="boolean-operators" >логические (истина/ложь) операторы</link > и <link linkend="comparing-operators" >операторы сравнения</link >. В третьей главе перечислены все <link linkend="commands" >команды</link > с их описаниями. Четвёртая глава рассматривает вопросы <link linkend="assignment-of-variables" >присвоения</link > значений <link linkend="assignment-of-variables" >переменным</link >. В заключение, в пятой главе рассказывается, как управлять выполнением программы при помощи <link linkend="controlling-execution" >управляющих операторов</link >, и в шестой — о создании собственных команд при помощи команды <link linkend="learn" >выучи</link >.</para> <sect1 id="grammar"> <title >Грамматика &turtlescript;</title> <para >Как и в любом языке, в &turtlescript; есть различные типы слов и символов. В русском языке мы различаем глаголы (например, «ходить» или «петь») и существительные (например, «сестра» или «дом»). Эти слова используются для различных целей. &turtlescript; — это язык программирования, используя который вы можете сообщить &kturtle;, что необходимо сделать.</para> <para >В этом разделе кратко рассказано о некоторых типах слов и символов в &turtlescript;. Мы объясняем <link linkend="comment" >комментарии</link >, <link linkend="command" >команды</link > и три различных типа литералов: <link linkend="number" >числа</link >, <link linkend="string" >строки</link > и <link linkend="boolean-value" >логические (истина/ложь) значения</link >.</para> <sect2 id="comment"> <title >Комментарии</title> <para >Программа состоит из инструкций, которые выполняются при запуске программы и, так называемых, комментариев. &kturtle; не выполняет комментарии, а просто игнорирует их при выполнении программы. Комментарии нужны для других программистов, чтобы они лучше могли понять вашу программу. Всё, что следует после символа <userinput >#</userinput > считается в &turtlescript; комментарием. Вот пример маленькой программы, которая ничего не делает: <screen> # Это маленькая программа ничего не делает. Это всего лишь комментарий! </screen > Это в некоторой степени бесполезный пример, но он хорошо объясняет суть комментариев.</para> <para >Комментарии очень полезны в более сложных программах. Они могут дать какие-то советы другим программистам. В следующей программе вы можете видеть совместное использование комментариев и команды <link linkend="print" >напиши</link >. <screen> # эта программа создана Cies Breijs. напиши "этот текст будет написан на холсте" # предыдущая строка — не комментарий, а следующая — комментарий: # напиши "этот текст не будет написан" </screen > Первая строка описывает программу. Вторая строка выполняется &kturtle; и печатает на холсте <userinput >этот текст будет написан на холсте</userinput >. Третья строка является комментарием. Четвёртая строка — это тоже комментарий, содержащий строку &turtlescript;. Если удалить символ <userinput >#</userinput > из четвёртой строки, команда печати будет выполнена &kturtle;. Программисты говорят: оператор печати в четвертой строке «закомментирован».</para> <para >В <link linkend="the-editor" >редакторе кода</link > комментарии <glossterm >выделяются</glossterm > светло-серым.</para> </sect2> <sect2 id="command"> <title >Команды</title> <para >С помощью команд вы говорите Черепашке или &kturtle;, что необходимо выполнить какие-то действия. Некоторым командам нужны входные данные, некоторые дают что-то на выходе. <screen> # команде вперёд нужны входные данные, в этом примере — число 100: вперёд 100 </screen > Первая строка это <link linkend="comment" >комментарий</link >. Вторая строка содержит команду <userinput >вперёд</userinput > и <link linkend="number" >число</link > <userinput >100</userinput >. Число не является частью команды, он считается «входом» для команды.</para> <para >Некоторым командам, например, команде <userinput >иди</userinput > требуется более чем одно входное значение. Несколько значений отделяются друг от друга символом <userinput >,</userinput > (запятая).</para> <para >Подробное описание всех команд, поддерживаемых &kturtle;, находится <link linkend="commands" >здесь</link >. Встроенные команды <glossterm >выделяются</glossterm > тёмно-синим</para> </sect2> <sect2 id="number"> <title >Числа</title> <para >Скорее всего, вы уже знаете немного о числах. То, как используются числа в &kturtle; не сильно отличается от разговорного языка или математики. </para> <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 >. Символ <userinput >.</userinput > (точка) используется для отделения дробной части. </para> <para >Числа могут использоваться с <link linkend="mathematical-operators" >математическими операторами</link > и с <link linkend="comparing-operators" >операторами сравнения</link >. Также они могут быть сохранены в <link linkend="assignment-of-variables" >переменных</link >. Числа <glossterm >выделяются</glossterm > тёмно-красным.</para> </sect2> <!-- constants like pi? --> <sect2 id="string"> <title >Строки</title> <para >Пример: <screen> напиши "Привет, я строка." </screen > В этом примере <userinput >напиши</userinput > — команда, которой передаётся строка <userinput >"Привет, я строка."</userinput >. Строки должны начинаться и заканчиваться символом <userinput >"</userinput >, чтобы &kturtle; смог определить, что это строка.</para> <para >Строки можно помещать в <link linkend="assignment-of-variables" >переменные</link >, так же как и <link linkend="number" >числа</link >. Тем не менее, в отличие от числа, строки не могут быть использованы в <link linkend="mathematical-operators" >математических операторах</link > или <link linkend="comparing-operators" >операторах сравнения</link >. Строки <glossterm >выделяются</glossterm > красным.</para> </sect2> <sect2 id="boolean-value"> <title >Логические (истина/ложь) значения</title> <para >Существует только два логических значения: <userinput >истина</userinput > и <userinput >ложь</userinput >. Иногда они также называются: включено и выключено, да и нет, один и ноль. Но в &turtlescript; мы всегда называем их <userinput >истина</userinput > и <userinput >ложь</userinput >. Посмотрите на этот фрагмент кода &turtlescript;: <screen> $a = истина </screen > Если вы посмотрите в <link linkend="the-inspector" >инспектор</link >, то увидите, что <link linkend="assignment-of-variables" >переменная</link > <userinput >$a</userinput > имеет значение <userinput >истина</userinput > и логический тип.</para> <para >Часто логические значения появляются в результате <link linkend="comparing-operators" >операций сравнения</link >, например, как в следующем фрагменте кода &turtlescript;: <screen> $ответ = 10 > 3 </screen > <link linkend="assignment-of-variables" >Переменная</link > <userinput >$ответ</userinput > установлена в значение <userinput >истина</userinput > потому, что <userinput >10</userinput > больше чем <userinput >3</userinput >.</para> <para >Логические значения <userinput >истина</userinput > и <userinput >ложь</userinput > <glossterm >выделяются</glossterm > тёмно-красным.</para> </sect2> </sect1> <sect1 id="operators"> <title >Математические, логические операторы и операторы сравнения</title> <para >Название этого раздела может показаться очень трудным, но это не так сложно, как кажется.</para> <sect2 id="mathematical-operators"> <title >Математические операторы</title> <para >Вот основные математические символы: сложение (<userinput >+</userinput >), вычитание (<userinput >-</userinput >), умножение (<userinput >*</userinput >), деление (<userinput >/</userinput >) и возведение в степень (<userinput >^</userinput >).</para> <para >Небольшой пример использования математических операторов в &turtlescript;: <screen> $сумма = 1 + 1 $разница = 20 - 5 $произведение = 15 * 2 $частное = 30 / 30 $степень = 2 ^ 2 </screen > Результаты выполнения математических операций <link linkend="assignment-of-variables" >сохранены</link > в различных <link linkend="assignment-of-variables" >переменных</link >. Вы можете увидеть их значения в <link linkend="the-inspector" >инспекторе</link >.</para> <para >Если в программе вам нужно вычислить простое выражение, вы можете поступить следующим образом: <screen >напиши 2010-12 </screen ></para> <para >Вот пример с круглыми скобками: <screen> напиши ( ( 20 - 5 ) * 2 / 30 ) + 1 </screen > Выражение в скобках будет вычислено первым. В данном примере сначала будет получена разность 20 – 5, затем полученное значение будет умножено на 2, поделено на 30 и, напоследок, будет добавлена единица (результат равен 2). Скобки также могут быть использованы и в других случаях.</para> <para >В &kturtle; также есть дополнительные математические функции в виде команд. Обратите внимание на следующие команды, но знайте, что речь идёт о сложных операциях: <link linkend="round" >округли</link >, <link linkend="random" >случайное</link >, <link linkend="sqrt" >sqrt</link > , <link linkend="pi" >pi</link >, <link linkend="sin" >sin</link >, <link linkend="cos" >cos</link >, <link linkend="tan" >tg</link >, <link linkend="arcsin" >arcsin</link >, <link linkend="arccos" >arccos</link >, <link linkend="arctan" >arctg</link >.</para> </sect2> <sect2 id="boolean-operators"> <title >Логические (истина/ложь) операторы</title> <para >В то время как <link linkend="mathematical-operators" >математические операторы</link > используют <link linkend="number" >числа</link >, логические операторы используют <link linkend="boolean-value" >логические значения</link > (<userinput >истина</userinput > и <userinput >ложь</userinput >). Существует только три логических оператора, а именно: <userinput >и</userinput >, <userinput >или</userinput > и <userinput >не</userinput >. Следующий фрагмент кода &turtlescript; демонстрирует их использование: <screen> $и_1_1 = истина и истина # -> истина $и_1_0 = истина и ложь # -> ложь $и_0_1 = ложь и истина # -> ложь $и_0_0 = ложь и ложь # -> ложь $или_1_1 = истина или истина # -> истина $или_1_0 = истина или ложь # -> истина $или_0_1 = ложь или истина # -> истина $или_0_0 = ложь или ложь # -> ложь $не_1 = не истина # -> ложь $не_0 = не ложь # -> истина </screen > С помощью <link linkend="the-inspector" >инспектора</link > можно увидеть значения, но мы также указали их в комментариях в конце каждой строки. <userinput >и</userinput > вернёт <userinput >истина</userinput >, только если обе стороны содержат <userinput >истина</userinput >. <userinput >или</userinput > вернёт <userinput >истина</userinput >, если хотя бы одна из сторон содержит <userinput >истина</userinput >, и <userinput >не</userinput > превращает <userinput >истина</userinput > в <userinput >ложь</userinput >, а <userinput >ложь</userinput > в <userinput >истина</userinput >.</para> <para >Логические операторы <glossterm >выделяются</glossterm > розовым.</para> <sect3 id="boolean-operators-advanced-examples"> <title >Несколько более сложных примеров</title> <para >Рассмотрим следующий пример с <userinput >и</userinput >: <screen> $a = 1 $b = 5 если (($a < 10) и ($b == 5)) и ($a < $b) { напиши "привет" } </screen > В этом фрагменте кода &turtlescript; результаты трёх <link linkend="comparing-operators" >операторов сравнения</link > объединены операторами <userinput >и</userinput >. Это означает, что для печати «привет» все три сравнения должны вернуть «истина».</para> <para >Пример с <userinput >или</userinput >: <screen> $n = 1 если ($n < 10) или ($n == 2) { напиши "привет" } </screen > В этом фрагменте кода &turtlescript; левая часть от <userinput >или</userinput > возвращает «истина», а правая часть — «ложь». Так как одна из сторон оператора <userinput >или</userinput > — «истина», этот оператор вернёт «истина» и будет напечатано «привет».</para> <para >И, наконец, пример с <userinput >не</userinput >, меняющим «истина» на «ложь» и «ложь» на «истина»: <screen >$n = 1 если не ($n == 3) { напиши "привет" } иначе { напиши "не привет ;-)" } </screen ></para> </sect3> </sect2> <sect2 id="comparing-operators"> <title >Операторы сравнения</title> <para >Рассмотрим простое сравнение: <screen> $ответ = 10 > 3 </screen > Здесь <userinput >10</userinput > сравнивается с <userinput >3</userinput > оператором «больше чем». Результатом сравнения является <link linkend="boolean-value" >логическое значение</link > <userinput >истина</userinput >, которое сохраняется в <link linkend="assignment-of-variables" >переменной</link > <userinput >$ответ</userinput >.</para> <para >Все <link linkend="number" >числа</link > и <link linkend="assignment-of-variables" >переменные</link > (содержащие числа) можно сравнивать друг с другом при помощи операторов сравнения.</para> <para >Здесь приведены все операторы сравнения: <table > <title >Типы вопросов</title > <tgroup cols="3" > <tbody > <row > <entry ><userinput >$A == $B</userinput ></entry > <entry >равно</entry > <entry >ответ <quote >истина</quote > если <userinput >$A</userinput > равно <userinput >$B</userinput ></entry > </row > <row > <entry ><userinput >$A != $B</userinput ></entry > <entry >не равно</entry > <entry >ответ <quote >истина</quote > если <userinput >$A</userinput > не равно <userinput >$B</userinput ></entry > </row > <row > <entry ><userinput >$A > $B</userinput ></entry > <entry >больше чем</entry > <entry >ответ <quote >истина</quote > если <userinput >$A</userinput > больше чем <userinput >$B</userinput ></entry > </row > <row > <entry ><userinput >$A < $B</userinput ></entry > <entry >меньше чем</entry > <entry >ответ <quote >истина</quote > если <userinput >$A</userinput > меньше чем <userinput >$B</userinput ></entry > </row > <row > <entry ><userinput >$A >= $B</userinput ></entry > <entry >больше или равно</entry > <entry >ответ <quote >истина</quote > если <userinput >$A</userinput > больше или равно <userinput >$B</userinput ></entry > </row > <row > <entry ><userinput >$A <= $B</userinput ></entry > <entry >меньше или равно</entry > <entry >ответ <quote >истина</quote > если <userinput >$A</userinput > меньше или равно <userinput >$B</userinput ></entry > </row > </tbody > </tgroup > </table > Обратите внимание, что $A и $B должны быть <link linkend="number" >числами</link > или <link linkend="assignment-of-variables" >переменными</link > с числами.</para> </sect2> </sect1> <sect1 id="commands"> <title >Команды</title> <para >Используя команды, вы указываете Черепашке или &kturtle; выполнить какое-то действие. Некоторым командам необходимы входные данные, некоторые выводят данные. В этом разделе мы опишем все встроенные команды &kturtle;. Используя команду <link linkend="learn" >выучи</link >, вы можете создавать собственные команды. Описываемые здесь встроенные команды <glossterm >выделяются</glossterm > тёмно-синим.</para> <sect2 id="moving-the-turtle"> <title >Двигаем Черепашку.</title> <para >Существует несколько команд для перемещения Черепашки по экрану.</para> <variablelist> <anchor id="forward"/> <varlistentry > <term >вперёд (вп)<indexterm ><primary >вперёд (вп)</primary ></indexterm ></term> <listitem ><para ><screen >вперёд X</screen> <userinput >вперёд</userinput > перемещает Черепашку на X пикселов вперёд. Когда перо опущено Черепашка будет оставлять за собой след. <userinput >вперёд</userinput > также может записываться как <userinput >вп</userinput >.</para ></listitem> </varlistentry> </variablelist> <variablelist> <anchor id="backward"/> <varlistentry > <term >назад (нд)<indexterm ><primary >назад (нд)</primary ></indexterm ></term> <listitem ><para ><screen >назад X</screen> <userinput >назад</userinput > перемещает Черепашку назад на X пикселов. Когда перо опущено Черепашка будет оставлять за собой след. <userinput >назад</userinput > также может записываться как <userinput >нд</userinput >.</para ></listitem> </varlistentry> </variablelist> <variablelist> <anchor id="turnleft"/> <varlistentry > <term >налево (лв)<indexterm ><primary >налево (лв)</primary ></indexterm ></term> <listitem ><para ><screen >налево X</screen> <userinput >налево</userinput > предписывает Черепашке повернуть на X градусов налево. <userinput >налево</userinput > также может записываться как <userinput >лв</userinput >.</para ></listitem> </varlistentry> </variablelist> <variablelist> <anchor id="turnright"/> <varlistentry > <term >направо (пр)<indexterm ><primary >направо (пр)</primary ></indexterm ></term> <listitem ><para ><screen >направо X</screen> <userinput >направо</userinput > предписывает Черепашке повернуть на X градусов направо. <userinput >направо</userinput > также может записываться как <userinput >пр</userinput >.</para ></listitem> </varlistentry> </variablelist> <variablelist> <anchor id="direction"/> <varlistentry > <term >направление (нпр)<indexterm ><primary >направление (нпр)</primary ></indexterm ></term> <listitem ><para ><screen >направление X</screen> <userinput >направление</userinput > устанавливает направление Черепашки на X градусов относительно 0, а не относительно предыдущего направления. <userinput >направление</userinput > также может записываться как <userinput >нпр</userinput >.</para ></listitem> </varlistentry> </variablelist> <variablelist> <anchor id="getdirection"/> <varlistentry > <term >получить_направление<indexterm ><primary >получить_направление</primary ></indexterm ></term> <listitem ><para ><screen >получить_направление</screen> <userinput >получить_направление</userinput > возвращает направление Черепашки в градусах относительно нуля, где нулём считает положение Черепашки смотрящей вверх.</para ></listitem> </varlistentry> </variablelist> <variablelist> <anchor id="center"/> <varlistentry > <term >центр<indexterm ><primary >центр</primary ></indexterm ></term> <listitem ><para ><screen >центр</screen> <userinput >центр</userinput > перемещает Черепашку в центр холста.</para ></listitem> </varlistentry> </variablelist> <variablelist> <anchor id="go"/> <varlistentry > <term >иди<indexterm ><primary >иди</primary ></indexterm ></term> <listitem ><para ><screen >иди X,Y</screen> <userinput >иди</userinput > предписывает Черепашке занять определённое место на холсте. Это место отстоит на X <glossterm linkend="pixels" >пикселей</glossterm > от левой границы и на Y <glossterm linkend="pixels" >пикселей</glossterm > от верхней границы холста.</para ></listitem> </varlistentry> </variablelist> <variablelist> <anchor id="gox"/> <varlistentry > <term >иди_гор<indexterm ><primary >иди_гор</primary ></indexterm ></term> <listitem ><para ><screen >иди_гор X</screen> <userinput >иди_гор</userinput > используется для перемещения Черепашки на X <glossterm linkend="pixels" >пикселов</glossterm > от левой границы холста, высота остаётся неизменной.</para ></listitem> </varlistentry> </variablelist> <variablelist> <anchor id="goy"/> <varlistentry > <term >иди_верт<indexterm ><primary >иди_верт</primary ></indexterm ></term> <listitem ><para ><screen >иди_верт Y</screen> <userinput >иди_верт</userinput > предписывает Черепашке переместиться на Y <glossterm linkend="pixels" >пикселей</glossterm > от верхней границы холста. Положение относительно левой границы остаётся неизменным.</para ></listitem> </varlistentry> </variablelist> <note ><para >При использовании команд <userinput >иди</userinput >, <userinput >иди_гор</userinput >, <userinput >иди_верт</userinput > и <userinput >центр</userinput > Черепашка не будет рисовать линию вне зависимости от того, поднято перо или опущено.</para> </note> </sect2> <sect2 id="locate-the-turtle"> <title >Где Черепашка?</title> <para >Существует две команды, возвращающие положение Черепашки на экране.</para> <variablelist> <anchor id="getx"/> <varlistentry > <term >получить_гор<indexterm ><primary >получить_гор</primary ></indexterm ></term> <listitem ><para ><userinput >получить_гор</userinput > возвращает количество пикселей от левого края холста до текущей позиции Черепашки.</para ></listitem> </varlistentry> </variablelist> <variablelist> <anchor id="gety"/> <varlistentry > <term >получить_верт<indexterm ><primary >получить_верт</primary ></indexterm ></term> <listitem ><para ><userinput >получить_верт</userinput > возвращает количество пикселей от верхнего края холста до текущей позиции Черепашки.</para ></listitem> </varlistentry> </variablelist> </sect2> <sect2 id="pen"> <title >У Черепашки есть перо</title> <para >У Черепашки есть перо, которым она рисует линию во время перемещения. Есть несколько команд для управления пером. В данном разделе они будут описаны подробно.</para> <variablelist> <anchor id="penup"/> <varlistentry > <term >перо_подними (пп)<indexterm ><primary >перо_подними (пп)</primary ></indexterm ></term> <listitem ><para ><screen >перо_подними</screen> <userinput >перо_подними</userinput > отрывает перо от холста. Пока перо оторвано, Черепашка не будет рисовать линию во время перемещений. См. также <userinput >перо_опусти</userinput >. <userinput >перо_подними</userinput > также может записываться как <userinput >пп</userinput >.</para ></listitem> </varlistentry> </variablelist> <variablelist> <anchor id="pendown"/> <varlistentry > <term >перо_опусти (по)<indexterm ><primary >перо_опусти (по)</primary ></indexterm ></term> <listitem ><para ><screen >перо_опусти</screen> <userinput >перо_опусти</userinput > опускает перо на холст. Когда перо опущено, Черепашка при перемещениях рисует линию. См. также <userinput >перо_подними</userinput >. <userinput >перо_опусти</userinput > также может записываться как <userinput >по</userinput >.</para ></listitem> </varlistentry> </variablelist> <variablelist> <anchor id="setpenwidth"/> <varlistentry > <term >толщина_пера (тп)<indexterm ><primary >толщина_пера (тп)</primary ></indexterm ></term> <listitem ><para ><screen >толщина_пера X</screen> <userinput >толщина_пера</userinput > устанавливает толщину пера (толщину линии) в X <glossterm linkend="pixels" >пикселов</glossterm >. <userinput >толщина_пера</userinput > также может записываться как <userinput >тп</userinput >.</para ></listitem> </varlistentry> </variablelist> <variablelist> <anchor id="setfgcolor"/> <varlistentry > <term >цвет_пера (цп)<indexterm ><primary >цвет_пера (цп)</primary ></indexterm ></term> <listitem ><para ><screen >цвет_пера R,G,B</screen> <userinput >цвет_пера</userinput > устанавливает цвет пера. В качестве параметров указывается <glossterm linkend="rgb" >RGB комбинация</glossterm >. <userinput >цвет_пера</userinput > также может записываться как <userinput >цп</userinput >.</para ></listitem> </varlistentry> </variablelist> </sect2> <sect2 id="canvas"> <title >Команды для работы с холстом.</title> <para >Существует несколько команд для работы с холстом.</para> <variablelist> <anchor id="resizecanvas"/> <varlistentry> <term >размер_холста (рх)<indexterm ><primary >размер_холста (рх)</primary ></indexterm ></term> <listitem ><para ><screen >размер_холста X,Y</screen> <userinput >размер_холста</userinput > устанавливает размер холста. В качестве входных параметров задаются ширина X и высота Y в <glossterm linkend="pixels" >пикселах</glossterm >. <userinput >размер_холста</userinput > также может записываться как <userinput >рх</userinput >.</para ></listitem> </varlistentry> </variablelist> <variablelist> <anchor id="setbgcolor"/> <varlistentry > <term >цвет_холста (цх)<indexterm ><primary >цвет_холста (цх)</primary ></indexterm ></term> <listitem ><para ><screen >цвет_холста R,G,B</screen> <userinput >цвет_холста</userinput > устанавливает цвет холста. Входным параметром является <glossterm linkend="rgb" >RGB комбинация</glossterm >. <userinput >цвет_холста</userinput > также может записываться как <userinput >цх</userinput >.</para ></listitem> </varlistentry> </variablelist> </sect2> <sect2 id="clean"> <title >Команды очистки</title> <para >Существуют две команды очистки холста.</para> <variablelist> <anchor id="clear"/> <varlistentry > <term >очисти (очс)<indexterm ><primary >очисти (очс)</primary ></indexterm ></term> <listitem ><para ><screen >очисти</screen> <userinput >очисти</userinput > удаляет с холста все рисунки. Всё остальное останется по-прежнему: позиция и угол направления Черепашки, цвет холста, видимость Черепашки и размер холста.</para ></listitem> </varlistentry> </variablelist> <variablelist> <anchor id="reset"/> <varlistentry > <term >сброс<indexterm ><primary >сброс</primary ></indexterm ></term> <listitem ><para ><screen >сброс</screen> <userinput >сброс</userinput > очищает больше, чем команда <userinput >очисти</userinput >. После выполнения команды <userinput >сброс</userinput > всё будет выглядеть так, как будто вы только что запустили &kturtle;. Черепашка будет расположена в центре экрана, цвет холста будет белым, и Черепашка будет рисовать чёрные линии на холсте размером 400 x 400 пикселей.</para ></listitem> </varlistentry> </variablelist> </sect2> <sect2 id="sprites"> <title >Черепашка — это спрайт.</title> <para >Большинство людей и понятия не имеют, что такое спрайты, так вот, спрайты — это маленькие картинки, которые можно перемещать по экрану. Так что Черепашка — это <glossterm linkend="sprites" >спрайт</glossterm >. </para> <para >Ниже будет дано подробное описание всех команд работы со спрайтами.</para> <para >[Текущая версия KTurtle пока не поддерживает использование спрайтов, отличных от Черепашки. В ближайшем будущем вы сможете заменить Черепашку на любой другой персонаж по собственному вкусу]</para> <variablelist> <anchor id="spriteshow"/> <varlistentry > <term >покажи (пж)<indexterm ><primary >покажи (пж)</primary ></indexterm ></term> <listitem ><para ><screen >покажи</screen> <userinput >покажи</userinput > делает Черепашку видимой после того, как она была скрыта. <userinput >покажи</userinput > также может записываться как <userinput >пж</userinput >.</para ></listitem> </varlistentry> </variablelist> <variablelist> <anchor id="spritehide"/> <varlistentry > <term >спрячь (сч)<indexterm ><primary >спрячь (сч)</primary ></indexterm ></term> <listitem ><para ><screen >спрячь</screen> <userinput >спрячь</userinput > скрывает Черепашку. Это полезно, когда Черепашка не уместна в ваших рисунках. <userinput >спрячь</userinput > также может записываться как <userinput >сч</userinput >.</para ></listitem> </varlistentry> </variablelist> </sect2> <sect2 id="writing"> <title >Черепашка может писать?</title> <para >Черепашка может написать всё, что вы ей прикажете.</para> <variablelist> <anchor id="print"/> <varlistentry > <term >напиши<indexterm ><primary >напиши</primary ></indexterm ></term> <listitem ><para ><screen >напиши X</screen> <userinput >напиши</userinput > используется для указания Черепашке написать что-либо на холсте. В качестве входных параметров можно передавать строки или числа. Вы можете печатать различные числа и строки, комбинируя их вместе оператором <quote >+</quote >. Вот маленький пример: <screen >$год = 2003 $автор = "Cies" напиши $автор + " начал проект KTurtle в " + $год + " и до сих пор получает удовольствие от работы над ним!" </screen> </para ></listitem> </varlistentry> </variablelist> <variablelist> <anchor id="fontsize"/> <varlistentry > <term >размер_шрифта<indexterm ><primary >размер_шрифта</primary ></indexterm ></term> <listitem ><para ><screen >размер_шрифта X</screen> <userinput >размер_шрифта</userinput > устанавливает размер шрифта, используемый для печати. Входной параметр один. Он должен быть числом. Размер задаётся в <glossterm linkend="pixels" >пикселах</glossterm >.</para ></listitem> </varlistentry> </variablelist> </sect2> <sect2 id="math-commands"> <title >Математические команды</title> <para >Далее перечислены дополнительные математические команды &kturtle;.</para> <variablelist> <anchor id="round"/> <varlistentry> <term >округли<indexterm ><primary >округли</primary ></indexterm ></term> <listitem ><para ><screen >округли(x)</screen> <userinput >округли</userinput > заданное число до ближайшего целого. <screen> напиши округли(10.8) вперёд 20 напиши округли(10.3) </screen > Выполняя этот код, Черепашка напечатает числа 11 и 10.</para ></listitem> </varlistentry> </variablelist> <variablelist> <anchor id="random"/> <varlistentry > <term >случайное (слч)<indexterm ><primary >случайное (слч)</primary ></indexterm ></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> <variablelist> <anchor id="mod"/> <varlistentry > <term >остаток<indexterm ><primary >остаток</primary ></indexterm ></term> <listitem ><para ><screen >остаток X,Y</screen> <userinput >остаток</userinput > возвращает остаток после деления первого числа на второе.</para ></listitem> </varlistentry> </variablelist> <variablelist> <anchor id="sqrt"/> <varlistentry > <term >sqrt<indexterm ><primary >sqrt</primary ></indexterm ></term> <listitem ><para ><screen >sqrt X</screen> <userinput >sqrt</userinput > используется для поиска квадратного корня от числа X.</para ></listitem> </varlistentry> </variablelist> <!-- <variablelist> <anchor id="exp"/> <varlistentry > <term >exp<indexterm ><primary >exp</primary ></indexterm ></term> <listitem ><para ><screen >sqrt X</screen> </para ></listitem> </varlistentry> </variablelist> --> <variablelist> <anchor id="pi"/> <varlistentry > <term >pi<indexterm ><primary >pi</primary ></indexterm ></term> <listitem ><para ><screen >pi</screen> Эта команда возвращает константу Пи, <userinput >3.14159</userinput >.</para ></listitem> </varlistentry> </variablelist> <variablelist> <anchor id="sin"/> <anchor id="cos"/> <anchor id="tan"/> <varlistentry> <term >sin<indexterm ><primary >sin</primary ></indexterm >, cos<indexterm ><primary >cos</primary ></indexterm >, tg<indexterm ><primary >tg</primary ></indexterm ></term> <listitem ><para> <screen >sin X cos X tg X </screen> Эти три команды представляют всемирно известные тригонометрические функции <userinput >sin</userinput >, <userinput >cos</userinput > и <userinput >tg</userinput >. Входной аргумент этих команд, X, является <link linkend="number" >числом</link >.</para ></listitem> </varlistentry> </variablelist> <variablelist> <anchor id="arcsin"/> <anchor id="arccos"/> <anchor id="arctan"/> <varlistentry> <term >arcsin<indexterm ><primary >arcsin</primary ></indexterm >, arccos<indexterm ><primary >arccos</primary ></indexterm >, arctg<indexterm ><primary >arctg</primary ></indexterm ></term> <listitem ><para> <screen >arcsin X arccos X arctg X </screen> Вот список обратных тригонометрические функций для <link linkend="sin" >sin</link >, <link linkend="cos" >cos</link > и <link linkend="tan" >tg</link >. Входной аргумент этих функций, X, является <link linkend="number" >числом</link >.</para ></listitem> </varlistentry> </variablelist> </sect2> <sect2 id="dialogs"> <title >Взаимодействие через диалоги</title> <para >Диалог — маленькое окно, которое обеспечивает обратную связь или запрашивает ввести что-либо. В &kturtle; есть две команды для диалога: <userinput >сообщение</userinput > и <userinput >спроси</userinput ></para> <variablelist> <anchor id="message"/> <varlistentry > <term >сообщение<indexterm ><primary >сообщение</primary ></indexterm ></term> <listitem ><para ><screen >сообщение X</screen> Команде <userinput >сообщение</userinput > требуется передать <link linkend="string" >строку</link >, она будет показана в появившемся окне. <screen >сообщение "Cies начал KTurtle в 2003 сих пор получает удовольствие от работы над ним!" </screen> </para ></listitem> </varlistentry> </variablelist> <variablelist> <anchor id="ask"/> <varlistentry > <term >спроси<indexterm ><primary >спроси</primary ></indexterm ></term> <listitem ><para ><screen >спроси X</screen> <userinput >спроси</userinput > принимает на вход <link linkend="string" >строку</link >. Она показывает эту строку во всплывающем диалоге (как и команда <link linkend="message" >сообщение</link >), а также она показывает поле ввода. После того, как пользователь ввёл <link linkend="number" >число</link > или <link linkend="string" >строку</link >, это значение может быть сохранено в <link linkend="assignment-of-variables" >переменной</link > или передано как аргумент <link linkend="commands" >команде</link >. Например: <screen> $вход = спроси "В каком гору ты родился?" $выход = 2003 - $вход напиши "В 2003 тебе было " + $выход + " лет." </screen > Если пользователь ничего не введёт или просто закроет диалог, то <link linkend="assignment-of-variables" >переменная</link > будет пустой.</para ></listitem> </varlistentry> </variablelist> </sect2> </sect1> <sect1 id="assignment-of-variables"> <title >Назначение переменных</title> <para >Вначале рассмотрим переменные, а затем присвоение значений переменным. </para> <para >Переменные — это слова, начинающиеся с символа <quote >$</quote >. В <link linkend="the-editor" >редакторе кода</link > они <glossterm >выделяются</glossterm > фиолетовым.</para> <para >Переменные могут содержать <link linkend="number" >числовые</link >, <link linkend="string" >строковые</link > или <link linkend="boolean-value" >логические (истина/ложь) значения</link >. Значение присваивается переменной с использованием символа <userinput >=</userinput >. Переменные хранят значения до завершения программы или до того момента, как в переменную будет записано новое значение.</para> <para >После присвоения значения переменной, вы сможете использовать это значение. Например, в следующем фрагменте кода &turtlescript;: <screen> $x = 10 $x = $x / 3 напиши $x </screen > Сперва переменной <userinput >$x</userinput > присваивается значение <userinput >10</userinput >. Далее переменной <userinput >$x</userinput > присваивается новое значение её самой, разделённой на <userinput >3</userinput >. Фактически это означает, что переменной <userinput >$x</userinput > будет присвоен результат <userinput >10 / 3</userinput >. В конце значение переменной <userinput >$x</userinput > распечатывается. В строках используется содержимое переменной <userinput >$x</userinput >.</para> <para >Для того чтобы использовать переменную, её надо предварительно назначить. Например: <screen> напиши $n </screen > Даст сообщение об ошибке.</para> <para >Рассмотрим следующий фрагмент кода &turtlescript;: <screen> $a = 2004 $b = 25 # следующая команда напечатает "2029" напиши $a + $b назад 30 # следующая команда напечатает "2004 плюс 25 равно 2029" напиши $a + " плюс " + $b + " равно " + ($a + $b) </screen > В первых двух строках переменные <userinput >$a</userinput > и <userinput >$b</userinput > устанавливаются равными 2004 и 25. Далее выполняются две команды <userinput >напиши</userinput > и, между ними, команда <userinput >назад 30</userinput >. Комментарии перед <userinput >напиши</userinput > объясняют, что будет напечатано. Команда <userinput >назад 30</userinput > используется здесь для уверенности в том, что каждая новая печать на холст будет на новой строке. Как видите, переменные используются точно также, как и их содержимое — совместно с любыми <link linkend="operators" >операторами</link > или как входные данные при вызове <link linkend="commands" >команд</link >.</para> <para >Ещё пример: <screen> $имя = спроси "Как тебя зовут?" напиши "Привет " + $имя + "! Удачи в изучении искусства программирования..." </screen > Простой и понятный пример. Переменная <userinput >$имя</userinput > рассматривается как строка.</para> <para ><link linkend="the-inspector" >Инспектор</link > очень сильно помогает при использовании переменных. Он отображает содержимое всех используемых в данный момент переменных.</para> </sect1> <sect1 id="controlling-execution"> <title >Контроль над выполнением</title> <para >Управляющие операторы позволяют вам контролировать процесс выполнения (о чём говорит само их название).</para> <para >Управляющие операторы <glossterm >выделяются</glossterm > тёмно-зелёным цветом и жирным начертанием шрифта. Скобки, используемые вместе с ними, <glossterm >выделяются</glossterm > чёрным.</para> <sect2 id="wait"> <title >Может ли Черепашка ждать?</title> <para >Если вы уже немного попрактиковались в программировании в &kturtle;, вы могли заметить, что Черепашка может рисовать чересчур быстро. Следующая команда позволяет избежать этого.</para> <variablelist> <varlistentry> <term >жди<indexterm ><primary >жди</primary ></indexterm ></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> <variablelist> <varlistentry> <term >если<indexterm ><primary >если</primary ></indexterm ></term> <listitem ><para ><screen >если <link linkend="boolean-value" >логическое значение</link > { ... }</screen> Код, расположенный между скобками, будет выполнен только <userinput >если</userinput > в результате вычисления <link linkend="boolean-value" >логического значения</link > получится <quote >истина</quote >. <screen> $x = 6 если $x > 5 { напиши "$x больше пяти!" } </screen > В первой строке контейнеру <userinput >$x</userinput > присваивается значение 6. Во второй строке <link linkend="comparing-operators" >оператор сравнения</link > используется для вычисления <userinput >$x > 5</userinput >. Если ответом на него будет <quote >истина</quote >, 6 больше чем 5, управляющий оператор <userinput >если</userinput > позволит выполнить код, расположенный между скобками.</para ></listitem> </varlistentry> </variablelist> </sect2> <sect2 id="else"> <title >Если нет, другими словами: «иначе»</title> <variablelist> <varlistentry> <term >иначе<indexterm ><primary >иначе</primary ></indexterm ></term> <listitem ><para ><screen >если <link linkend="boolean-value" >логическое значение</link > { ... } иначе { ... }</screen> <userinput >иначе</userinput > может быть дополнением к оператору условного выполнения <link linkend="if" ><userinput >если</userinput ></link >. Код между скобками, расположенными после <userinput >иначе</userinput > будет выполнен тогда, когда <link linkend="boolean-value" >логическое выражение</link > будет <quote >ложь</quote >. <screen> сброс $x = 4 если $x > 5 { напиши "$x больше пяти!" } иначе { напиши "$x меньше пяти!" } </screen > <link linkend="comparing-operators" >Оператор сравнения</link > вычисляет выражение <userinput >$x > 5</userinput >. Так как 4 не больше, чем 5, результатом будет <quote >ложь</quote >. Это означает, что будет выполнен код между скобками после <userinput >иначе</userinput >.</para ></listitem> </varlistentry> </variablelist> </sect2> <sect2 id="while"> <title >Цикл «пока»</title> <variablelist> <varlistentry> <term >пока<indexterm ><primary >пока</primary ></indexterm ></term> <listitem ><para ><screen >пока <link linkend="boolean-value" >логическое значение</link > { ... }</screen> Управляющий оператор <userinput >пока</userinput > очень похож на <link linkend="if" ><userinput >если</userinput ></link >. Разница в том, что <userinput >пока</userinput > будет повторять код, расположенный между скобками, до тех пор, пока <link linkend="boolean-value" >логическое выражение</link > не выдаст значение <quote >ложь</quote >. <screen> $x = 1 пока $x < 5 { вперёд 10 жди 1 $x = $x + 1 } </screen > В первой строке <userinput >$x</userinput > присваивается 1. На второй строке выполняется сравнение <userinput >$x < 5</userinput >. Так как получаемое значение — <quote >истина</quote >, оператор <userinput >пока</userinput > начнёт выполнять код между скобками, пока не будет получена <quote >ложь</quote >. В данном случае код между скобками будет выполнен 4 раза, потому что на каждом прогоне в пятой строке <userinput >$x</userinput > будет увеличиваться на 1.</para ></listitem> </varlistentry> </variablelist> </sect2> <sect2 id="repeat"> <title >Цикл «повтори»</title> <variablelist> <varlistentry> <term >повтори<indexterm ><primary >повтори</primary ></indexterm ></term> <listitem ><para ><screen >повтори <link linkend="number" >число</link > { ... }</screen> Управляющий оператор <userinput >повтори</userinput > похож на <link linkend="while" ><userinput >пока</userinput ></link >. Разница в том, что <userinput >повтори</userinput > повторяет код в скобках заданное число раз.</para ></listitem> </varlistentry> </variablelist> </sect2> <sect2 id="for"> <title >Считающий цикл «для»</title> <variablelist> <varlistentry> <term >для<indexterm ><primary >для</primary ></indexterm ><indexterm ><primary >шаг</primary ></indexterm ></term> <listitem ><para ><screen >для <link linkend="assignment-of-variables" >переменная</link > = <link linkend="number" >число</link > до <link linkend="number" >число</link > { ... }</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> <para >По умолчанию, шаг цикла равен 1. Вы можете задать другой шаг цикла с помощью <screen >для <link linkend="assignment-of-variables" >переменная</link > = <link linkend="number" >число</link > до <link linkend="number" >число</link > шаг <link linkend="number" >шаг</link > { ... }</screen ></para ></listitem> </varlistentry> </variablelist> </sect2> <sect2 id="break"> <title >Выход из цикла</title> <variablelist> <varlistentry> <term >прекрати<indexterm ><primary >прекрати</primary ></indexterm ></term> <listitem ><para ><screen >прекрати</screen> Немедленно завершает выполнение текущего цикла и передаёт управление оператору, следующему сразу после этого цикла.</para ></listitem> </varlistentry> </variablelist> </sect2> <sect2 id="exit"> <title >Остановка выполнения программы</title> <variablelist> <varlistentry> <term >закончить<indexterm ><primary >закончить</primary ></indexterm ></term> <listitem ><para ><screen >закончить</screen> Заканчивает выполнение программы.</para ></listitem> </varlistentry> </variablelist> </sect2> </sect1> <sect1 id="learn"> <!--<sect2 id="name"> <title >Names</title> <para >When using the &turtlescript; programming language you create new things. If you write a program you will often need <link linkend="containers" >containers</link > and in some cases you need <link linkend="learn" >learn</link > to create new commands. When making a new command with <link linkend="learn" >learn</link > you will have to specify a name.</para> <para >You can choose any name, as long as it does not already have a meaning. For instance you cannot name a function <link linkend="forward" >forward</link >, since that name is already used for an internal command. <screen > # here forward is used as a new command, # but it already has a meaning so # this will produce an error: learn forward { print "this is invalid" } # this works: learn myforward { print "this is ok" } </screen> Names can contain only letters, numbers and underscores (_). Yet they have to start with a letter. Container names have to start with the container prefix ($). <screen > # here forward is used as a container, # starting with the $ prefix, so it does # not conflict with the forward command $forward = 20 print $forward </screen> </para> <para >Containers are <glossterm >highlighted</glossterm > with bolded purple in the <link linkend="the-editor" >code editor</link >.</para> <para> Please read the documentation on <link linkend="containers" >containers</link > and the <link linkend="learn" >learn</link > command for a better explanation and more examples. </para> </sect2 >--> <title >Создавайте свои собственные команды!</title> <para >Команда <userinput >выучи</userinput > — это особенная команда, потому что она предназначена для создания ваших собственных команд. Создаваемые вами команды могут принимать <glossterm linkend="input-output" >входные</glossterm > параметры и <glossterm linkend="input-output" >возвращать</glossterm > различные значения. Давайте посмотрим, как создаются собственные команды: <screen> выучи круг $x { повтори 36 { вперёд $x налево 10 } } </screen > Новая команда называется <userinput >круг</userinput >. Команда <userinput >круг</userinput > принимает один <glossterm linkend="input-output" >входной</glossterm > аргумент для задания размера круга. Команда <userinput >круг</userinput > ничего не <glossterm linkend="input-output" >возвращает</glossterm >. Теперь команду <userinput >круг</userinput > можно использовать как же, как и обычные команды: <screen >выучи круг $X { повтори 36 { вперёд $X налево 10 } } иди 200,200 круг 20 иди 300,300 круг 40 </screen> </para> <para >В следующем примере будет создана команда, возвращающая значение.<screen> выучи факториал $x { $r = 1 для $i = 1 до $x { $r = $r * $i } верни $r } напиши факториал 5 </screen > В данном примере создана новая команда с именем <userinput >факториал</userinput >. Если на вход этой команде подать <userinput >5</userinput >, то на выходе будет произведение <userinput >5*4*3*2*1</userinput >. При использовании <userinput >верни</userinput > будет задано <glossterm linkend="input-output" >выходное</glossterm > значение и оно будет возвращено при выполнении.</para> <para >У команды может быть более одного <glossterm linkend="input-output" >входа</glossterm >. В следующем примере создаётся команда, рисующая прямоугольник: <screen> выучи прямоугольник $x, $y { вперёд $y направо 90 вперёд $x направо 90 вперёд $y направо 90 вперёд $x направо 90 } </screen > Теперь вы можете дать команду <userinput >прямоугольник 50, 100</userinput > и Черепашка нарисует на холсте прямоугольник. </para> </sect1> </chapter>