<!--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
>Manual de referencia do programador de &turtlelang;</title>
<para
>Este é o manual de referencia do &turtlelang; de &kturtle;. Neste capítulo primeiro descreberemos brevemente os diferentes <link linkend="different-instructions"
>tipos de instruccións</link
>, e logo explicaranse os <link linkend="commands"
>comandos</link
> un por un. Despois explícanse os <link linkend="containers"
>contedores</link
>, as <link linkend="math"
>matemáticas</link
>, as <link linkend="questions"
>perguntas</link
> e os <link linkend="controlling-execution"
>controladores da execución</link
>. Finalmente explícase como crear os seus proprios comandos mediante <link linkend="learn"
>define</link
>.</para>

<sect1 id="different-instructions">
<title
>Os tipos de instrucións</title>
<para
>Como en calquera linguaxe, &turtlelang; ten tipos diferentes de palabras e símbolos. Aquí explícanse brevemente as diferenzas entre os tipos.</para>

<sect2 id="command">
<title
>Comandos</title>
<para
>Empregando comandos dille ao sapoconcho de &kturtle; que faga algo. Algúns comandos precisan dunha entrada, outros xeran unha saída. <screen
># avanza é un comando que precisa dunha entrada, neste caso o número 100:
avanza 100
</screen>
</para>
<para
>Para coñecer máis detalles acerca de todos os comandos soportados por &kturtle; vaia <link linkend="commands"
>aquí</link
>.</para>
</sect2>

<sect2 id="number">
<title
>Números</title>
<para
>Posibelmente xa saiba bastante acerca dos números. A maneira de utilizar os números en &kturtle; non é moi diferente da oral, nen da matemática. </para>
<para
>Temos os números naturais: <userinput
>0</userinput
>, <userinput
>1</userinput
>, <userinput
>2</userinput
>, <userinput
>3</userinput
>, <userinput
>4</userinput
>, <userinput
>5</userinput
> etc, os números negativos: <userinput
>-1</userinput
>, <userinput
>-2</userinput
>, <userinput
>-3</userinput
> etc. E tamén temos números con parte decimal, por exemplo: <userinput
>0.1</userinput
>, <userinput
>3.14</userinput
>, <userinput
>33.3333</userinput
>, <userinput
>-5.05</userinput
>, <userinput
>-1.0</userinput
>. </para>
<para
>Os números poden ser utilizados en <link linkend="math"
>cálculos matemáticos</link
> e <link linkend="questions"
>perguntas</link
>. Tamén poden porse en <link linkend="containers"
>contedores</link
>.</para>
<para
>Os números aparecen <glossterm
>realzados</glossterm
> en vermello escuro no <link linkend="the-code-editor"
>editor do código</link
>.</para>
</sect2>

<!-- constants like pi? -->

<sect2 id="string">
<title
>Textos</title>
<para
>Primeiro un exemplo: <screen>
escrebe "Olá, son un texto."</screen>
Neste exemplo <userinput
>escrebe</userinput
> é un comando no que <userinput
>"Olá, son un texto."</userinput
> é un texto. Os textos comezan e rematan con aspas, <userinput
>"</userinput
>, mediante as cais &kturtle; sabe que é un texto.</para>
<para
>Os textos poden porse en <link linkend="containers"
>contedores</link
>. Aínda así non poden ser empregados en <link linkend="math"
>cálculos matemáticos</link
> ou <link linkend="questions"
>perguntas</link
>.</para>
<para
>Os textos son <glossterm
>realzados</glossterm
> en vermello no <link linkend="the-code-editor"
>editor do código</link
>.</para>
</sect2>


<sect2 id="name">
<title
>Nomes</title>
<para
>Cando empregue a linguaxe de programación &turtlelang; pode crear novos textos. Se escrebe un programa a miúdo precisará <link linkend="containers"
>contedores</link
> e nalgúns casos <link linkend="learn"
>define</link
> para crear novos comandos. Cando faga un novo comando con <link linkend="learn"
>define</link
> terá que especificar un nome.</para>
<para
>Pode escoller calquera nome mentres non teña xa asinado un significado. Por exemplo non pode crear unha función chamada <link linkend="forward"
>avanza</link
>, porque este nome xa é empregado por un comando interno. <screen>
# aquí emprégase avanza como un comando novo,
# pero xa ten un significado, polo que 
# dará un erro:
define avanza {
  escrebe "isto non é válido"
}

# isto funciona:
define adianta {
  escrebe "isto serve"
}
</screen
> Os nomes só poden conter letras, número e trazos baixos (_), e teñen que comezar por unha letra. Os nomes de contedor teñen que comezar co prefixo de contedor ($). <screen
># aquí emprégase avanza como un contedor,
# polo que se prefixa cun $, polo que non
# entra en conflito co comando avanza
$avanza = 20
escrebe $avanza
</screen>
</para>
<para
>Os contedores <glossterm
>reálzanse</glossterm
> en letra grosa púrpura no <link linkend="the-code-editor"
>editor do código</link
>.</para>
<para
>Lea a documentación acerca dos <link linkend="containers"
>contedores</link
> e do comando <link linkend="learn"
>define</link
> para ter mellores explicacións e máis exemplos. </para>
</sect2>

<sect2 id="assignment">
<title
>Asinacións</title>
<para
>As asinacións fanse mediante o símbolo <userinput
>=</userinput
>. Nas linguaxes de programación é mellor ler o <userinput
>=</userinput
> non como "é igual a" senón como "faise". A expresión "é igual a" é máis apropriada para o <userinput
>==</userinput
> que é unha <link linkend="questions"
>pergunta</link
>.</para>
<para
>Polo xeral as asinacións empréganse por dous motivos, (1) para engadir contido aos <link linkend="containers"
>contedores</link
>, e (2) para modificar o contido dun contedor. Por exemplo: <screen
>$x = 10
# o contedor x agora contén o número 10
$W = "A miña idade é: "
# o contedor W agora contén o texto "A miña idade é: "
# isto que segue escrebe o contido dos contedores "W" e "x"
escrebe $W + $x
</screen>
</para>
<para
>Para máis exemplos consulte a sección que explica os <link linkend="containers"
>contedores</link
>.</para>
</sect2>

<sect2 id="math-symbols">
<title
>Símbolos matemáticos</title>
<para
>&kturtle; admite os símbolos matemáticos básicos: suma (<userinput
>+</userinput
>), resta (<userinput
>-</userinput
>), multiplicación (<userinput
>*</userinput
>), división (<userinput
>/</userinput
>) e os parénteses <userinput
>(</userinput
> e <userinput
>)</userinput
>.</para>
<para
>Para recibir unha explicación completa e máis exemplos consulte a sección de <link linkend="math"
>matemáticas</link
>.</para>
</sect2>

<sect2 id="question">
<title
>Perguntas</title>
<para
>Podemos facer perguntas simples nas que a resposta sexa "certo" ou "falso".</para>
<para
>O uso das perguntas é explicado en detalle na sección de <link linkend="questions"
>perguntas</link
>.</para>
</sect2>

<sect2 id="questions-glue">
<title
>Encadeamento de perguntas</title>
<para
>As perguntas poden combinarse mediante as palabras-chave <userinput
>e</userinput
>, <userinput
>ou</userinput
> e unha palabra especial: <userinput
>non</userinput
>.</para>
<para
>A utilización destas palabras-chave explícase na sección <link linkend="question-glue"
>Combinación de perguntas</link
>.</para>
</sect2>


<sect2 id="comment">
<title
>Comentarios</title>
<para
>Os comentarios son liñas que comezan cun <userinput
>#</userinput
>. Por exemplo: <screen>
# isto é un comentario!
escrebe "isto non é un comentario"
# a liña previa non é un comentario, pero a seguinte si o é:
# escrebe "isto non é un comentario"
</screen
> Podemos engadir comentarios no código para axudarnos a nós mesmos ou a outras persoas a comprender o que fai. Os comentarios son utilizados para: (1) engadir unha pequena descrición do programa, (2) explicar como funciona un pedazo de código se é algo lioso, e (3) para "comentar" liñas de código que deben ser ignoradas temporalmente (por exemplo a última liña do exemplo anterior).</para>
<para
>As liñas comentadas son <glossterm
>realzadas</glossterm
> en gris claro no <link linkend="the-code-editor"
>editor do código</link
>.</para>
</sect2>

</sect1>


<sect1 id="commands">
<title
>Comandos</title>
<para
>Mediante os comandos pode dicirlle ao sapoconcho ou a &kturtle; que faga algo. Algúns comandos precisan de parámetros, outros xeran un resultado. Nesta sección explicamos todos os comandos que poden ser empregados en &kturtle;. Lembre que todos os comandos incorporados que se explican aquí serán <glossterm
>realzados</glossterm
> en azul no <link linkend="the-code-editor"
>editor do código</link
>, o que o axudará a distinguilos.</para>

<sect2 id="moving-the-turtle">
<title
>Mover o sapoconcho</title>
<para
>Hai varios comandos que moven o sapoconcho pola pantalla.</para>

  <variablelist>
    <anchor id="forward"/>
    <varlistentry
> 
      <term
>avanza (av)<indexterm
><primary
>avanza (av)</primary
></indexterm
></term>
      <listitem
><para
><screen
>avanza X</screen>
<userinput
>avanza</userinput
> move o sapoconcho cara diante X píxeles. Cando o lápis está pousado deixará un rastro. <userinput
>avanza</userinput
> pode abreviarse como <userinput
>av</userinput
></para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="backward"/>
    <varlistentry
>  
      <term
>recua (re)<indexterm
><primary
>recua (re)</primary
></indexterm
></term>
      <listitem
><para
><screen
>recua X</screen>
<userinput
>recua</userinput
> move o sapoconcho cara atrás X píxeles. Se o lápis está pousado deixará un rastro. <userinput
>recua</userinput
> pode ser abreviado como <userinput
>re</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="turnleft"/>
    <varlistentry
> 
      <term
>xiraesquerda (xe)<indexterm
><primary
>xiraesquerda (xe)</primary
></indexterm
></term>
      <listitem
><para
><screen
>xiraesquerda X</screen>
<userinput
>xiraesquerda</userinput
> ordénalle ao sapoconcho que xire X graus á esquerda. <userinput
>xiraesquerda</userinput
> pode abreviarse como <userinput
>xe</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="turnright"/>
    <varlistentry
> 
      <term
>xiradereita (xd)<indexterm
><primary
>xiradereita (xd)</primary
></indexterm
></term>
      <listitem
><para
><screen
>xiradereita X</screen>
<userinput
>xiradereita</userinput
> ordénalle ao sapoconcho que xire X graus á dereita. <userinput
>xiradereita</userinput
> pode abreviarse como <userinput
>xd</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="direction"/>
    <varlistentry
> 
      <term
>direccion (dir)<indexterm
><primary
>direccion (dir)</primary
></indexterm
></term>
      <listitem
><para
><screen
>direccion X</screen>
<userinput
>direccion</userinput
> fai que o sapoconcho tome unha ruta a X graus do cero, polo que non é relativa á anterior ruta que seguise o sapoconcho. <userinput
>direccion</userinput
> pode abreviarse como <userinput
>dir</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="center"/>
    <varlistentry
> 
      <term
>vaiaocentro<indexterm
><primary
>vaiaocentro</primary
></indexterm
></term>
      <listitem
><para
><screen
>vaiaocentro</screen>
<userinput
>vaiaocentro</userinput
> leva o sapoconcho ao centro do lenzo.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="go"/>
    <varlistentry
> 
      <term
>vai<indexterm
><primary
>vai</primary
></indexterm
></term>
      <listitem
><para
><screen
>vai X,Y</screen>
<userinput
>vai</userinput
> fai que o sapoconcho vaia a un lugar concreto do lenzo. Este lugar está a X <glossterm linkend="pixels"
>píxeles</glossterm
> do borde esquerdo do lenzo e a Y <glossterm linkend="pixels"
>píxeles</glossterm
> da parte de riba do lenzo. </para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="gox"/>
    <varlistentry
> 
      <term
>vaix<indexterm
><primary
>vaix</primary
></indexterm
></term>
      <listitem
><para
><screen
>vaix X</screen>
<userinput
>vaix</userinput
> fai que o sapoconcho vaia a unha posición situada a X <glossterm linkend="pixels"
>píxeles</glossterm
> do borde esquerdo do lenzo sen desprazarse en altura.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="goy"/>
    <varlistentry
> 
      <term
>vaiy<indexterm
><primary
>vaiy</primary
></indexterm
></term>
      <listitem
><para
><screen
>vaiy Y</screen>
<userinput
>vaiy</userinput
> fai que o sapoconcho vaia a unha posición situada a Y <glossterm linkend="pixels"
>píxeles</glossterm
> do cume do lenzo sen desprazarse en horizontal.</para
></listitem>
    </varlistentry>
  </variablelist>
  <note
><para
>Cando se utilizan os comandos <userinput
>vai</userinput
>, <userinput
>vaix</userinput
>, <userinput
>vaiy</userinput
> e <userinput
>vaiaocentro</userinput
> o sapoconcho non debuxa a liña, con independencia de que o lápis estexa erguido ou pousado.</para>
  </note>
</sect2>

<sect2 id="locate-the-turtle">
<title
>Onde está o sapoconcho?</title>
<para
>Hai dous comandos que din a posición do sapoconcho na pantalla.</para>

  <variablelist>
    <anchor id="getx"/>
    <varlistentry
> 
      <term
>coordenadaX<indexterm
><primary
>coordenadaX</primary
></indexterm
></term>
      <listitem
><para
><userinput
>coordenadaX</userinput
> devolve a cantidade de píxeles que hai desde a esquerda do lenzo até a posición do sapoconcho.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="gety"/>
    <varlistentry
> 
      <term
>coordenadaY<indexterm
><primary
>coordenadaY</primary
></indexterm
></term>
      <listitem
><para
><userinput
>coordenadaY</userinput
> devolve a cantidade de píxeles que hai do cume do lenzo até a posición do sapoconcho.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="pen">
<title
>O sapoconcho ten un lápis</title>
<para
>O sapoconcho ten un lápis que debuxa unha liña á medida que se move o animal. Hai uns poucos comandos que controlan este lápis. Nesta sección explicarémolos.</para>
  <variablelist>
    <anchor id="penup"/>
    <varlistentry
> 
      <term
>subelapis (sl)<indexterm
><primary
>subelapis (sl)</primary
></indexterm
></term>
      <listitem
><para
><screen
>subelapis</screen>
<userinput
>subelapis</userinput
> separa o lápis do lenzo. Cando o lápis está <quote
>subido</quote
> non se debuxan liñas ao moverse o sapoconcho. Consulte tamén <userinput
>baixalapis</userinput
>. <userinput
>subeLapis</userinput
> pode abreviarse como <userinput
>sl</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="pendown"/>
    <varlistentry
> 
      <term
>baixalapis (bl)<indexterm
><primary
>baixalapis (bl)</primary
></indexterm
></term>
      <listitem
><para
><screen
>baixalapis</screen>
<userinput
>baixalapis</userinput
> pousa o lápis no lenzo. Cando o lápis está <quote
>baixado</quote
> debúxanse liñas cando se move o sapoconcho. Consulte tamén <userinput
>subelapis</userinput
>. <userinput
>baixalapis</userinput
> pode abreviarse como <userinput
>bl</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="setpenwidth"/>
    <varlistentry
> 
      <term
>ancholapis (al)<indexterm
><primary
>ancholapis (al)</primary
></indexterm
></term>
      <listitem
><para
><screen
>ancholapis X</screen>
<userinput
>ancholapis</userinput
> estabelece o grosor do trazo co valor de X <glossterm linkend="pixels"
>píxeles</glossterm
>. <userinput
>ancholapis</userinput
> pode abreviarse como <userinput
>al</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="setfgcolor"/>
    <varlistentry
> 
      <term
>corlapis (cl)<indexterm
><primary
>corlapis (cl)</primary
></indexterm
></term>
      <listitem
><para
><screen
>corlapis R,G,B</screen>
<userinput
>corlapis</userinput
> estabelece a cor do trazo. <userinput
>corlapis</userinput
> toma como parámetro unha <glossterm linkend="rgb"
>combinación RGB</glossterm
>. <userinput
>corlapis</userinput
> code abreviarse como <userinput
>cl</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="canvas">
<title
>Comandos para controlar o lenzo</title>
<para
>Hai varios comandos que controlan o lenzo.</para>
  <variablelist>
    <anchor id="resizecanvas"/>
    <varlistentry>
      <term
>tamañolenzo (tlz)<indexterm
><primary
>tamañolenzo (tlz)</primary
></indexterm
></term>
      <listitem
><para
><screen
>tamañolenzo X,Y</screen>
Mediante o comando <userinput
>tamañolenzo</userinput
> pode axustar o tamaño da área. Toma X e Y como entradas, onde X é o novo ancho do lenzo en <glossterm linkend="pixels"
>píxeles</glossterm
> e Y é o novo alto en <glossterm linkend="pixels"
>píxeles</glossterm
>. <userinput
>tamañolenzo</userinput
> pode abreviarse como <userinput
>tlz</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="setbgcolor"/>
    <varlistentry
> 
      <term
>corlenzo (clz)<indexterm
><primary
>corlenzo (clz)</primary
></indexterm
></term>
      <listitem
><para
><screen
>corlenzo R,G,B</screen>
<userinput
>corlenzo</userinput
> estabelece a cor do lenzo. <userinput
>corlenzo</userinput
> toma unha <glossterm linkend="rgb"
>combinación RGB</glossterm
> como entrada. <userinput
>corlenzo</userinput
> pode abreviarse como <userinput
>clz</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
<!-- <sect3 id="wrapon">
  <title
>wrapon</title>
  <variablelist>
    <varlistentry
> 
      <term
>wrapon</term>
      <listitem
><para
><screen
>wrapon</screen>
      With the <userinput
>wrapon</userinput
> command you can set <glossterm linkend="wrapping"
>wrapping</glossterm
> <quote
>on</quote
> for the canvas. Please see the glossary if you want to know what <glossterm linkend="wrapping"
>wrapping</glossterm
> is.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect3>
<sect3 id="wrapoff">
  <title
>wrapoff</title>
  <variablelist>
    <varlistentry
> 
      <term
>wrapoff</term>
      <listitem
><para
><screen
>wrapoff</screen>
      With the <userinput
>wrapoff</userinput
> command you can set <glossterm linkend="wrapping"
>wrapping</glossterm
> <quote
>off</quote
> for the canvas: this means the turtle can move off the canvas and can get <quote
>lost</quote
>. Please see the glossary if you want to know what <glossterm linkend="wrapping"
>wrapping</glossterm
> is.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect3
>  -->
</sect2>

<sect2 id="clean">
<title
>Comandos para borrar</title>
<para
>Hai dous comandos para limpar o lenzo cando o emborrona.</para>
  <variablelist>
    <anchor id="clear"/>
    <varlistentry
> 
      <term
>borra (br)<indexterm
><primary
>borra (br)</primary
></indexterm
></term>
      <listitem
><para
><screen
>borra</screen>
Con <userinput
>borra</userinput
> pode borrar do lenzo todos os debuxos. As demais cousas fican: a posición e ángulo do sapoconcho, a cor do lenzo, a visibilidade do sapoconcho e o tamaño do lenzo.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="reset"/>
    <varlistentry
> 
      <term
>reinicia<indexterm
><primary
>reinicia</primary
></indexterm
></term>
      <listitem
><para
><screen
>reinicia</screen>
<userinput
>reinicia</userinput
> limpa máis a fondo do que o fai o comando <userinput
>borra</userinput
>. Despois de executar un comando <userinput
>reinicia</userinput
> todo volta a ser como cando iniciou &kturtle;. O sapoconcho estará posto no centro da pantalla, a cor do lenzo será branco, debuxarase cun trazo negro e o tamaño do lenzo será de 400 x 400 píxeles.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="sprites">
<title
>O sapoconcho é un sprite</title>
<para
>Os sprites son pequenas imaxes que se poden mover pola pantalla, como se ve nos xogos de consola. O noso animaliño tamén é un sprite. Para saber máis acerca disto, consulte a entrada <glossterm linkend="sprites"
>sprites</glossterm
> no glosario. </para>
<para
>A seguir ten un resumo completo de todos os comandos que traballan sobre sprites.</para>
<para
>[A versión actual de &kturtle; aínda non permite utilizar outros sprites que non sexan o sapoconcho. En versións futuras poderá mudar para outro deseño á súa escolla]</para>
  <variablelist>
    <anchor id="spriteshow"/>
    <varlistentry
> 
      <term
>mostrasapoconcho (msc)<indexterm
><primary
>mostrasapoconcho (msc)</primary
></indexterm
></term>
      <listitem
><para
><screen
>mostrasapoconcho</screen>
<userinput
>mostrasapoconcho</userinput
> fai de novo visíbel ao sapoconcho se antes foi agochado. <userinput
>mostrasapoconcho</userinput
> pode abreviarse como <userinput
>msc</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="spritehide"/>
    <varlistentry
> 
      <term
>agochasapoconcho (asc)<indexterm
><primary
>agochasapoconcho (asc)</primary
></indexterm
></term>
      <listitem
><para
><screen
>agochasapoconcho</screen>
<userinput
>agochasapoconcho</userinput
> fai invisíbel ao sapoconcho. Isto pode empregarse se o animal non couber no debuxo. <userinput
>agochasapoconcho</userinput
> pode abreviarse como <userinput
>asc</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="writing">
<title
>Pode escreber o sapoconcho?</title>
<para
>A resposta é: <quote
>pode</quote
>. A tartaruga pode escreber, e escreberá calquera cousa que lle mande.</para>
  <variablelist>
    <anchor id="print"/>
    <varlistentry
> 
      <term
>escrebe<indexterm
><primary
>escrebe</primary
></indexterm
></term>
      <listitem
><para
><screen
>escrebe X</screen>
O comando <userinput
>escrebe</userinput
> ordénalle ao sapoconcho que escreba algo no lenzo. <userinput
>escrebe</userinput
> pode tomar textos e números como parámetros. Pode <userinput
>escrebe</userinput
>r varios números e cadeas mediante o símbolo <quote
>+</quote
>. Aquí vai un exemplo: <screen
>$ano = 2009
$autor = "Bruno"
escrebe $autor + " debuxou unha nora en KTurtle no ano" + $ano + " e gustoulle moito!"
</screen>
      </para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="fontsize"/>
    <varlistentry
> 
      <term
>letratamaño<indexterm
><primary
>letratamaño</primary
></indexterm
></term>
      <listitem
><para
><screen
>letratamaño X</screen>
<userinput
>letratamaño</userinput
> modifica o tamaño de letra utilizado ao <userinput
>escreber</userinput
>. <userinput
>letratamaño</userinput
> toma un argumento numérico. O tamaño indícase en <glossterm linkend="pixels"
>píxeles</glossterm
>.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="random">
<title
>Un comando que escolle ao chou</title>
<para
>Hai un comando que saca un número ao chou, chámase <userinput
>aleatorio</userinput
> e é moi útil para ter resultados inesperados.</para>
  <variablelist>
    <varlistentry
> 
      <term
>aleatorio (alea)<indexterm
><primary
>aleatorio (alea)</primary
></indexterm
></term>
      <listitem
><para
><screen
>aleatorio X,Y</screen>
<userinput
>aleatorio</userinput
> é un comando que toma unha entrada e saca un resultado. Como entrada precisa de dous números, o primeiro (X) é o resultado mínimo, o segundo (Y) o máximo. A saída é un número escollido ao chou que é como mínimo o menor e como máximo o maior. Aquí vai un exemplo:<screen>
repite 500 {
  $x = aleatorio 1,20
  avanza $x
  xiraesquerda 10 - $x
}
</screen
> Mediante o comando <userinput
>aleatorio</userinput
> pode introducir algo de caos no programa.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="dialogs">
<title
>Introdución de datos e obtención de resultados mediante diálogos</title>
<para
>Un diálogo é unha pequena fiestra emerxente que lle dá algo de información ou que lle pide algún dato. &kturtle; ten dous comandos para diálogos, que son: <userinput
>mostra</userinput
> e <userinput
>pergunta</userinput
></para>
  <variablelist>
    <anchor id="message"/>
    <varlistentry
> 
      <term
>mostra<indexterm
><primary
>mostra</primary
></indexterm
></term>
      <listitem
><para
><screen
>mostra X</screen>
O comando <userinput
>mostra</userinput
> toma un <link linkend="string"
>texto</link
> como entrada, e mostra un diálogo que contén o <link linkend="string"
>texto</link
>. <screen
>mostra "Bruno debuxou unha nora en KTurtle no ano 2008 e gustoulle moito!"
</screen>
      </para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="ask"/>
    <varlistentry
> 
      <term
>pergunta<indexterm
><primary
>pergunta</primary
></indexterm
></term>
      <listitem
><para
><screen
>pergunta X</screen>
<userinput
>pergunta</userinput
> toma un <link linkend="string"
>texto</link
> como entrada. Mostra un diálogo que contén o texto, como fai <link linkend="message"
>mostra</link
>, pero ademais tamén pon un campo de texto no diálogo. Mediante este campo o usuario pode introducir un <link linkend="number"
>número</link
> ou un <link linkend="string"
>texto</link
> que pode gardar nun <link linkend="containers"
>contedor</link
>. Por exemplo <screen>
$idade = pergunta "Cantos anos tes?"
$resultado = 2003 - $idade
escrebe "En 2003 tiñas " + $resultado + " anos."</screen>
Cando un usuario cancela o diálogo de pergunta, ou non insere nada, o <link linkend="containers"
>contedor</link
> será baleirado.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

</sect1>



<sect1 id="containers">
<title
>Contedores</title>
<para
>Os contedores son letras ou palabras que poden ser utilizadas polo programador para gardar un número ou texto. Aos contedores que conteñen un número chámaselles  <link linkend="variables"
>variábeis</link
>, e aos que conteñen letras <link linkend="string"
>textos</link
>. Os contedores identifícanse facilmente polo caracter <quote
>$</quote
> que levan diante do nome.</para>

<para
>Os contedores que non están a ser utilizados non conteñen nada. Exemplo: <screen>
escrebe $N
</screen
> Non escreberá nada e pola contra mostrará unha mensaxe de erro. </para>

<sect2 id="variables">
<title
>Variábeis: contedores de números</title>
<para
>Comecemos cun exemplo: <screen>
$x = 3
escrebe $x
</screen
> Na primeira liña a letra <userinput
>x</userinput
> é convertida nunha variábel (contedor de números). Como pode ver, a variábel <userinput
>x</userinput
> toma o valor 3. Na segunda liña escrébese no lenzo o valor.</para>
<para
>Lembre que se quixese escreber un <quote
>x</quote
> deberíamos ter feito <screen
>escrebe "x"
</screen>
</para>
<para
>Iso foi sinxelo, agora fagámolo algo máis complicado: <screen>
$A = 2004
$B = 25
$C = $A + $B

# o seguinte comando escrebe "2029"
escrebe $C
recua 30
# o seguinte comando escrebe "2004 máis 25"
escrebe $A + " máis " + $B
recua 30
# o seguinte comando escrebe "1979"
escrebe $A - $B
</screen
> Nas primeiras dúas liñas dáselles os valores 2004 e 25 ás variábeis <userinput
>A</userinput
> e <userinput
>B</userinput
>. Na terceira liña a variábel <userinput
>C</userinput
> toma o valor <userinput
>A + B</userinput
>, que é 2029. O resto do exemplo consiste en 3 comandos <userinput
>escrebe</userinput
> con <userinput
>recua 30</userinput
> polo medio. Estes <userinput
>recua</userinput
> foron postos ahí para garantir que cada cousa fose escrita nunha liña nova. Neste exemplo tamén vemos como as variábeis poden ser empregadas en <link linkend="math"
>cálculos matemáticos</link
>.</para>
</sect2>

<sect2 id="strings">
<title
>Contedores que conteñen letras (textos)</title>
<para
>No código de programación os textos polo xeral comézanse e termínanse con aspas. Como xa vimos: <screen>
escrebe "Olá programador!"
</screen
> Estas pezas de texto ordinario son chamadas <link linkend="strings"
>textos</link
>.</para>
<para
>Os textos tamén son gardados en <link linkend="containers"
>contedores</link
> como os <link linkend="number"
>números</link
>, e teñen moitos parecidos coas variábeis. A maior diferenza é que conteñen texto no canto de números. Por este motivo non poden ser utilizados en <link linkend="math"
>cálculos matemáticos</link
> nen <link linkend="questions"
>perguntas</link
>. Vexamos un exemplo de utilización de textos: <screen>
$saudo = "Olá "
$nome = pergunta "Dime como te chamas..."
escrebe $x + $nome + ", como estás?"
</screen
> Na primeira liña o texto <userinput
>x</userinput
> toma o valor de <quote
>Olá </quote
>. Na segunda o texto <userinput
>nome</userinput
> toma o valor do resultado de <userinput
>perguntar</userinput
>. Na terceira liña o programa escrebe no lenzo unha composición de tres textos.</para>
<para
>Este programa pídelle que introduza o seu nome. Se escrebe, por exemplo, o nome <quote
>Paulo</quote
>, o programa escrebe <quote
>Olá Paulo, como estás?</quote
>. Lembre que o signo máis (+) é o único símbolo matemático que pode utilizar cos textos.</para>
</sect2>
</sect1>

<sect1 id="math">
<title
>Sabe matemáticas o sapoconcho?</title>
<para
>Si, &kturtle; sabe matemáticas. Pode sumar (+), restar (-), multiplicar (*), e dividir (/). Aquí vai un exemplo no que se utilizan estas operacións:<screen>
$a = 20 - 5
$b = 15 * 2
$c = 30 / 30
$d = 1 + 1
escrebe "a: " + $a + ", b: " + $b + ", c: " + $c + " e d: " + $d
</screen
> Sabe os valores que teñen a, b e c?. Poña atención a que se emprega o símbolo de <link linkend="assignment"
>asinación</link
>, <userinput
>=</userinput
>.</para>
<para
>Se só quer facer un cálculo simples pode facer algo como isto: <screen
>escrebe 2004-12
</screen
></para>
<para
>Agora un exemplo con parénteses: <screen>
escrebe ((20 -5) * 2 / 30 ) + 1
</screen
> As expresións entre parénteses serán calculadas primeiro. Neste exemplo, calcularase 20-5, logo multiplicarase por 2, dividirase entre 30, e finalmente engádeselle 1, co que dá o resultado 2.</para>
<para
>&kturtle; ten capacidades matemáticas avanzadas. Sabe o número <userinput
>pi</userinput
>, e funcións trigonométricas como <userinput
>seno</userinput
>, <userinput
>coseno</userinput
>, <userinput
>tanxente</userinput
>, <userinput
>arcoseno</userinput
>, <userinput
>arcocoseno</userinput
>, <userinput
>arcotanxente</userinput
> e as funcións <userinput
>raiz</userinput
> e <userinput
>exp</userinput
>. <indexterm
><primary
>pi</primary
></indexterm>
<indexterm
><primary
>seno, coseno, tanxente</primary
></indexterm>
<indexterm
><primary
>arcoseno, arcocoseno, arcotanxente</primary
></indexterm>
<indexterm
><primary
>raiz, exp</primary
></indexterm>
</para>

<sect2 id="round">
<title
>Deixe que o sapoconcho redondee os números</title>
<para
>Se precisa de números enteiros nos cálculos, empregue esta función.</para>
  <variablelist>
    <varlistentry>
      <term
>redondea<indexterm
><primary
>redondea</primary
></indexterm
></term>
      <listitem
><para
><screen
>redondea (x)</screen>
<userinput
>redondea</userinput
> o número indicado ao enteiro máis próximo. <screen>
escrebe redondea(10.8)
avanza 20
escrebe redondea(10.3)
avanza 20
</screen
> Con este código o sapoconcho escreberá os números 11 e 10.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>
</sect1>

<sect1 id="questions">
<title
>Facer perguntas, obter respostas...</title>
<para
><link linkend="if"
><userinput
>se</userinput
></link
> e <link linkend="while"
><userinput
>mentres</userinput
></link
> son <link linkend="controlling-execution"
>controladores da execución</link
> que explicaremos na seguinte sección. Nesta utilizaremos o comando <link linkend="if"
><userinput
>se</userinput
></link
> para explicar as perguntas.</para>
<sect2 id="q">
<title
>Perguntas</title>
<para
>Un exemplo simples de pergunta: <screen>
$x = 6
se $x &gt; 5 {
  escrebe "olá"
}
</screen
> Neste exemplo a pergunta é <userinput
>x &gt; 5</userinput
>. Se a resposta e isto é "certo" executarase o código entre as chaves. As perguntas son unha parte importantísima da programación e a miúdo son empregadas xunto con <link linkend="controlling-execution"
>controladores de execución</link
>, como <link linkend="if"
><userinput
>se</userinput
></link
>. Todos os número e <link linkend="variables"
>variábeis</link
> (contedores de números) poden ser comparados uns cos outros en perguntas.</para>
<para
>Estas son todas as posíbeis perguntas: <table>
<title
>Tipos de perguntas</title>
<tgroup cols="3">
<tbody>
<row>
<entry
><userinput
>a == b</userinput
></entry>
<entry
>é igual a</entry>
<entry
>a resposta é <quote
>certo</quote
> se <userinput
>a</userinput
> é igual a <userinput
>b</userinput
></entry>
</row>
<row>
<entry
><userinput
>a != b</userinput
></entry>
<entry
>é diferente de</entry>
<entry
>a resposta é <quote
>certo</quote
> se <userinput
>a</userinput
> non é igual a <userinput
>b</userinput
></entry>
</row>
<row>
<entry
><userinput
>a &gt; b</userinput
></entry>
<entry
>maior que</entry>
<entry
>a resposta é <quote
>certo</quote
> se <userinput
>a</userinput
> é maior que <userinput
>b</userinput
></entry>
</row>
<row>
<entry
><userinput
>a &lt; b</userinput
></entry>
<entry
>menor que</entry>
<entry
>a resposta é <quote
>certo</quote
> se <userinput
>a</userinput
> é menor que <userinput
>b</userinput
></entry>
</row>
<row>
<entry
><userinput
>a &gt;= b</userinput
></entry>
<entry
>maior ou igual que</entry>
<entry
>a resposta é <quote
>certo</quote
> se <userinput
>a</userinput
> é maior ou igual a <userinput
>b</userinput
></entry>
</row>
<row>
<entry
><userinput
>a &lt;= b</userinput
></entry>
<entry
>menor ou igual que</entry>
<entry
>a resposta é <quote
>certo</quote
> se <userinput
>a</userinput
> é menor ou igual a <userinput
>b</userinput
></entry>
</row>
</tbody>
</tgroup>
</table>
</para>
</sect2>

<sect2 id="question-glue">
<title
>Encadeamento de perguntas</title>
<para
>As palabras de encadeamento de perguntas permítennos xuntar varias perguntas nunha máis elaborada. <screen>
$a = 1
$b = 5
se ($a &lt; $b) e ($b == 5) {
  escrebe "Olá"
}
</screen
> Neste exemplo a palabra combinadora <userinput
>e</userinput
> é empregada para xuntar 2 perguntas (<userinput
>a &lt; 5</userinput
>, <userinput
>b == 5</userinput
>) nunha. Se un lado do <userinput
>e</userinput
> é <quote
>falso</quote
> toda a resposta será <quote
>falso</quote
>, porque con <userinput
>e</userinput
> ambos os dous lados deben ser <quote
>certo</quote
> para que a resposta sexa <quote
>certo</quote
>. Por favor non se esqueza de empregar os parénteses arredor das perguntas!</para>

<para
>Este é un resumo esquemático, a seguir exponse unha explicación detallada: <table>
<title
>Palabras de encadeamento de perguntas</title>
<tgroup cols="2">
<tbody>
<row>
<entry
><userinput
>e</userinput
></entry>
<entry
>Ambos os dous lados deben ser "certo" para que a resposta sexa "certo"</entry>
</row>
<row>
<entry
><userinput
>ou</userinput
></entry>
<entry
>Se un dos lados é "certo" a resposta será "certo"</entry>
</row>
<row>
<entry
><userinput
>non</userinput
></entry>
<entry
>Caso especial: só opera sobre unha pergunta! Muda o estado de "certo" para "falso" ou de "falso" para "certo"</entry>
</row>
</tbody>
</tgroup>
</table>
</para>

<sect3 id="and">
<title
>e</title>
<indexterm
><primary
>e</primary
></indexterm>
<para
>Cando dúas perguntas son xuntadas mediante un <userinput
>e</userinput
>, ambos os dous lados do <userinput
>e</userinput
> deben ser "certo" para que o resultado sexa "certo". Por exemplo: <screen>
$a = 1
$b = 5
se (($a &lt; 10) e ($b == 5)) e ($a &lt; $b) {
  escrebe "Olá"
}
</screen
> Neste exemplo vese unha pergunta combinada dentro de outra pergunta combinada.</para>
</sect3>

<sect3 id="or">
<title
>ou</title>
<indexterm
><primary
>ou</primary
></indexterm>
<para
>Se unha das dúas perguntas que están a ser combinadas con <userinput
>ou </userinput
> é "certo" o resultado será "certo". Por exemplo: <screen>
$a = 1
$b = 5
se (($a &lt; 10) ou ($b == 10)) ou ($a == 0) {
 escrebe "Olá"
}
</screen
> Neste exemplo vese unha pergunta combinada dentro de outra pergunta combinada.</para>
</sect3>

<sect3 id="not">
<title
>non</title>
<indexterm
><primary
>non</primary
></indexterm>
<para
><userinput
>non</userinput
> é unha palabra combinadora especial porque só opera sobre unha pergunta á vez. <userinput
>non</userinput
> troca o estado de "certo" para "falso" ou viceversa. Por exemplo: <screen>
$a = 1
$b = 5
se non (($a &lt; 10) e ($b == 5)) {
  escrebe "Olá"
}
noutrocaso
{
  escrebe "Adeus"
}
</screen
> Neste exemplo a pergunta combinada é "certo", pero o <userinput
>non</userinput
> troca o resultado para "falso". Deste xeito, escrébese <userinput
>"Adeus"</userinput
> no <link linkend="the-canvas"
>lenzo</link
>.</para>
</sect3>

</sect2>

</sect1>

<sect1 id="controlling-execution">
<title
>Control da execución</title>
<para
>Os controladores da execución permítenlle, como indica o nome, controlar o fluxo de execución.</para>
<para
>Os comandos de control da execución son <glossterm
>realzados</glossterm
> en letra verde grosa. As chaves utilízanse caseque sempre xunto cos controladores de execución e son <glossterm
>realzados</glossterm
> en letra negra grosa.</para>

<sect2 id="wait">
<title
>Facer que o sapoconcho agarde</title>
<para
>Se programou algo en &kturtle; xa se terá decatado de que o sapoconcho pode ser moi moi moi rápido cando debuxa. Este comando fai que agarde durante un tempo.</para>
  <variablelist>
    <varlistentry>
      <term
>agarda<indexterm
><primary
>agarda</primary
></indexterm
></term>
      <listitem
><para
><screen
>agarda X</screen>
<userinput
>agarda</userinput
> fai que o sapoconcho estexa quedo durante X segundos. <screen>
repite 36 {
  avanza 5
  xiradereita 10
  agarda 0.5
}
</screen
> Este código debuxa un círculo, pero o animal agardará medio segundo tras cada paso. Isto dá a impresión dun sapoconcho lento.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="if">
<title
>Executar "se"</title>
  <variablelist>
    <varlistentry>
      <term
>se<indexterm
><primary
>se</primary
></indexterm
></term>
      <listitem
><para
><screen
>se <link linkend="questions"
>pergunta</link
> { ... }</screen>
O código que vai entre as chaves só será executado <userinput
>se</userinput
> a resposta á <link linkend="questions"
>pergunta</link
> é <quote
>certo</quote
>. Achará máis información acerca das <link linkend="questions"
>perguntas</link
> nas <link linkend="questions"
>sección de perguntas</link
>. <screen>
$x = 6
se $x &gt; 5 {
  escrebe "x é maior que cinco!"
}
</screen
> Na primeira liña <userinput
>x</userinput
> toma o valor 6. Na segunda liña faise a <link linkend="questions"
>pergunta</link
> <userinput
>x &gt; 5</userinput
>. Xa que a resposta é <quote
>certo</quote
> o controlador de execución <userinput
>se</userinput
> permitirá que se execute o código entre as chaves</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="else">
<title
>Se non, o caso contrario: "noutrocaso"</title>
  <variablelist>
    <varlistentry>
      <term
>noutrocaso<indexterm
><primary
>noutrocaso</primary
></indexterm
></term>
      <listitem
><para
><screen
>se pergunta { ... } noutrocaso { ... }</screen>
<userinput
>noutrocaso</userinput
> pode empregarse xunto co controlador de execución <link linkend="if"
><userinput
>se</userinput
></link
>. O código entre as chaves que seguen a <userinput
>noutrocaso</userinput
> só será executado se a resposta á <link linkend="questions"
>pergunta</link
> é <quote
>falso</quote
>. <screen>
reinicia
$x = 4
se non 5 &gt; $x {
 escrebe "x é maior que cinco!"
}
noutrocaso
{
  escrebe "x é menor que seis!"
}
</screen
> A <link linkend="questions"
>pergunta</link
> é se <userinput
>x</userinput
> é maior que 5 (pero do revés ao levar a negación diante). Xa que <userinput
>x</userinput
> vale 4 a resposta é <quote
>falso</quote
>. Isto significa que se executará o código entre as chaves que seguen a <userinput
>noutrocaso</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="while">
<title
>O ciclo "mentres"</title>
  <variablelist>
    <varlistentry>
      <term
>mentres<indexterm
><primary
>mentres</primary
></indexterm
></term>
      <listitem
><para
><screen
>mentres <link linkend="questions"
>pergunta</link
> { ... }</screen>
O controlador de execución <userinput
>mentres</userinput
> seméllase moito a <link linkend="if"
><userinput
>se</userinput
></link
>. A diferenza é que <userinput
>mentres</userinput
> repite o código entre as chaves até que a resposta á <link linkend="questions"
>pergunta</link
> sexa <quote
>falso</quote
>. <screen>
$x = 1
mentres $x &lt; 5 {
  avanza 10
  agarda 1
  $x = $x + 1
}
</screen
> Na primeira liña <userinput
>x</userinput
> toma o valor de 1. Na segunda liña faise a <link linkend="questions"
>pergunta</link
> <userinput
>x &lt; 5</userinput
>. Dado que a resposta é <quote
>certo</quote
> o controlador de execución <userinput
>mentres</userinput
> comeza a executar o código entre as chaves até que a resposta á <link linkend="questions"
>pergunta</link
> sexa <quote
>falso</quote
>. Neste caso executarase 4 veces, porque cada vez que se executa a quinta liña <userinput
>x</userinput
> aumenta 1.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="repeat">
<title
>O ciclo "repite"</title>
  <variablelist>
    <varlistentry>
      <term
>repite<indexterm
><primary
>repite</primary
></indexterm
></term>
      <listitem
><para
><screen
>repite número { ... }</screen>
O controlador de execucion <userinput
>repite</userinput
> seméllase moito a <link linkend="while"
><userinput
>mentres</userinput
></link
>. A diferenza é que <userinput
>repite</userinput
> executa o código entre as chaves o número dado de veces.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="for">
<title
>O ciclo "desde", un ciclo cun contador</title>
  <variablelist>
    <varlistentry>
      <term
>desde<indexterm
><primary
>desde</primary
></indexterm
><indexterm
><primary
>pasando</primary
></indexterm
></term>
      <listitem
><para
><screen
>desde <userinput
>ponto inicial</userinput
> ate <userinput
>ponto final</userinput
> {...}</screen>
O bucle <userinput
>para</userinput
> é un <quote
>bucle con contador</quote
>, &ie;, mantén por si o reconto. <screen>
desde $x = 1 ate 10 {
  escrebe $x * 7
  avanza 15
}
</screen
> Cada vez que se executa o código entre as chaves o <userinput
>x</userinput
> aumenta en 1, até que <userinput
>x</userinput
> acada o valor de 10. O código nas chaves escrebe o valor do <userinput
>x</userinput
> multiplicado por 7. Cando este programa remate a execución verá a táboa de multiplicar do 7 no lenzo. </para>
     <para
>O paso por omisión no bucle é 1, pero pode utilizar outro valor mediante <screen
>desde <userinput
>ponto inicial</userinput
> ate <userinput
>ponto final</userinput
> pasando <userinput
>tamaño do paso</userinput
> { ... }</screen
></para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="break">
<title
>Sair dun bucle</title>
  <variablelist>
    <varlistentry>
      <term
>sair<indexterm
><primary
>sair</primary
></indexterm
></term>
      <listitem
><para
><screen
>sair</screen>
Termina de imediato esta volta ao bucle e transfere o control á instrución que vai despois del</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="exit">
<title
>Deter o sapoconcho</title>
  <variablelist>
    <varlistentry>
      <term
>fin<indexterm
><primary
>fin</primary
></indexterm
></term>
      <listitem
><para
><screen
>fin</screen>
Remata a execución do código.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>
</sect1>


<sect1 id="learn">
<title
>Cree os seus proprios comandos con <quote
>define</quote
></title>
<para
><userinput
>define</userinput
><indexterm
><primary
>aprende_a</primary
> </indexterm
> é un comando moi especial, porque se utiliza para crear novos comandos. O comando que críe pode tomar <glossterm linkend="input-output"
>entradas</glossterm
> e devolver <glossterm linkend="input-output"
>saídas</glossterm
>. Vexamos como se cría un comando novo: <screen>
define faiCirculo $x {
  repite 36 {
    avanza $x
    xiraesquerda 10
  }
}
</screen
> O novo comando chámase <userinput
>faiCirculo</userinput
>. <userinput
>faiCirculo</userinput
> toma unha <glossterm linkend="input-output"
>entrada</glossterm
>, un número, que indica o tamaño do círculo. <userinput
>faiCirculo</userinput
> non devolve nengún <glossterm linkend="input-output"
>resultado</glossterm
>. O comando <userinput
>faiCirculo</userinput
> pode ser utilizado como un comando normal no resto do código. Vexa este exemplo: <screen
>define faiCirculo $X {
  repite 36 {
    avanza $X
    xiraesquerda 10
  }
}
vai 200,200
faiCirculo 20

vai 300,300
faiCirculo 40  
</screen>
</para>
<para
>No seguinte exemplo, críase un comando que devolve un valor. <screen>
reinicia

define multiplicarseUnMesmo $n {
  $resultado = $n * $n
  devolve $resultado
}
$i = pergunta "Indique un número e prema en Aceitar"
escrebe $i + " multiplicado por si mesmo é: " + multiplicarseUnMesmo $i
</screen
> Neste exemplo críase un comando novo chamado <userinput
>multiplicarseUnMesmo</userinput
>. A entrada deste comando é multiplicada por si mesma e logo devólvese o resultado, mediante o comando <anchor id="return"/><userinput
>devolve</userinput
>. O comando <userinput
>devolve</userinput
> é a maneira de obter un valor como resultado das funcións que críe. </para>
<para
>Os comandos poden ter máis dunha <glossterm linkend="input-output"
>entrada</glossterm
>. No seguinte exemplo, críase un comando que debuxa un rectángulo. <screen>
define debuxaRectangulo $X, $Y {
  avanza $Y
  xiradereita 90
  avanza $X
  xiradereita 90
  avanza $Y
  xiradereita 90
  avanza $X
  xiradereita 90
}
</screen
> Agora pode ordenar  <userinput
>debuxaRectangulo 50,100</userinput
> e o sapoconcho debuxará no lenzo un rectángulo. </para>
  
</sect1>

</chapter>
