<chapter id="reference">
<title
>Referência de Programação em &logo; do &kturtle;</title>

<sect1 id="commands">
<title
>Comandos</title>
<para
>Ao usar os comandos, você diz à tartaruga ou ao &kturtle; para fazer algo. Alguns comandos precisam de dados introduzidos, enquanto outros trazem resultados. Nesta secção iremos explicar todos os comandos que podem ser usados no &kturtle;.</para>

<sect2 id="moving-the-turtle">
<title
>Mover a tartaruga</title>
<para
>Existem vários comandos para mover a tartaruga pelo ecrã.</para>
  
  <variablelist>
    <anchor id="forward"/>
    <varlistentry>
      <term
>forward</term>
      <listitem
><para
><screen
>forward X</screen>
O <userinput
>forward</userinput
> move a tartaruga para a frente X pixels. Quando o traço está em baixo, a tartaruga irá deixar um rasto. O <userinput
>forward</userinput
> pode ser abreviado para <userinput
>fw</userinput
></para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="backward"/>
    <varlistentry>
      <term
>backward</term>
      <listitem
><para
><screen
>backward X</screen>
O <userinput
>backward</userinput
> move a tartaruga para trás X pixels. Quando o traço está em baixo, a tartaruga irá deixar um rasto. O <userinput
>backward</userinput
> pode ser abreviado para <userinput
>bw</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="turnleft"/>
    <varlistentry>
      <term
>turnleft</term>
      <listitem
><para
><screen
>turnleft X</screen>
O <userinput
>turnleft</userinput
> diz à tartaruga para se virar X graus para a esquerda. O <userinput
>turnleft</userinput
> pode ser abreviado para <userinput
>tl</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="turnright"/>
    <varlistentry>
      <term
>turnright</term>
      <listitem
><para
><screen
>turnright X</screen>
O <userinput
>turnright</userinput
> diz à tartaruga para se virar X graus para a direita. O <userinput
>turnright</userinput
> pode ser abreviado para <userinput
>tr</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="direction"/>
    <varlistentry>
      <term
>direction</term>
      <listitem
><para
><screen
>direction X</screen>
O <userinput
>direction</userinput
> configura a direcção da tartaruga para um ângulo de X graus a contar do zero, e isto não é relativo à direcção anterior da tartaruga. O <userinput
>direction</userinput
> pode ser abreviado para <userinput
>dir</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="center"/>
    <varlistentry>
      <term
>center</term>
      <listitem
><para
><screen
>center</screen>
O <userinput
>center</userinput
> move a tartaruga para o centro da área de desenho.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="go"/>
    <varlistentry>
      <term
>go</term>
      <listitem
><para
><screen
>go X,Y</screen>
O <userinput
>go</userinput
> manda a tartaruga ir para um dado local da área de desenho. Este local está a X <glossterm linkend="pixels"
>pixels</glossterm
> do lado esquerdo da área de desenho e a Y <glossterm linkend="pixels"
>pixels</glossterm
> do topo da área. Lembre-se que, ao usar o comando <userinput
>go</userinput
>, a tartaruga não irá desenhar nenhuma linha.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="gox"/>
    <varlistentry>
      <term
>gox</term>
      <listitem
><para
><screen
>gox X</screen>
Ao usar o comando <userinput
>gox</userinput
>, a tartaruga irá mover-se X <glossterm linkend="pixels"
>pixels</glossterm
> a partir da esquerda da área de desenho, mantendo à mesma a sua altura.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="goy"/>
    <varlistentry>
      <term
>goy</term>
      <listitem
><para
><screen
>goy Y</screen>
Ao usar o comando <userinput
>goy</userinput
>, a tartaruga irá mover-se Y <glossterm linkend="pixels"
>pixels</glossterm
> a partir do topo da área de desenho, mantendo à mesma a sua distância ao lado esquerdo da área de desenho.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="pen">
<title
>A tartaruga tem um traço</title>
<para
>A tartaruga tem um traço e vai desenhando uma linha à medida que a tartaruga se move. Existem alguns comandos para controlar o traço. Nesta secção iremos explicar estes comandos.</para>
  <variablelist>
    <anchor id="penup"/>
    <varlistentry>
      <term
>penup</term>
      <listitem
><para
><screen
>penup</screen>
O <userinput
>penup</userinput
> levanta o traço da área de desenho. Quando o traço está <quote
>em cima</quote
>, não é desenhada nenhuma linha à medida que a tartaruga se move. Veja também o <userinput
>pendown</userinput
>. O <userinput
>penup</userinput
> pode ser abreviado para <userinput
>pu</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="pendown"/>
    <varlistentry>
      <term
>pendown</term>
      <listitem
><para
><screen
>pendown</screen>
O <userinput
>pendown</userinput
> carrega no traço para baixo na área de desenho. Quando o traço está <quote
>em baixo</quote
>, é desenhada uma linha à medida que a tartaruga se move. Veja também o <userinput
>penup</userinput
>. O <userinput
>pendown</userinput
> pode ser abreviado para <userinput
>pd</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="penwidth"/>
    <varlistentry>
      <term
>penwidth</term>
      <listitem
><para
><screen
>penwidth X</screen>
O <userinput
>penwidth</userinput
> configura a espessura do traço para X <glossterm linkend="pixels"
>pixels</glossterm
>. O <userinput
>penwidth</userinput
> pode ser abreviado para <userinput
>pw</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="pencolor"/>
    <varlistentry>
      <term
>pencolor</term>
      <listitem
><para
><screen
>pencolor R,G,B</screen>
O <userinput
>pencolor</userinput
> configura a cor do traço. O <userinput
>pencolor</userinput
> recebe uma <glossterm linkend="rgb"
>combinação de RGB</glossterm
> como parâmetro. O <userinput
>pencolor</userinput
> pode ser abreviado para <userinput
>pc</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="canvas">
<title
>Comandos para controlar a área de desenho</title>
<para
>Existem vários comandos para controlar a área de desenho.</para>
  <variablelist>
    <anchor id="canvassize"/>
    <varlistentry>
      <term
>canvassize</term>
      <listitem
><para
><screen
>canvassize X,Y</screen>
Com o comando <userinput
>canvassize</userinput
> você poderá alterar o tamanho da área de desenho. Ele recebe dois parâmetros X e Y à entrada, em que o X é a nova largura da área de desenho em <glossterm linkend="pixels"
>pixels</glossterm
>, e o Y é a nova altura da mesma área em <glossterm linkend="pixels"
>pixels</glossterm
>. O <userinput
>canvassize</userinput
> pode ser abreviado para <userinput
>cs</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="canvascolor"/>
    <varlistentry>
      <term
>canvascolor</term>
      <listitem
><para
><screen
>canvascolor R,G,B</screen>
O <userinput
>canvascolor</userinput
> define a cor da área de desenho. O <userinput
>canvascolor</userinput
> recebe uma <glossterm linkend="rgb"
>combinação RGB</glossterm
> como parâmetro. O <userinput
>canvascolor</userinput
> pode ser abreviado para <userinput
>cc</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="wrapon"/>
    <varlistentry>
      <term
>wrapon</term>
      <listitem
><para
><screen
>wrapon</screen>
Com o comando <userinput
>wrapon</userinput
> você poderá activar a <glossterm linkend="wrapping"
>envolvência</glossterm
> para a área de desenho. Por favor veja o glossário para saber o que é a <glossterm linkend="wrapping"
>envolvência</glossterm
>.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="wrapoff"/>
    <varlistentry>
      <term
>wrapoff</term>
      <listitem
><para
><screen
>wrapoff</screen>
Com o comando <userinput
>wrapoff</userinput
> você poderá desactivar a <glossterm linkend="wrapping"
>envolvência</glossterm
> para a área de desenho. Isto significa que a tartaruga poder-se-á mover para fora da área de desenho e <quote
>perder-se</quote
>. Por favor veja o glossário se quiser saber o que é a <glossterm linkend="wrapping"
>envolvência</glossterm
>.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="clean">
<title
>Comandos para limpar</title>
<para
>Existem dois comandos para limpar a área de desenho, depois de você ter deixado tudo confuso.</para>
  <variablelist>
    <anchor id="clear"/>
    <varlistentry>
      <term
>clear</term>
      <listitem
><para
><screen
>clear</screen>
Com o <userinput
>clear</userinput
>, você poderá limpar todos os desenhos da área respectiva. Tudo o resto permanece igual: a posição e o ângulo da tartaruga, a cor da área de trabalho, a visibilidade da tartaruga e o tamanho da área de desenho. O <userinput
>clear</userinput
> pode ser abreviado para <userinput
>ccl</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="reset"/>
    <varlistentry>
      <term
>reset</term>
      <listitem
><para
><screen
>reset</screen>
O <userinput
>reset</userinput
> limpa tudo de forma mais abrangente que o comando <userinput
>clear</userinput
>. Depois de um comando <userinput
>reset</userinput
>, tudo fica tal e qual estava quando você iniciou o &kturtle;. A tartaruga é posicionada no meio do ecrã, a cor da área de desenho é branca e a tartaruga irá desenhar uma linha preta na área de desenho.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="sprites">
<title
>A tartaruga é uma imagem móvel</title>
<para
>Muitas das pessoas não sabem o que são as imagens móveis ('sprites'), daí uma breve explicação: as imagens móveis são pequenas imagens que podem percorrer o ecrã (para mais informações, veja o glossário sobre as <glossterm linkend="sprites"
>imagens móveis</glossterm
>). Deste modo, a tartaruga é uma imagem móvel!</para>
<para
>A seguir você irá encontrar uma apresentação completa de todos os comandos que lidam com imagens móveis.</para>
<para
>[A versão actual do &kturtle; não suporta ainda o uso de imagens móveis que não apenas a tartaruga. Nas versões futuras, você poderá mudar a tartaruga para outra coisa ao seu gosto!]</para>
  <variablelist>
    <anchor id="show"/>
    <varlistentry>
      <term
>show</term>
      <listitem
><para
><screen
>show</screen>
O <userinput
>show</userinput
> torna tartaruga a tartaruga visível de novo depois de ter ficado escondida. O <userinput
>show</userinput
> pode ser abreviado para <userinput
>ss</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="hide"/>
    <varlistentry>
      <term
>hide</term>
      <listitem
><para
><screen
>hide</screen>
O <userinput
>hide</userinput
> esconde a tartaruga. Isto pode ser usado se a tartaruga não couber no seu desenho. O <userinput
>hide</userinput
> pode ser abreviado para <userinput
>sh</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="writing">
<title
>Será que as tartarugas escrevem texto?</title>
<para
>A resposta é: <quote
>sim</quote
>. A tartaruga sabe escrever e pode escrever tudo o que lhe disser para escrever.</para>
  <variablelist>
    <anchor id="print"/>
    <varlistentry>
      <term
>print</term>
      <listitem
><para
><screen
>print X</screen>
O comando <userinput
>print</userinput
> é usado para dizer à tartaruga para escrever algo na área de desenho. O <userinput
>print</userinput
> recebe números e texto como parâmetros. Você poderá executar o <userinput
>print</userinput
> para vários parâmetros com o sinal <quote
>+</quote
>. Veja aqui um pequeno exemplo: <screen
>ano = 2004
utilizador = "Ze"
print "O KTurtle foi usado em " + ano + " pelo " + utilizador
</screen>
      </para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="fontsize"/>
    <varlistentry>
      <term
>fontsize</term>
      <listitem
><para
><screen
>fontsize X</screen>
O <userinput
>fontsize</userinput
> configura o tamanho da letra que é usado pelo <userinput
>print</userinput
>. O <userinput
>fontsize</userinput
> recebe um parâmetros que deverá ser um número. O tamanho é definido em <glossterm linkend="pixels"
>pixels</glossterm
>.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="dice">
<title
>Um comando que joga aos dados por si</title>
<para
>Aqui está um comando que lança um dado para si</para>
  <variablelist>
    <anchor id="random"/>
    <varlistentry>
      <term
>random</term>
      <listitem
><para
><screen
>random X,Y</screen>
O <userinput
>random</userinput
> é um comando que recebe parâmetros e devolve resultados. Como parâmetros são necessários dois números, em que o primeiro define o resultado mínimo (X) e o segundo o máximo (Y). O resultado é um número escolhido aleatoriamente que é maior ou igual ao mínimo e menor ou igual ao máximo. Aqui está um pequeno exemplo: <screen>
      repeat 500 [
        x = random 1,20
        forward x
        turnleft 10 - x
      ]
      </screen
> Com o comando 'random', você poderá adicionar um pouco de confusão ao seu programa.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>
</sect1>

<sect1 id="containers">
<title
>Contentores</title>
<para
>Os contentores são letras ou palavras que podem ser usadas pelo programador para guardar algum número ou algum texto. Os contentores que contêm um número chamam-se <link linkend="variables"
>variáveis</link
>, enquanto que os que contêm texto chamam-se <link linkend="strings"
>cadeias de caracteres</link
>.</para>

<para
>Os contentores que não são usados ainda são iguais a 0, por omissão. Por exemplo, o: <screen>
print N
</screen
> Irá imprimir um 0. </para>

<sect2 id="variables">
<title
>Variáveis: contentores de números</title>
<para
>Vamos começar com um exemplo: <screen>
x = 3
print x
</screen
> Na primeira linha, a letra <userinput
>x</userinput
> passou a ser uma variável (contentora de números). Como poderá ver, o valor da variável <userinput
>x</userinput
> passou a 3. Na segunda linha, o valor é impresso.</para>
<para
>Lembre-se que, se quisesse imprimir um <quote
>x</quote
>, então deveria ser escrito <screen
>print "x"
</screen>
</para>
<para
>Isso foi fácil, mas agora há um exemplo um pouco mais difícil: <screen>
A = 2004
B = 25
AB = A + B

# o próximo comando imprime "2029"
print AB
backward 30
# o próximo comando imprime "2004 mais 25"
print A + " mais " + B
backward 30
# o próximo comando imprime "1979"
print A - B
</screen
> Nas duas primeiras linhas, as variáveis <userinput
>A</userinput
> e <userinput
>B</userinput
> são configuradas como sendo iguais a 2004 e 25. Na terceira linha, a variável <userinput
>AB</userinput
> fica igual a <userinput
>A + B</userinput
>, o que dá 2029. O resto do exemplo consiste em 3 comandos <userinput
>print</userinput
> com <userinput
>backward 30</userinput
> no meio. O <userinput
>backward 30</userinput
> está lá para garantir que cada resultado fica numa linha diferente. Neste exemplo, você vê também que as variáveis podem ser usadas nos <link linkend="math"
>cálculos matemáticos</link
>.</para>
</sect2>

<sect2 id="strings">
<title
>Cadeias de Caracteres: contentores de texto</title>
<para
>As cadeias de caracteres são bastante parecidas com as variáveis. A maior diferença é que as cadeias de caracteres não podem ser usadas em <link linkend="math"
>cálculos matemáticos</link
> e <link linkend="questions"
>perguntas</link
>. Um exemplo da utilização das cadeias de caracteres: <screen>
x = "Olá "
nome = inputwindow "por favor indique o seu nome..."
print x + nome + ", como é que está?
</screen
> Na segunda linha, a cadeia de caracteres <userinput
>x</userinput
> fica igual a <quote
>Olá </quote
>. Na segunda linha, a cadeia de caracteres <userinput
>nome</userinput
> é configurada como o resultado do comando <userinput
>inputwindow</userinput
>. Na terceira linha, o programa imprime uma composição de três cadeias de caracteres na área de desenho.</para>
<para
>Este programa pede-lhe para introduzir o seu nome. Quando você, por exemplo, introduzir o nome <quote
>Zé</quote
>, o programa irá imprimir <quote
>Olá Zé, como é que está?</quote
>. Lembre-se que o sinal de mais (+) é o único símbolo matemático que você poderá usar com as cadeias de caracteres.</para>
</sect2>
</sect1>

<sect1 id="math">
<title
>Será que a Tartaruga Pode Fazer Contas?</title>
<para
>Sim, o &kturtle; sabe fazer contas para si. Você poderá somar (+), subtrair (-), multiplicar (*) e dividir (/). Aqui está um exemplo no qual iremos usar todas as operações: <screen>
a = 20 - 5
b = 15 * 2
c = 30 / 30
d = 1 + 1
print "a: "+a+", b: "+b+", c: "+c+", d: "+d 
</screen
> Será que sabe o valor de 'a', 'b', 'c' e 'd'?</para>
<para
>Se você somente queria fazer um cálculo simples, você poderá fazer algo semelhante a isto: <screen
>print 2004-12
</screen
></para>
<para
>Agora, um exemplo com parêntesis: <screen>
print ( ( 20 - 5 ) * 2 / 30 ) + 1
</screen
> O que estiver entre parêntesis será calculado em primeiro lugar. Neste exemplo, o 20-5 será calculado, depois será multiplicado por 2, dividido por 30 e depois é adicionado 1 (o que dá 2).</para>
</sect1>

<sect1 id="questions">
<title
>Fazer perguntas, obter respostas...</title>
<para
>O <link linkend="if"
><userinput
>if</userinput
></link
> e o <link linkend="while"
><userinput
>while</userinput
></link
> são <link linkend="controlling-execution"
>controladores de execução</link
> que iremos discutir na próxima secção. Nesta secção iremos usar o comando <userinput
>if</userinput
> para explicar as perguntas.</para>
<para
>Um exemplo simples de perguntas: <screen>
x = 6
if x &gt; 5 [
  print "olá"
]
</screen
> Neste exemplo, a pergunta é <userinput
>x &gt; 5</userinput
>, se a resposta a esta pergunta for <quote
>true</quote
> (verdadeira), o código entre parêntesis rectos será executado. As perguntas são uma parte importante da programação e são usadas normalmente em conjunto com os <link linkend="controlling-execution"
>controladores de execução</link
>, como o <link linkend="if"
><userinput
>if</userinput
></link
>. Todos os números e <link linkend="variables"
>variáveis</link
> (contentores de números) poderão ser comparados uns com os outros nas perguntas.</para>
<para
>Aqui estão todas as perguntas possíveis: <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
>true</quote
> (verdadeira) se o <userinput
>a</userinput
> for igual ao <userinput
>b</userinput
></entry>
</row>
<row>
<entry
><userinput
>a != b</userinput
></entry>
<entry
>é diferente de</entry>
<entry
>a resposta é <quote
>true</quote
> (verdadeira) se o <userinput
>a</userinput
> não for igual ao <userinput
>b</userinput
></entry>
</row>
<row>
<entry
><userinput
>a &gt; b</userinput
></entry>
<entry
>maior que</entry>
<entry
>a resposta é <quote
>true</quote
> (verdadeira) se o <userinput
>a</userinput
> for maior que o <userinput
>b</userinput
></entry>
</row>
<row>
<entry
><userinput
>a &lt; b</userinput
></entry>
<entry
>menor que</entry>
<entry
>a resposta é <quote
>true</quote
> (verdadeira) se o <userinput
>a</userinput
> for menor que o <userinput
>b</userinput
></entry>
</row>
<row>
<entry
><userinput
>a &gt;= b</userinput
></entry>
<entry
>maior ou igual a</entry>
<entry
>a resposta é <quote
>true</quote
> (verdadeira) se o <userinput
>a</userinput
> for maior ou igual ao <userinput
>b</userinput
></entry>
</row>
<row>
<entry
><userinput
>a &lt;= b</userinput
></entry>
<entry
>menor ou igual a</entry>
<entry
>a resposta é <quote
>true</quote
> (verdadeira) se o <userinput
>a</userinput
> for menor ou igual ao <userinput
>b</userinput
></entry>
</row>
</tbody>
</tgroup>
</table>
</para>
<para
>As perguntas também podem ser coladas umas às outras com <quote
>palavras de colagem de perguntas</quote
> onde, desta forma, algumas perguntas tornam-se uma pergunta maior. <screen>
a = 1
b = 5
if a &lt; 5 and b == 5 [
  print "olá"
]
</screen
> <anchor id="question-glue"/>Neste exemplo, a palavra de colagem <userinput
>and</userinput
> é usada para colar 2 perguntas (<userinput
>a &lt; 5</userinput
>, <userinput
>b == 5</userinput
>) em conjunto. Se um lado do <userinput
>and</userinput
> der uma resposta <quote
>false</quote
> (falsa), a pergunta toda irá responder <quote
>false</quote
>, porque, com a palavra de colagem <userinput
>and</userinput
>, ambos os lados precisam de ser <quote
>true</quote
> para que a resposta seja <quote
>true</quote
> (verdadeira).</para>
<para
>O <userinput
>and</userinput
> não é a única palavra de colagem; ainda existem mais outras duas. Todas elas se encontram na próxima tabela: <table>
<title
>Palavras de colagem de perguntas</title>
<tgroup cols="2">
<tbody>
<row>
<entry
><userinput
>and</userinput
></entry>
<entry
>ambos os lados têm de ser <quote
>true</quote
> (verdadeiros) para a resposta ser <quote
>true</quote
> (verdadeira)</entry>
</row>
<row>
<entry
><userinput
>or</userinput
></entry>
<entry
>se um dos lados for <quote
>true</quote
> (verdadeiros) a resposta é <quote
>true</quote
> (verdadeira)</entry>
</row>
<row>
<entry
><userinput
>not</userinput
></entry>
<entry
>se a pergunta for <quote
>false</quote
> (falsa), a resposta é verdadeira</entry>
</row>
</tbody>
</tgroup>
</table>
</para>
</sect1>

<sect1 id="controlling-execution">
<title
>Controlar a execução</title>
<para
>Os controladores de execução permitem-lhe &mdash; como o nome deles indica &mdash; controlar a execução</para>

<sect2 id="easy">
<title
>Fazer a tartaruga esperar</title>
<para
>Se já tentou programar um pouco no &kturtle;, você já poderá ter reparado que a tartaruga pode ser bastante rápida a desenhar. Este comando faz a tartaruga andar um pouco mais devagar.</para>
  <variablelist>
    <anchor id="wait"/>
    <varlistentry>
      <term
>wait</term>
      <listitem
><para
><screen
>wait X</screen>
O <userinput
>wait</userinput
> faz a tartaruga esperar X segundos. <screen>
repeat 36 [
  forward 5
  turnright 10
  wait 0.5
]
</screen
> Este código irá desenhar uma circunferência, mas a tartaruga irá esperar meio segundo a cada passo. Isto dá a noção de uma tartaruga vagarosa.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="execute-if">
<title
>Executar o "if"</title>
<para
></para>
  <variablelist>
    <anchor id="if"/>
    <varlistentry>
      <term
>if</term>
      <listitem
><para
><screen
>if <link linkend="questions"
>pergunta</link
> [ ... ]</screen>
O código que é colocado no <quote
>...</quote
> só será executado se (<userinput
>if</userinput
>) a resposta à <link linkend="questions"
>pergunta</link
> for <quote
>true</quote
> (verdadeira). Por favor leia, para obter mais informações sobre perguntas, a <link linkend="questions"
>secção de perguntas</link
>. <screen>
x = 6
if x &gt; 5 [
  print "O x é maior que cinco!"
]
</screen
> Na primeira linha, o <userinput
>x</userinput
> é inicializado a 6. Na segunda linha, a <link linkend="questions"
>pergunta</link
> <userinput
>x &gt; 5</userinput
> é feita. Dado que a resposta a esta pergunta é verdadeira, o controlador de execução <userinput
>if</userinput
> irá permitir que o código entre parêntesis rectos seja executado</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="execute-while">
<title
>Executar o "while"</title>
<para
></para>
  <variablelist>
    <anchor id="while"/>
    <varlistentry>
      <term
>while</term>
      <listitem
><para
><screen
>while <link linkend="questions"
>pergunta</link
> [ ... ]</screen>
O controlador de execução <userinput
>while</userinput
> é um pouco como o <link linkend="if"
><userinput
>if</userinput
></link
>. A diferença é que o <userinput
>while</userinput
> continua a repetir o código entre parêntesis até que a resposta à <link linkend="questions"
>pergunta</link
> seja <quote
>false</quote
> (falsa). <screen>
x = 1
while x &lt; 5 [
  forward 10
  wait 1
  x = x + 1
]
</screen
> Na primeira linha, o <userinput
>x</userinput
> fica igual a 1. Na segunda, a <link linkend="questions"
>pergunta</link
> <userinput
>x &lt; 5</userinput
> é feita. Dado que a resposta a esta pergunta é <quote
>true</quote
> (verdadeira), o controlador de execução <userinput
>while</userinput
> começa a execução do código entre parêntesis até que a resposta à <link linkend="questions"
>pergunta</link
> seja <quote
>false</quote
> (falsa). Neste caso, o código entre parêntesis será executado 4 vezes, dado que, de cada vez que a quinta linha é executada, o <userinput
>x</userinput
> fica um número acima.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="if-else">
<title
>Se não, por outras palavras: "else"</title>
<para
></para>
  <variablelist>
    <anchor id="else"/>
    <varlistentry>
      <term
>else</term>
      <listitem
><para
><screen
>if pergunta [ ... ] else [ ... ]</screen>
O <userinput
>else</userinput
> pode ser usado para além do controlador de execução <link linkend="if"
><userinput
>if</userinput
></link
>. O código entre parêntesis a seguir ao <userinput
>else</userinput
> só é executado se a resposta à <link linkend="questions"
>pergunta</link
> que é feita for <quote
>false</quote
> (falsa). <screen>
x = 4
if x &gt; 5 [
  print "O x é maior que cinco!"
] else [
  print "O x é menor que seis!"
]
</screen
> A <link linkend="questions"
>pergunta</link
> testa se o <userinput
>x</userinput
> é maior que 5. Dado que o <userinput
>x</userinput
> fica igual a 4 na primeira linha, a resposta à pergunta é <quote
>false</quote
> (falsa). Isto significa que o código entre parêntesis a seguir ao <userinput
>else</userinput
> é executado.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="for-loop">
<title
>O ciclo "for"</title>
<para
></para>
  <variablelist>
    <anchor id="for"/>
    <varlistentry>
      <term
>for</term>
      <listitem
><para
><screen
>for <userinput
>ponto inicial</userinput
> a <userinput
>ponto final</userinput
> [ ... ]</screen>
O ciclo <userinput
>for</userinput
> é um <quote
>ciclo de contagem</quote
>, ou seja, faz de contador para si. <screen>
for x = 1 to 10 [
  print x * 7
  forward 15
]
</screen
> De cada vez que o código entre parêntesis é executado, o <userinput
>x</userinput
> é incrementado de uma unidade, até que o valor do <userinput
>x</userinput
> chegue a 10. O código entre parêntesis imprime o valor de <userinput
>x</userinput
> multiplicado por 7. Depois de este programa terminar a sua execução, você irá ver a tabuada dos 7 na área de desenho.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

</sect1>


<sect1 id="learn">
<title
>Crie os seus próprios comandos!</title>
<para
>O <userinput
>learn</userinput
> é um comando muito especial, porque é usado para criar os seus próprios comandos. O comando que criar poderá receber <glossterm linkend="input-output"
>parâmetros</glossterm
> e devolver <glossterm linkend="input-output"
>resultados</glossterm
>. Vamos ver como é que é criado um novo comando. <screen>
learn circunferencia (x) [
  repeat 36 [
    forward x
    turnleft 10
  ]
]
</screen
> O novo comando chama-se <userinput
>circunferencia</userinput
>. O <userinput
>circunferencia</userinput
> recebe um <glossterm linkend="input-output"
>parâmetro</glossterm
>, um número, para definir o tamanho da circunferência. O <userinput
>circunferencia</userinput
> não devolve nenhum <glossterm linkend="input-output"
>resultado</glossterm
>. O comando <userinput
>circunferencia</userinput
> pode agora ser usado como um comando normal. Veja este exemplo: <screen
>learn circunferencia (x) [
  repeat 36 [
    forward x
    turnleft 10
  ]
]

go 30,30
circle 20

go 40,40
circle 50
</screen>
</para>
<para
>No próximo exemplo, vai ser criado um comando com um valor de resultado devolvido. <screen>
learn multiplicarPeloProprio (n) [
  r = n * n
  return r
]
i = inputwindow "Por favor indique um número e carregue em OK"
print "O " + i + " multiplicado por ele própirio é igual a: " + multiplicarPeloProprio (i)
</screen
> Neste exemplo, existe agora um comando novo chamado <userinput
>multiplicarPeloProprio</userinput
>. O parâmetro deste comando é multiplicado por ele próprio e é então devolvido, usando o comando <anchor id="return"/><userinput
>return</userinput
>. O comando <userinput
>return</userinput
> é a forma de devolver um resultado de uma função criada. </para>
</sect1>

</chapter>
