Warning, /education/kturtle/po/pt/docs/kturtle/programming-reference.docbook is written in an unsupported language. File is not indexed.

0001 <chapter id="reference">
0002 <title
0003 >Referência de Programação de &turtlescript;</title>
0004 <para
0005 >Esta é a referência para o &turtlescript; do &kturtle;. Na primeira secção deste capítulo dê uma vista de olhos em alguns aspectos da <link linkend="grammar"
0006 >gramática</link
0007 > dos programas em &turtlescript;. A segunda secção lida em exclusivo com os <link linkend="mathematical-operators"
0008 >operadores matemáticos</link
0009 >, os <link linkend="boolean-operators"
0010 >operadores booleanos (verdadeiro/falso)</link
0011 > e os <link linkend="comparing-operators"
0012 >operadores de comparação</link
0013 >. A terceira secção é uma lista enorme com todos os <link linkend="commands"
0014 >comandos</link
0015 >, explicando-os um-a-um. A quarta secção explica como <link linkend="assignment-of-variables"
0016 >atribuir</link
0017 > valores às <link linkend="assignment-of-variables"
0018 >variáveis</link
0019 >. Finalmente, é explicado como organizar a execução dos comandos com as <link linkend="controlling-execution"
0020 >instruções de controlo da execução</link
0021 > na quinta secção e como criar os seus próprios comandos com o <link linkend="learn"
0022 >aprender</link
0023 >, na última secção.</para>
0024 
0025 <sect1 id="grammar">
0026 <title
0027 >A Gramática do &turtlescript;</title>
0028 <para
0029 >Como em qualquer linguagem, o &turtlescript; tem diferentes tipos de palavras e símbolos. No Português, é feita a distinção entre os verbos (como 'andar' ou 'cantar') e os substantivos (como 'irmã' ou 'casa'), sendo usados para diferentes fins. O &turtlescript; é uma linguagem de programação, sendo usada para indicar ao &kturtle; o que fazer.</para>
0030 <para
0031 >Nesta secção, alguns dos diferentes tipos de palavras e símbolos do &turtlescript; são explicados de forma breve. Serão explicados os <link linkend="comment"
0032 >comentários</link
0033 >, os <link linkend="command"
0034 >comandos</link
0035 > e os três diferentes tipos de literais: <link linkend="number"
0036 >números</link
0037 >, <link linkend="string"
0038 >cadeias de caracteres</link
0039 > e os <link linkend="boolean-value"
0040 >valores booleanos (verdadeiro/falso)</link
0041 >.</para>
0042 
0043 
0044 <sect2 id="comment">
0045 <title
0046 >Comentários</title>
0047 <para
0048 >Um programa contém instruções que são executadas quando o programa é executado e outros itens, chamados de comentários. Os comentários não são executados; o &kturtle; simplesmente ignora-os ao executar o seu programa. Os comentários estão lá para que os outros programadores possam compreender melhor o seu programa. Tudo o que estiver a seguir a um símbolo <userinput
0049 >#</userinput
0050 > é considerado um comentário no &turtlescript;. Por exemplo, este pequeno programa não faz nada: <screen>
0051 # este pequeno programa não faz nada, é apenas um comentário!
0052 </screen
0053 > É um pouco inútil, mas explica bem o conceito.</para>
0054 <para
0055 >Os comentários tornam-se bastante úteis quando o programa se torna um pouco mais complexo. Podê-lo-á ajudar a dar alguns conselhos aos outros programas. No seguinte programa, irá ver os comentários a serem usados em conjunto com o comando <link linkend="print"
0056 >imprimir</link
0057 >. <screen>
0058 # este programa foi feito pelo Cies Breijs.
0059 imprimir "este texto será impresso na área de desenho"
0060 # a linha anterior não é um comentário, mas a seguinte é:
0061 # imprimir "este texto não será impresso!"
0062 </screen
0063 > A primeira linha descreve o programa. A segunda é executada pelo &kturtle; e imprime a mensagem <userinput
0064 >este texto será impresso na área de desenho</userinput
0065 > na área de desenho propriamente dita. A terceira linha é um comentário. A quarta linha é um comentário que contém um pedaço de &turtlescript;, se for retirado o símbolo <userinput
0066 >#</userinput
0067 > da quarta linha, a instrução 'imprimir' será executada pelo &kturtle;. Os programadores dizem: a instrução da quarta linha está 'comentada'.</para>
0068 <para
0069 >As linhas comentadas ficam <glossterm
0070 >realçadas</glossterm
0071 > com um cinzento claro no <link linkend="the-editor"
0072 >editor</link
0073 >.</para>
0074 </sect2>
0075 
0076 <sect2 id="command">
0077 <title
0078 >Comandos</title>
0079 <para
0080 >Ao usar os comandos, você diz à tartaruga ou ao &kturtle; para fazerem algo. Alguns comandos necessitam de dados de entrada, enquanto outros geram resultados.<screen>
0081 # o 'avancar' é um comando que necessita de dados de entrada, neste caso do número 100:
0082 avancar 100
0083 </screen
0084 > A primeira linha é um <link linkend="comment"
0085 >comentário</link
0086 >. A segunda linha contém o comando <userinput
0087 >avancar</userinput
0088 > e o <link linkend="number"
0089 >número</link
0090 > <userinput
0091 >100</userinput
0092 >. O número não faz parte do comando, mas é considerada uma 'entrada' para o comando.</para>
0093 <para
0094 >Alguns comandos, como &eg; o <userinput
0095 >go</userinput
0096 > necessitam de mais que um parâmetro. Os vários parâmetros, nesse caso, deverão ser separados pelo carácter <userinput
0097 >,</userinput
0098 > (vírgula).</para>
0099 <para
0100 >Para uma ideia geral de todos os comandos que o &kturtle; suporta, venha <link linkend="commands"
0101 >aqui</link
0102 >. Os comandos incorporados são <glossterm
0103 >realçados</glossterm
0104 > a azul-escuro</para>
0105 </sect2>
0106 
0107 <sect2 id="number">
0108 <title
0109 >Números</title>
0110 <para
0111 >O mais provável é que você já conheça alguma coisa sobre os números. A forma como estes são usados no &kturtle; não é muito diferente da língua falada ou da matemática. </para>
0112 <para
0113 >Temos os chamados números naturais: <userinput
0114 >0</userinput
0115 >, <userinput
0116 >1</userinput
0117 >, <userinput
0118 >2</userinput
0119 >, <userinput
0120 >3</userinput
0121 >, <userinput
0122 >4</userinput
0123 >, <userinput
0124 >5</userinput
0125 >, etc. Os números negativos: <userinput
0126 >-1</userinput
0127 >, <userinput
0128 >-2</userinput
0129 >, <userinput
0130 >-3</userinput
0131 >, etc. E os números decimais, por exemplo: <userinput
0132 >0,1</userinput
0133 >, <userinput
0134 >3,14</userinput
0135 >, <userinput
0136 >33,3333</userinput
0137 >, <userinput
0138 >-5,05</userinput
0139 >, <userinput
0140 >-1,0</userinput
0141 >. O carácter <userinput
0142 >,</userinput
0143 > (vírgula) é usado como separador decimal. </para>
0144 <para
0145 >Os números poderão ser usados nos <link linkend="mathematical-operators"
0146 >operadores matemáticos</link
0147 > e nos <link linkend="comparing-operators"
0148 >operadores de comparação</link
0149 >. Também poderão ser guardados em <link linkend="assignment-of-variables"
0150 >variáveis</link
0151 >. Os números são <glossterm
0152 >realçados</glossterm
0153 > a vermelho escuro.</para>
0154 </sect2>
0155 
0156 <!-- constants like pi? -->
0157 
0158 <sect2 id="string">
0159 <title
0160 >Cadeias de caracteres</title>
0161 <para
0162 >Primeiro um exemplo: <screen>
0163 print "Olá, sou uma cadeia de caracteres."
0164 </screen
0165 > Neste exemplo, o <userinput
0166 >print</userinput
0167 > é um comando, enquanto o <userinput
0168 >"Olá, sou uma cadeia de caracteres."</userinput
0169 > é, de facto, uma cadeia de caracteres. Estas começam e terminam com o símbolo <userinput
0170 >"</userinput
0171 >; com estes símbolos, o &kturtle; sabe que é uma cadeia de caracteres.</para>
0172 <para
0173 >As cadeias de caracteres poderão ser colocadas em <link linkend="assignment-of-variables"
0174 >variáveis</link
0175 >, como acontece com os <link linkend="number"
0176 >números</link
0177 >. Contudo, ao contrário dos números, as cadeias de caracteres não podem ser usadas nos <link linkend="mathematical-operators"
0178 >operadores matemáticos</link
0179 > ou nos <link linkend="comparing-operators"
0180 >operadores de comparação</link
0181 >. As cadeias de caracteres são <glossterm
0182 >realçadas</glossterm
0183 > a vermelho.</para>
0184 </sect2>
0185 
0186 <sect2 id="boolean-value">
0187 <title
0188 >Valores booleanos (verdadeiro/falso)</title>
0189 <para
0190 >Existem apenas dois valores booleanos: <userinput
0191 >verdadeiro</userinput
0192 ><indexterm
0193 ><primary
0194 >verdadeiro</primary
0195 ></indexterm
0196 > e <userinput
0197 >falso</userinput
0198 ><indexterm
0199 ><primary
0200 >falso</primary
0201 ></indexterm
0202 >. Algumas vezes também são chamados de: ligado e desligado, um e zero. Contudo, no &turtlescript; são sempre chamados de <userinput
0203 >verdadeiro</userinput
0204 > e <userinput
0205 >falso</userinput
0206 >. Dê uma vista de olhos neste excerto de &turtlescript;: <screen>
0207 $a = verdadeiro
0208 </screen
0209 > Se olhar para o <link linkend="the-inspector"
0210 >inspector</link
0211 >, poderá ver que a  <link linkend="assignment-of-variables"
0212 >variável</link
0213 > <userinput
0214 >$a</userinput
0215 > está igual a <userinput
0216 >verdadeiro</userinput
0217 >, tendo um tipo booleano.</para>
0218 <para
0219 >Normalmente, os valores booleanos são o resultado de um <link linkend="comparing-operators"
0220 >operador de comparação</link
0221 >, como acontece no seguinte excerto de &turtlescript;: <screen>
0222 $resposta = 10 &gt; 3
0223 </screen
0224 > A <link linkend="assignment-of-variables"
0225 >variável</link
0226 > <userinput
0227 >$resposta</userinput
0228 > é configurada como <userinput
0229 >verdadeiro</userinput
0230 >, dado que <userinput
0231 >10</userinput
0232 > é maior que <userinput
0233 >3</userinput
0234 >.</para>
0235 <para
0236 >Os valores booleanos, <userinput
0237 >true</userinput
0238 > (verdadeiro) e <userinput
0239 >false</userinput
0240 > (falso), estão <glossterm
0241 >realçados</glossterm
0242 > a vermelho escuro.</para>
0243 </sect2>
0244 
0245 </sect1>
0246 
0247 
0248 
0249 <sect1 id="operators">
0250 <title
0251 >Operadores matemáticos, booleanos e de comparação</title>
0252 <para
0253 >O título deste secção poderá soar muito complicado, mas não é tão difícil de compreender como parece.</para>
0254 
0255 <sect2 id="mathematical-operators">
0256 <title
0257 >Operadores matemáticos</title>
0258 <para
0259 >Estes são os símbolos matemáticos básicos conhecidos: a adição (<userinput
0260 >+</userinput
0261 >), a subtracção (<userinput
0262 >-</userinput
0263 >), a multiplicação (<userinput
0264 >*</userinput
0265 >), a divisão (<userinput
0266 >/</userinput
0267 >) e a potência (<userinput
0268 >^</userinput
0269 >).</para>
0270 
0271 <para
0272 >Aqui está um pequeno exemplo dos operadores matemáticos que poderá usar no &turtlescript;: <screen>
0273 $somar      = 1 + 1
0274 $subtrair = 20 - 5
0275 $multiplicar = 15 * 2
0276 $dividir   = 30 / 30
0277 $elevar    = 2 ^ 2
0278 </screen
0279 > Os valores que resultam das operações matemáticas serão <link linkend="assignment-of-variables"
0280 >atribuídos</link
0281 > às diversas <link linkend="assignment-of-variables"
0282 >variáveis</link
0283 >. Se utilizar o <link linkend="the-inspector"
0284 >inspector</link
0285 >, poderá ver os valores.</para>
0286 <para
0287 >Se você somente queria fazer um cálculo simples, você poderá fazer algo semelhante a isto: <screen
0288 >imprimir 2010-12
0289 </screen
0290 ></para>
0291 <para
0292 >Agora, um exemplo com parêntesis: <screen>
0293 imprimir ( ( 20 - 5 ) * 2 / 30 ) + 1
0294 </screen
0295 > 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). Os parêntesis também poderão ser usados noutros casos.</para>
0296 <para
0297 >O &kturtle; também tem mais funcionalidades sob a forma de comandos. Dê uma vista de olhos sobre os seguintes comandos, mas tenha em mente que diz respeito a operações avançadas: <link linkend="round"
0298 >round</link
0299 >, <link linkend="random"
0300 >random</link
0301 >, <link linkend="sqrt"
0302 >sqrt</link
0303 >, <link linkend="pi"
0304 >pi</link
0305 >, <link linkend="sin"
0306 >sin</link
0307 >, <link linkend="cos"
0308 >cos</link
0309 >, <link linkend="tan"
0310 >tan</link
0311 >, <link linkend="arcsin"
0312 >arcsin</link
0313 >, <link linkend="arccos"
0314 >arccos</link
0315 >, <link linkend="arctan"
0316 >arctan</link
0317 >.</para>
0318 </sect2>
0319 
0320 <sect2 id="boolean-operators">
0321 <title
0322 >Operadores booleanos (verdadeiro/falso)</title>
0323 <para
0324 >Enquanto os <link linkend="mathematical-operators"
0325 >operadores matemáticos</link
0326 > são usados principalmente para os <link linkend="number"
0327 >números</link
0328 >, os operadores booleanos são para os <link linkend="boolean-value"
0329 >valores booleanos</link
0330 > (<userinput
0331 >verdadeiro</userinput
0332 > e <userinput
0333 >falso</userinput
0334 >). Existem apenas três operadores booleanos, o <userinput
0335 ><indexterm
0336 ><primary
0337 >e</primary
0338 ></indexterm
0339 ></userinput
0340 >, <userinput
0341 ><indexterm
0342 ><primary
0343 >ou</primary
0344 ></indexterm
0345 ></userinput
0346 > e <userinput
0347 ><indexterm
0348 ><primary
0349 >nao</primary
0350 ></indexterm
0351 ></userinput
0352 >. O seguinte exemplo de &turtlescript; mostra como usá-los: <screen>
0353 $e_1_1 = verdadeiro e verdadeiro    # -> verdadeiro
0354 $e_1_0 = verdadeiro e falso   # -> falso
0355 $e_0_1 = falso e verdadeiro   # -> falso
0356 $e_0_0 = falso e falso  # -> falso
0357 
0358 $ou_1_1 = verdadeiro ou verdadeiro    # -> verdadeiro
0359 $ou_1_0 = verdadeiro ou falso   # -> verdadeiro
0360 $ou_0_1 = falso ou verdadeiro   # -> verdadeiro
0361 $ou_0_0 = falso ou falso  # -> falso
0362 
0363 $nao_1 = nao verdadeiro   # -> falso
0364 $nao_0 = nao falso  # -> verdadeiro
0365 </screen
0366 > Se usar o <link linkend="the-inspector"
0367 >inspector</link
0368 >, poderá ver os valores; contudo, fornecemos estes resultados como pequenos comentários no fim das linhas. O <userinput
0369 >e</userinput
0370 > é avaliado como <userinput
0371 >verdadeiro</userinput
0372 > apenas se ambos os lados forem <userinput
0373 >verdadeiro</userinput
0374 >. O <userinput
0375 >ou</userinput
0376 > é avaliado como <userinput
0377 >verdadeiro</userinput
0378 > se qualquer um dos lados for <userinput
0379 >verdadeiro</userinput
0380 >. Finalmente, o <userinput
0381 >nao</userinput
0382 > transforma um <userinput
0383 >verdadeiro</userinput
0384 > num <userinput
0385 >falso</userinput
0386 > e um <userinput
0387 >falso</userinput
0388 > num <userinput
0389 >verdadeiro</userinput
0390 >.</para>
0391 <para
0392 >Os operadores booleanos são <glossterm
0393 >realçados</glossterm
0394 > a rosa.</para>
0395 
0396 <sect3 id="boolean-operators-advanced-examples">
0397 <title
0398 >Alguns exemplos mais avançados</title>
0399 <para
0400 >Veja o exemplo seguinte com o <userinput
0401 >e</userinput
0402 >: <screen>
0403 $a = 1
0404 $b = 5
0405 se (($a &lt; 10) e ($b == 5)) e ($a &lt; $b) {
0406   imprimir "olá"
0407 }
0408 </screen
0409 > Neste excerto de &turtlescript;, o resultado dos três <link linkend="comparing-operators"
0410 >operadores de comparação</link
0411 > é reunido com os operadores <userinput
0412 >e</userinput
0413 >. Isto significa que todos os três têm de ser avaliados como "verdadeiro" para imprimir o "olá".</para>
0414 
0415 <para
0416 >Um exemplo com o <userinput
0417 >ou</userinput
0418 >: <screen>
0419 $n = 1
0420 se ($n &lt; 10) ou ($n == 2) {
0421   imprimir "olá"
0422 }
0423 </screen
0424 > Neste pedaço de &turtlescript;, o lado esquerdo do <userinput
0425 >ou</userinput
0426 > é avaliado como 'verdadeiro', enquanto o direito é avaliado como 'falso'. Dado que um dos lados do operador <userinput
0427 >ou</userinput
0428 > é 'verdadeiro', o operador <userinput
0429 >ou</userinput
0430 > é avaliado como 'verdadeiro'. Isto significa que o 'olá' é impresso.</para>
0431 
0432 <para
0433 >Finalmente, um exemplo com o <userinput
0434 >não</userinput
0435 >, que muda o 'verdadeiro' para 'falso' e o 'falso' para 'verdadeiro'. Dê uma vista de olhos: <screen
0436 >$n = 1
0437 se nao ($n == 3) {
0438   imprimir "olá"
0439 } senao {
0440   imprimir "não olá ;-)"
0441 }
0442 </screen
0443 ></para>
0444 </sect3>
0445 </sect2>
0446 
0447 <sect2 id="comparing-operators">
0448 <title
0449 >Operadores de comparação</title>
0450 <para
0451 >Considere esta simples comparação: <screen>
0452 $resposta = 10 &gt; 3
0453 </screen
0454 > Aqui o <userinput
0455 >10</userinput
0456 > é comparado com o <userinput
0457 >3</userinput
0458 >, através do operador 'maior que'. O resultado desta comparação, o <link linkend="boolean-value"
0459 >valor booleano</link
0460 > <userinput
0461 >verdadeiro</userinput
0462 > é guardado na <link linkend="assignment-of-variables"
0463 >variável</link
0464 > <userinput
0465 >$resposta</userinput
0466 >.</para>
0467 <para
0468 >Todos os <link linkend="number"
0469 >números</link
0470 > e <link linkend="assignment-of-variables"
0471 >variáveis</link
0472 > (que contenham números) poderão ser comparados entre si, com os operadores de comparação.</para>
0473 <para
0474 >Aqui estão todos os possíveis operadores de comparação: <table
0475 > <title
0476 >Tipos de perguntas</title
0477 > <tgroup cols="3"
0478 > <tbody
0479 > <row
0480 > <entry
0481 ><userinput
0482 >A == B</userinput
0483 ></entry
0484 > <entry
0485 >é igual</entry
0486 > <entry
0487 >a resposta é <quote
0488 >verdadeira</quote
0489 > se o <userinput
0490 >A</userinput
0491 > for igual a <userinput
0492 >B</userinput
0493 ></entry
0494 > </row
0495 > <row
0496 > <entry
0497 ><userinput
0498 >A != B</userinput
0499 ></entry
0500 > <entry
0501 >é diferente</entry
0502 > <entry
0503 >a resposta é <quote
0504 >verdadeira</quote
0505 > se o <userinput
0506 >A</userinput
0507 > não for igual ao <userinput
0508 >B</userinput
0509 ></entry
0510 > </row
0511 > <row
0512 > <entry
0513 ><userinput
0514 >A &gt; B</userinput
0515 ></entry
0516 > <entry
0517 >maior que</entry
0518 > <entry
0519 >a resposta é <quote
0520 >verdadeira</quote
0521 > se o <userinput
0522 >A</userinput
0523 > for maior que o <userinput
0524 >B</userinput
0525 ></entry
0526 > </row
0527 > <row
0528 > <entry
0529 ><userinput
0530 >A &lt; B</userinput
0531 ></entry
0532 > <entry
0533 >menor que</entry
0534 > <entry
0535 >a resposta é <quote
0536 >verdadeira</quote
0537 > se <userinput
0538 >A</userinput
0539 > for menor que <userinput
0540 >B</userinput
0541 ></entry
0542 > </row
0543 > <row
0544 > <entry
0545 ><userinput
0546 >A &gt;= B</userinput
0547 ></entry
0548 > <entry
0549 >maior ou igual a</entry
0550 > <entry
0551 >a resposta é <quote
0552 >verdadeira</quote
0553 > se <userinput
0554 >A</userinput
0555 > for maior ou igual ao <userinput
0556 >B</userinput
0557 ></entry
0558 > </row
0559 > <row
0560 > <entry
0561 ><userinput
0562 >A &lt;= B</userinput
0563 ></entry
0564 > <entry
0565 >menor ou igual a</entry
0566 > <entry
0567 >a resposta é <quote
0568 >verdadeira</quote
0569 > se <userinput
0570 >A</userinput
0571 > for menor ou igual a <userinput
0572 >B</userinput
0573 ></entry
0574 > </row
0575 > </tbody
0576 > </tgroup
0577 > </table
0578 > Lembre-se que o A e o B têm de ser <link linkend="number"
0579 >números</link
0580 > ou <link linkend="assignment-of-variables"
0581 >variáveis</link
0582 > que contenham números.</para>
0583 </sect2>
0584 
0585 
0586 </sect1>
0587 
0588 
0589 
0590 <sect1 id="commands">
0591 <title
0592 >Comandos</title>
0593 <para
0594 >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 incorporados que podem ser usados no &kturtle;. Em alternativa, usando o <link linkend="learn"
0595 >aprender</link
0596 >, poderá criar os seus próprios comandos. Os comandos incorporados ficam <glossterm
0597 >realçados</glossterm
0598 > a azul escuro.</para>
0599 
0600 <sect2 id="moving-the-turtle">
0601 <title
0602 >Mover a tartaruga</title>
0603 <para
0604 >Existem vários comandos para mover a tartaruga pelo ecrã.</para>
0605 
0606   <variablelist>
0607     <anchor id="forward"/>
0608     <varlistentry
0609 > 
0610       <term
0611 >forward (fw)<indexterm
0612 ><primary
0613 >forward (fw)</primary
0614 ></indexterm
0615 ></term>
0616       <listitem
0617 ><para
0618 ><screen
0619 >forward X</screen>
0620 O <userinput
0621 >forward</userinput
0622 > move a tartaruga para a frente X pixels. Quando o traço está em baixo, a tartaruga irá deixar um rasto. O <userinput
0623 >forward</userinput
0624 > pode ser abreviado para <userinput
0625 >fw</userinput
0626 ></para
0627 ></listitem>
0628     </varlistentry>
0629   </variablelist>
0630   <variablelist>
0631     <anchor id="backward"/>
0632     <varlistentry
0633 >  
0634       <term
0635 >backward (bw)<indexterm
0636 ><primary
0637 >backward (bw)</primary
0638 ></indexterm
0639 ></term>
0640       <listitem
0641 ><para
0642 ><screen
0643 >backward X</screen>
0644 O <userinput
0645 >backward</userinput
0646 > move a tartaruga para trás X pixels. Quando o traço está em baixo, a tartaruga irá deixar um rasto. O <userinput
0647 >backward</userinput
0648 > pode ser abreviado para <userinput
0649 >bw</userinput
0650 >.</para
0651 ></listitem>
0652     </varlistentry>
0653   </variablelist>
0654   <variablelist>
0655     <anchor id="turnleft"/>
0656     <varlistentry
0657 > 
0658       <term
0659 >turnleft (tl)<indexterm
0660 ><primary
0661 >turnleft (tl)</primary
0662 ></indexterm
0663 ></term>
0664       <listitem
0665 ><para
0666 ><screen
0667 >turnleft X</screen>
0668 O <userinput
0669 >turnleft</userinput
0670 > diz à tartaruga para se virar X graus para a esquerda. O <userinput
0671 >turnleft</userinput
0672 > pode ser abreviado para <userinput
0673 >tl</userinput
0674 >.</para
0675 ></listitem>
0676     </varlistentry>
0677   </variablelist>
0678   <variablelist>
0679     <anchor id="turnright"/>
0680     <varlistentry
0681 > 
0682       <term
0683 >turnright (tr)<indexterm
0684 ><primary
0685 >turnright (tr)</primary
0686 ></indexterm
0687 ></term>
0688       <listitem
0689 ><para
0690 ><screen
0691 >turnright X</screen>
0692 O <userinput
0693 >turnright</userinput
0694 > diz à tartaruga para se virar X graus para a direita. O <userinput
0695 >turnright</userinput
0696 > pode ser abreviado para <userinput
0697 >tr</userinput
0698 >.</para
0699 ></listitem>
0700     </varlistentry>
0701   </variablelist>
0702   <variablelist>
0703     <anchor id="direction"/>
0704     <varlistentry
0705 > 
0706       <term
0707 >direction (dir)<indexterm
0708 ><primary
0709 >direction (dir)</primary
0710 ></indexterm
0711 ></term>
0712       <listitem
0713 ><para
0714 ><screen
0715 >direction X</screen>
0716 O <userinput
0717 >direction</userinput
0718 > 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
0719 >direction</userinput
0720 > pode ser abreviado para <userinput
0721 >dir</userinput
0722 >.</para
0723 ></listitem>
0724     </varlistentry>
0725   </variablelist>
0726   <variablelist>
0727     <anchor id="getdirection"/>
0728     <varlistentry
0729 > 
0730       <term
0731 >getdirection<indexterm
0732 ><primary
0733 >getdirection</primary
0734 ></indexterm
0735 ></term>
0736       <listitem
0737 ><para
0738 ><screen
0739 >getdirection</screen>
0740 O <userinput
0741 >getdirection</userinput
0742 > devolve a direcção da tartaruga como um ângulo de X graus a contar do zero, onde o zero é a direcção em que a tartaruga aponta para cima.</para
0743 ></listitem>
0744     </varlistentry>
0745   </variablelist>
0746   <variablelist>
0747     <anchor id="center"/>
0748     <varlistentry
0749 > 
0750       <term
0751 >center<indexterm
0752 ><primary
0753 >center</primary
0754 ></indexterm
0755 ></term>
0756       <listitem
0757 ><para
0758 ><screen
0759 >center</screen>
0760 O <userinput
0761 >center</userinput
0762 > move a tartaruga para o centro da área de desenho.</para
0763 ></listitem>
0764     </varlistentry>
0765   </variablelist>
0766   <variablelist>
0767     <anchor id="go"/>
0768     <varlistentry
0769 > 
0770       <term
0771 >go<indexterm
0772 ><primary
0773 >go</primary
0774 ></indexterm
0775 ></term>
0776       <listitem
0777 ><para
0778 ><screen
0779 >go X,Y</screen>
0780 O <userinput
0781 >go</userinput
0782 > manda a tartaruga ir para um dado local da área de desenho. Este local está a X <glossterm linkend="pixels"
0783 >pixels</glossterm
0784 > do lado esquerdo da área de desenho e a Y <glossterm linkend="pixels"
0785 >pixels</glossterm
0786 > do topo da área.</para
0787 ></listitem>
0788     </varlistentry>
0789   </variablelist>
0790   <variablelist>
0791     <anchor id="gox"/>
0792     <varlistentry
0793 > 
0794       <term
0795 >gox<indexterm
0796 ><primary
0797 >gox (gx)</primary
0798 ></indexterm
0799 ></term>
0800       <listitem
0801 ><para
0802 ><screen
0803 >gox X</screen>
0804 Ao usar o comando <userinput
0805 >gox</userinput
0806 >, a tartaruga irá mover-se X <glossterm linkend="pixels"
0807 >pixels</glossterm
0808 > a partir da esquerda da área de desenho, mantendo à mesma a sua altura. O <userinput
0809 >gox</userinput
0810 > pode ser abreviado para <userinput
0811 >gx</userinput
0812 >.</para
0813 ></listitem>
0814     </varlistentry>
0815   </variablelist>
0816   <variablelist>
0817     <anchor id="goy"/>
0818     <varlistentry
0819 > 
0820       <term
0821 >goy<indexterm
0822 ><primary
0823 >goy (gy)</primary
0824 ></indexterm
0825 ></term>
0826       <listitem
0827 ><para
0828 ><screen
0829 >goy Y</screen>
0830 Ao usar o comando <userinput
0831 >goy</userinput
0832 >, a tartaruga irá mover-se Y <glossterm linkend="pixels"
0833 >pixels</glossterm
0834 > a partir do topo da área de desenho, mantendo à mesma a sua distância ao lado esquerdo da área de desenho. O <userinput
0835 >goy</userinput
0836 > pode ser abreviado para <userinput
0837 >gy</userinput
0838 >.</para
0839 ></listitem>
0840     </varlistentry>
0841   </variablelist>
0842   <note
0843 ><para
0844 >Usando os comandos <userinput
0845 >go</userinput
0846 >, <userinput
0847 >gox</userinput
0848 >, <userinput
0849 >goy</userinput
0850 > e <userinput
0851 >center</userinput
0852 >, a tartaruga não irá desenhar a linha, não interessando se a caneta está activa ou não.</para>
0853   </note>
0854 </sect2>
0855 
0856 <sect2 id="locate-the-turtle">
0857 <title
0858 >Onde está a tartaruga?</title>
0859 <para
0860 >Existem dois comandos que devolvem a posição da tartaruga no ecrã.</para>
0861 
0862   <variablelist>
0863     <anchor id="getx"/>
0864     <varlistentry
0865 > 
0866       <term
0867 >getx<indexterm
0868 ><primary
0869 >getx</primary
0870 ></indexterm
0871 ></term>
0872       <listitem
0873 ><para
0874 >O <userinput
0875 >getx</userinput
0876 > devolve o número de pixels da esquerda da área de desenho até à posição actual da tartaruga.</para
0877 ></listitem>
0878     </varlistentry>
0879   </variablelist>
0880   <variablelist>
0881     <anchor id="gety"/>
0882     <varlistentry
0883 > 
0884       <term
0885 >gety<indexterm
0886 ><primary
0887 >gety</primary
0888 ></indexterm
0889 ></term>
0890       <listitem
0891 ><para
0892 >O <userinput
0893 >gety</userinput
0894 > devolve o número de pixels de cima da área de desenho até à posição actual da tartaruga.</para
0895 ></listitem>
0896     </varlistentry>
0897   </variablelist>
0898 </sect2>
0899 
0900 <sect2 id="pen">
0901 <title
0902 >A tartaruga tem um traço</title>
0903 <para
0904 >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>
0905   <variablelist>
0906     <anchor id="penup"/>
0907     <varlistentry
0908 > 
0909       <term
0910 >penup (pu)<indexterm
0911 ><primary
0912 >penup (pu)</primary
0913 ></indexterm
0914 ></term>
0915       <listitem
0916 ><para
0917 ><screen
0918 >penup</screen>
0919 O <userinput
0920 >penup</userinput
0921 > levanta o traço da área de desenho. Quando o traço está <quote
0922 >em cima</quote
0923 >, não é desenhada nenhuma linha à medida que a tartaruga se move. Veja também o <userinput
0924 >pendown</userinput
0925 >. O <userinput
0926 >penup</userinput
0927 > pode ser abreviado para <userinput
0928 >pu</userinput
0929 >.</para
0930 ></listitem>
0931     </varlistentry>
0932   </variablelist>
0933   <variablelist>
0934     <anchor id="pendown"/>
0935     <varlistentry
0936 > 
0937       <term
0938 >pendown (pd)<indexterm
0939 ><primary
0940 >pendown (pd)</primary
0941 ></indexterm
0942 ></term>
0943       <listitem
0944 ><para
0945 ><screen
0946 >pendown</screen>
0947 O <userinput
0948 >pendown</userinput
0949 > carrega no traço para baixo na área de desenho. Quando o traço está <quote
0950 >em baixo</quote
0951 >, é desenhada uma linha à medida que a tartaruga se move. Veja também o <userinput
0952 >penup</userinput
0953 >. O <userinput
0954 >pendown</userinput
0955 > pode ser abreviado para <userinput
0956 >pd</userinput
0957 >.</para
0958 ></listitem>
0959     </varlistentry>
0960   </variablelist>
0961   <variablelist>
0962     <anchor id="setpenwidth"/>
0963     <varlistentry
0964 > 
0965       <term
0966 >penwidth (pw)<indexterm
0967 ><primary
0968 >penwidth (pw)</primary
0969 ></indexterm
0970 ></term>
0971       <listitem
0972 ><para
0973 ><screen
0974 >penwidth X</screen>
0975 O <userinput
0976 >penwidth</userinput
0977 > configura a espessura do traço para X <glossterm linkend="pixels"
0978 >pixels</glossterm
0979 >. O <userinput
0980 >penwidth</userinput
0981 > pode ser abreviado para <userinput
0982 >pw</userinput
0983 >.</para
0984 ></listitem>
0985     </varlistentry>
0986   </variablelist>
0987   <variablelist>
0988     <anchor id="setfgcolor"/>
0989     <varlistentry
0990 > 
0991       <term
0992 >pencolor (pc)<indexterm
0993 ><primary
0994 >pencolor (pc)</primary
0995 ></indexterm
0996 ></term>
0997       <listitem
0998 ><para
0999 ><screen
1000 >pencolor R,G,B</screen>
1001 O <userinput
1002 >pencolor</userinput
1003 > configura a cor do traço. O <userinput
1004 >pencolor</userinput
1005 > recebe uma <glossterm linkend="rgb"
1006 >combinação de RGB</glossterm
1007 > como parâmetro. O <userinput
1008 >pencolor</userinput
1009 > pode ser abreviado para <userinput
1010 >pc</userinput
1011 >.</para
1012 ></listitem>
1013     </varlistentry>
1014   </variablelist>
1015 </sect2>
1016 
1017 <sect2 id="canvas">
1018 <title
1019 >Comandos para controlar a área de desenho</title>
1020 <para
1021 >Existem vários comandos para controlar a área de desenho.</para>
1022   <variablelist>
1023     <anchor id="resizecanvas"/>
1024     <varlistentry>
1025       <term
1026 >canvassize (cs)<indexterm
1027 ><primary
1028 >canvassize (cs)</primary
1029 ></indexterm
1030 ></term>
1031       <listitem
1032 ><para
1033 ><screen
1034 >canvassize X,Y</screen>
1035 Com o comando <userinput
1036 >canvassize</userinput
1037 >, poderá definir o tamanho da área de desenho. Recebe um X e um Y como entrada, onde o o X é a nova largura da área de desenho em <glossterm linkend="pixels"
1038 >pixels</glossterm
1039 > e o Y é a nova altura da área de desenho em <glossterm linkend="pixels"
1040 >pixels</glossterm
1041 >. O <userinput
1042 >canvassize</userinput
1043 > pode ser abreviado para <userinput
1044 >cs</userinput
1045 >.</para
1046 ></listitem>
1047     </varlistentry>
1048   </variablelist>
1049   <variablelist>
1050     <anchor id="setbgcolor"/>
1051     <varlistentry
1052 > 
1053       <term
1054 >canvascolor (cc)<indexterm
1055 ><primary
1056 >canvascolor (cc)</primary
1057 ></indexterm
1058 ></term>
1059       <listitem
1060 ><para
1061 ><screen
1062 >canvascolor R,G,B</screen>
1063 O <userinput
1064 >canvascolor</userinput
1065 > configura a cor do traço. O <userinput
1066 >canvascolor</userinput
1067 > recebe uma <glossterm linkend="rgb"
1068 >combinação de RGB</glossterm
1069 > como parâmetro. O <userinput
1070 >canvascolor</userinput
1071 > pode ser abreviado para <userinput
1072 >cc</userinput
1073 >.</para
1074 ></listitem>
1075     </varlistentry>
1076   </variablelist>
1077 </sect2>
1078 
1079 <sect2 id="clean">
1080 <title
1081 >Comandos para limpar</title>
1082 <para
1083 >Existem dois comandos para limpar a área de desenho, depois de você ter deixado tudo confuso.</para>
1084   <variablelist>
1085     <anchor id="clear"/>
1086     <varlistentry
1087 > 
1088       <term
1089 >clear (ccl)<indexterm
1090 ><primary
1091 >clear (ccl)</primary
1092 ></indexterm
1093 ></term>
1094       <listitem
1095 ><para
1096 ><screen
1097 >clear</screen>
1098 Com o <userinput
1099 >clear</userinput
1100 >, 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.</para
1101 ></listitem>
1102     </varlistentry>
1103   </variablelist>
1104   <variablelist>
1105     <anchor id="reset"/>
1106     <varlistentry
1107 > 
1108       <term
1109 >reset<indexterm
1110 ><primary
1111 >reset</primary
1112 ></indexterm
1113 ></term>
1114       <listitem
1115 ><para
1116 ><screen
1117 >reset</screen>
1118 O <userinput
1119 >reset</userinput
1120 > limpa tudo de forma mais abrangente que o comando <userinput
1121 >clear</userinput
1122 >. Depois de um comando <userinput
1123 >reset</userinput
1124 >, 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, que fica com um tamanho de 400 x 400 0 pixels.</para
1125 ></listitem>
1126     </varlistentry>
1127   </variablelist>
1128 </sect2>
1129 
1130 <sect2 id="sprites">
1131 <title
1132 >A tartaruga é uma imagem móvel</title>
1133 <para
1134 >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"
1135 >imagens móveis</glossterm
1136 >). </para>
1137 <para
1138 >A seguir você irá encontrar uma apresentação completa de todos os comandos que lidam com imagens móveis.</para>
1139 <para
1140 >[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>
1141   <variablelist>
1142     <anchor id="spriteshow"/>
1143     <varlistentry
1144 > 
1145       <term
1146 >spriteshow (ss)<indexterm
1147 ><primary
1148 >spriteshow (ss)</primary
1149 ></indexterm
1150 ></term>
1151       <listitem
1152 ><para
1153 ><screen
1154 >spriteshow</screen>
1155 O <userinput
1156 >spriteshow</userinput
1157 > torna a tartaruga visível de novo depois de ter ficado escondida. O <userinput
1158 >spriteshow</userinput
1159 > pode ser abreviado para <userinput
1160 >ss</userinput
1161 >.</para
1162 ></listitem>
1163     </varlistentry>
1164   </variablelist>
1165   <variablelist>
1166     <anchor id="spritehide"/>
1167     <varlistentry
1168 > 
1169       <term
1170 >spritehide (sh)<indexterm
1171 ><primary
1172 >spritehide (sh)</primary
1173 ></indexterm
1174 ></term>
1175       <listitem
1176 ><para
1177 ><screen
1178 >spritehide</screen>
1179 O <userinput
1180 >spritehide</userinput
1181 > esconde a tartaruga. Isto pode ser usado se a tartaruga não couber no seu desenho. O <userinput
1182 >spritehide</userinput
1183 > pode ser abreviado para <userinput
1184 >sh</userinput
1185 >.</para
1186 ></listitem>
1187     </varlistentry>
1188   </variablelist>
1189 </sect2>
1190 
1191 <sect2 id="writing">
1192 <title
1193 >Será que a tartaruga escreve?</title>
1194 <para
1195 >A resposta é: <quote
1196 >sim</quote
1197 >. A tartaruga sabe escrever e pode escrever tudo o que lhe disser para escrever.</para>
1198   <variablelist>
1199     <anchor id="print"/>
1200     <varlistentry
1201 > 
1202       <term
1203 >print<indexterm
1204 ><primary
1205 >print</primary
1206 ></indexterm
1207 ></term>
1208       <listitem
1209 ><para
1210 ><screen
1211 >print X</screen>
1212 O comando <userinput
1213 >print</userinput
1214 > é usado para dizer à tartaruga para escrever algo na área de desenho. O <userinput
1215 >print</userinput
1216 > recebe números e texto como parâmetros. Você poderá executar o <userinput
1217 >print</userinput
1218 > para vários parâmetros com o sinal <quote
1219 >+</quote
1220 >. Veja aqui um pequeno exemplo: <screen
1221 >$ano = 2004
1222 $autor = "Ze"
1223 print "O " + $autor + " iniciou o projecto do KTurtle em " + $ano + " e ainda continua a gostar de trabalhar nele!"
1224 </screen>
1225       </para
1226 ></listitem>
1227     </varlistentry>
1228   </variablelist>
1229   <variablelist>
1230     <anchor id="fontsize"/>
1231     <varlistentry
1232 > 
1233       <term
1234 >fontsize<indexterm
1235 ><primary
1236 >fontsize</primary
1237 ></indexterm
1238 ></term>
1239       <listitem
1240 ><para
1241 ><screen
1242 >fontsize X</screen>
1243 O <userinput
1244 >fontsize</userinput
1245 > configura o tamanho da letra que é usado pelo <userinput
1246 >print</userinput
1247 >. O <userinput
1248 >fontsize</userinput
1249 > recebe um parâmetros que deverá ser um número. O tamanho é definido em <glossterm linkend="pixels"
1250 >pixels</glossterm
1251 >.</para
1252 ></listitem>
1253     </varlistentry>
1254   </variablelist>
1255 </sect2>
1256 
1257 <sect2 id="math-commands">
1258 <title
1259 >Comandos matemáticos</title>
1260 <para
1261 >Os seguintes comandos são as instruções matemáticas mais avançadas do &kturtle;.</para>
1262   <variablelist>
1263     <anchor id="round"/>
1264     <varlistentry>
1265       <term
1266 >round<indexterm
1267 ><primary
1268 >round</primary
1269 ></indexterm
1270 ></term>
1271       <listitem
1272 ><para
1273 ><screen
1274 >round(x)</screen>
1275 O <userinput
1276 >round</userinput
1277 > arredonda o número indicado ao inteiro mais próximo. <screen>
1278 imprimir round(10.8)
1279 avancar 20
1280 imprimir round(10.3)
1281 avancar 20
1282 </screen
1283 > Com este código, a tartaruga iria apresentar os números 11 e 10.</para
1284 ></listitem>
1285     </varlistentry>
1286   </variablelist>
1287   <variablelist>
1288     <anchor id="random"/>
1289     <varlistentry
1290 > 
1291       <term
1292 >random (rnd)<indexterm
1293 ><primary
1294 >random (rnd)</primary
1295 ></indexterm
1296 ></term>
1297       <listitem
1298 ><para
1299 ><screen
1300 >random X,Y</screen>
1301 O <userinput
1302 >random</userinput
1303 > é 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>
1304 repeat 500 {
1305   $x = random 1,20
1306   forward $x
1307   turnleft 10 - $x
1308 }
1309 </screen
1310 > Com o comando <userinput
1311 >random</userinput
1312 >, você poderá adicionar um pouco de confusão ao seu programa.</para
1313 ></listitem>
1314     </varlistentry>
1315   </variablelist>
1316   <variablelist>
1317     <anchor id="mod"/>
1318     <varlistentry
1319 > 
1320       <term
1321 >mod<indexterm
1322 ><primary
1323 >mod</primary
1324 ></indexterm
1325 ></term>
1326       <listitem
1327 ><para
1328 ><screen
1329 >mod X,Y</screen>
1330 O comando <userinput
1331 >mod</userinput
1332 > devolve o resto da divisão do primeiro número pelo segundo.</para
1333 ></listitem>
1334     </varlistentry>
1335   </variablelist>
1336   <variablelist>
1337     <anchor id="sqrt"/>
1338     <varlistentry
1339 > 
1340       <term
1341 >sqrt<indexterm
1342 ><primary
1343 >sqrt</primary
1344 ></indexterm
1345 ></term>
1346       <listitem
1347 ><para
1348 ><screen
1349 >sqrt X</screen>
1350 O comando <userinput
1351 >sqrt</userinput
1352 > é usado para descobrir a raiz quadrada de um número X.</para
1353 ></listitem>
1354     </varlistentry>
1355   </variablelist>
1356 <!--
1357   <variablelist>
1358     <anchor id="exp"/>
1359     <varlistentry
1360 > 
1361       <term
1362 >exp<indexterm
1363 ><primary
1364 >exp</primary
1365 ></indexterm
1366 ></term>
1367       <listitem
1368 ><para
1369 ><screen
1370 >sqrt X</screen>
1371       </para
1372 ></listitem>
1373     </varlistentry>
1374   </variablelist>
1375 -->
1376   <variablelist>
1377     <anchor id="pi"/>
1378     <varlistentry
1379 > 
1380       <term
1381 >pi<indexterm
1382 ><primary
1383 >pi</primary
1384 ></indexterm
1385 ></term>
1386       <listitem
1387 ><para
1388 ><screen
1389 >pi</screen>
1390 Este comando devolve a constante Pi, <userinput
1391 >3,14159</userinput
1392 >.</para
1393 ></listitem>
1394     </varlistentry>
1395   </variablelist>
1396   <variablelist>
1397     <anchor id="sin"/>
1398     <anchor id="cos"/>
1399     <anchor id="tan"/>
1400     <varlistentry>
1401       <term
1402 >sin<indexterm
1403 ><primary
1404 >sin</primary
1405 ></indexterm
1406 >, cos<indexterm
1407 ><primary
1408 >cos</primary
1409 ></indexterm
1410 >, tan<indexterm
1411 ><primary
1412 >tan</primary
1413 ></indexterm
1414 ></term>
1415       <listitem
1416 ><para>
1417 <screen
1418 >sin X
1419 cos X
1420 tan X
1421 </screen>
1422 Estes três comandos representam as conhecidas funções trigonométricas <userinput
1423 >sin</userinput
1424 > (seno), <userinput
1425 >cos</userinput
1426 > (coseno) e <userinput
1427 >tan</userinput
1428 > (tangente). O argumento de entrada destes comandos, o X, é um <link linkend="number"
1429 >número</link
1430 >.</para
1431 ></listitem>
1432     </varlistentry>
1433   </variablelist>
1434   <variablelist>
1435     <anchor id="arcsin"/>
1436     <anchor id="arccos"/>
1437     <anchor id="arctan"/>
1438     <varlistentry>
1439       <term
1440 >arcsin<indexterm
1441 ><primary
1442 >arcsin</primary
1443 ></indexterm
1444 >, arccos<indexterm
1445 ><primary
1446 >arccos</primary
1447 ></indexterm
1448 >, arctan<indexterm
1449 ><primary
1450 >arctan</primary
1451 ></indexterm
1452 ></term>
1453       <listitem
1454 ><para>
1455 <screen
1456 >arcsin X
1457 arccos X
1458 arctan X
1459 </screen>
1460 Estes comandos são as funções inversas do <link linkend="sin"
1461 >sin</link
1462 >, <link linkend="cos"
1463 >cos</link
1464 > e <link linkend="tan"
1465 >tan</link
1466 >. O argumento de entrada destes comandos, o X, é um <link linkend="number"
1467 >número</link
1468 >.</para
1469 ></listitem>
1470     </varlistentry>
1471   </variablelist>
1472 </sect2>
1473 
1474 <sect2 id="dialogs">
1475 <title
1476 >Entrada de dados e reacção através de janelas</title>
1477 <para
1478 >Uma janela poderá pedir alguma alguma reacção em especial ou a introdução de determinados dados. O &kturtle; tem dois comandos para janelas, nomeadamente o <userinput
1479 >message</userinput
1480 > e o <userinput
1481 >ask</userinput
1482 ></para>
1483   <variablelist>
1484     <anchor id="message"/>
1485     <varlistentry
1486 > 
1487       <term
1488 >message<indexterm
1489 ><primary
1490 >message</primary
1491 ></indexterm
1492 ></term>
1493       <listitem
1494 ><para
1495 ><screen
1496 >message X</screen>
1497 O comando <userinput
1498 >message</userinput
1499 > recebe uma <link linkend="string"
1500 >cadeia de caracteres</link
1501 > à entrada. Mostra então uma janela que contém o texto da <link linkend="string"
1502 >cadeia de caracteres</link
1503 >. <screen
1504 >mensagem "O Ze iniciou o projecto do KTurtle em 2003 e ainda continua a gostar de trabalhar nele!"
1505 </screen>
1506       </para
1507 ></listitem>
1508     </varlistentry>
1509   </variablelist>
1510   <variablelist>
1511     <anchor id="ask"/>
1512     <varlistentry
1513 > 
1514       <term
1515 >ask<indexterm
1516 ><primary
1517 >ask</primary
1518 ></indexterm
1519 ></term>
1520       <listitem
1521 ><para
1522 ><screen
1523 >ask X</screen>
1524 O <userinput
1525 >ask</userinput
1526 > recebe uma <link linkend="string"
1527 >cadeia de caracteres</link
1528 > à entrada. Mostra uma janela que contém o texto da cadeia de caracteres, tal como acontece no <link linkend="message"
1529 >message</link
1530 >. Contudo, para além disso, também mostra um campo de texto na janela. Através deste campo, o utilizador poderá introduzir um <link linkend="number"
1531 >número</link
1532 > ou uma <link linkend="string"
1533 >cadeia de caracteres</link
1534 > que poderá ser guardada numa <link linkend="assignment-of-variables"
1535 >variável</link
1536 > ou passado como argumento a um <link linkend="commands"
1537 >comando</link
1538 >. Por exemplo <screen>
1539 $entrada = perguntar "Que idade tem?"
1540 $saida = 2003 - $entrada
1541 imprimir "Em 2003, você tinha " + $saida + " anos a dada altura."
1542 </screen
1543 > Quando um utilizador cancelar a janela ou não introduzir nada de todo, a <link linkend="assignment-of-variables"
1544 >variável</link
1545 > fica vazia.</para
1546 ></listitem>
1547     </varlistentry>
1548   </variablelist>
1549 </sect2>
1550 
1551 </sect1>
1552 
1553 
1554 
1555 <sect1 id="assignment-of-variables">
1556 <title
1557 >Atribuição de variáveis</title>
1558 <para
1559 >Vejamos primeiro as variáveis, e depois iremos ver como atribuir valores a essas variáveis. </para>
1560 
1561 <para
1562 >As variáveis são palavras que começam por um <quote
1563 >$</quote
1564 >; no <link linkend="the-editor"
1565 >editor</link
1566 >, são <glossterm
1567 >realçadas</glossterm
1568 > a púrpura.</para>
1569 
1570 <para
1571 >As variáveis poderão conter qualquer <link linkend="number"
1572 >número</link
1573 >, <link linkend="string"
1574 >texto</link
1575 > ou <link linkend="boolean-value"
1576 >valor booleano (verdadeiro/falso)</link
1577 >. Ao usar a atribuição <userinput
1578 >=</userinput
1579 >, uma variável ficará com conteúdo associado. Irá manter esse conteúdo até que o programa termine a execução ou até a variável ser atribuída de novo a outra coisa qualquer.</para>
1580 
1581 <para
1582 >Poderá usar as variáveis, uma vez atribuídas, como se fossem o seu próprio conteúdo. Por exemplo, no seguinte excerto de &turtlescript;: <screen>
1583 $x = 10
1584 $x = $x / 3
1585 imprimir $x
1586 </screen
1587 > Primeiro, é atribuído à variável <userinput
1588 >$x</userinput
1589 > o valor <userinput
1590 >10</userinput
1591 >. Depois, o <userinput
1592 >$x</userinput
1593 > terá como novo valor o seu próprio valor dividido por <userinput
1594 >3</userinput
1595 > &mdash; isto significa na prática que o <userinput
1596 >$x</userinput
1597 > terá atribuído o valor do produto <userinput
1598 >10 / 3</userinput
1599 >. Finalmente, é impresso o valor do <userinput
1600 >$x</userinput
1601 >. Nas linhas 2 e 3, irá ver que o <userinput
1602 >$x</userinput
1603 > é usado como se fosse o seu próprio conteúdo.</para>
1604 
1605 <para
1606 >As variáveis têm de estar atribuídas para poderem ser usadas. Por exemplo, um: <screen>
1607 imprimir $N
1608 </screen
1609 > Isto não irá imprimir nada e irá obter uma mensagem de erro.</para>
1610 
1611 <para
1612 >Considere o pequeno excerto de código em &turtlescript;: <screen>
1613 $a = 2004
1614 $b = 25
1615 
1616 # o próximo comando imprime "2029"
1617 imprimir $a + $b
1618 recuar 30
1619 # o próximo comando imprime "2004 mais 25 é igual a 2029"
1620 imprimir $a + " mais " + $b + " é igual a " + ($a + $b)
1621 recuar 30
1622 </screen
1623 > Nas duas primeiras linhas, as variáveis <userinput
1624 >a</userinput
1625 > e <userinput
1626 >b</userinput
1627 > são configuradas como sendo iguais a 2004 e 25. Depois nos dois comandos <userinput
1628 >imprimir</userinput
1629 > existe um comando <userinput
1630 >recuar 30</userinput
1631 > no meio. Os comentários antes dos comando <userinput
1632 >imprimir</userinput
1633 > explicam o que está a fazer. Como poderá ver, as variáveis poderão ser usadas como se fossem o valor que contêm, podendo usá-las com qualquer tipo de <link linkend="operators"
1634 >operadores</link
1635 > ou fornecendo-os como entradas na invocação dos <link linkend="commands"
1636 >comandos</link
1637 >.</para>
1638 
1639 <para
1640 >Mais um exemplo: <screen>
1641 $nome = perguntar "Como te chamas?"
1642 imprimir "Olá " + $nome + "! Boa sorte a aprender a arte da programação..."
1643 </screen
1644 > É bastante simples. Mais uma vez, poderá ver que a variável <userinput
1645 >$nome</userinput
1646 >, é tratada apenas como texto.</para>
1647 
1648 <para
1649 >Ao usar as variáveis, o <link linkend="the-inspector"
1650 >inspector</link
1651 > torna-se bastante útil. Mostra-lhe o conteúdo de todas as variáveis que estão a ser usadas de momento.</para>
1652 </sect1>
1653 
1654 
1655 
1656 <sect1 id="controlling-execution">
1657 <title
1658 >Controlar a execução</title>
1659 <para
1660 >Os controladores de execução permitem-lhe &mdash; como o nome deles indica &mdash; controlar a execução.</para>
1661 <para
1662 >Os comandos de controlo da execução ficam <glossterm
1663 >realçados</glossterm
1664 > a verde escuro e a negrito. Os parêntesis rectos, que são mais usados em conjunto com os controladores de execução, ficam <glossterm
1665 >realçados</glossterm
1666 > a preto e em negrito.</para>
1667 
1668 <sect2 id="wait">
1669 <title
1670 >Fazer a tartaruga esperar</title>
1671 <para
1672 >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>
1673   <variablelist>
1674     <varlistentry>
1675       <term
1676 >wait<indexterm
1677 ><primary
1678 >wait</primary
1679 ></indexterm
1680 ></term>
1681       <listitem
1682 ><para
1683 ><screen
1684 >wait X</screen>
1685 O <userinput
1686 >wait</userinput
1687 > faz a tartaruga esperar X segundos. <screen>
1688 repeat 36 [
1689   forward 5
1690   turnright 10
1691   wait 0.5
1692 ]
1693 </screen
1694 > 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
1695 ></listitem>
1696     </varlistentry>
1697   </variablelist>
1698 </sect2>
1699 
1700 <sect2 id="if">
1701 <title
1702 >Executar o "if"</title>
1703   <variablelist>
1704     <varlistentry>
1705       <term
1706 >if<indexterm
1707 ><primary
1708 >if</primary
1709 ></indexterm
1710 ></term>
1711       <listitem
1712 ><para
1713 ><screen
1714 >se <link linkend="boolean-value"
1715 >booleano</link
1716 > [ ... ]</screen>
1717 O código que é colocado entre os parêntesis só será executado <userinput
1718 >se</userinput
1719 > o <link linkend="boolean-value"
1720 >valor booleano</link
1721 > for <quote
1722 >verdadeiro</quote
1723 >. <screen>
1724 $x = 6
1725 se $x &gt; 5 [
1726   imprimir "O x é maior que cinco!"
1727 ]
1728 </screen
1729 > Na primeira linha, o <userinput
1730 >$x</userinput
1731 > é inicializado a 6. Na segunda linha, a <link linkend="comparing-operators"
1732 >operador de comparação</link
1733 > é usado para avaliar <userinput
1734 >x &gt; 5</userinput
1735 >. Dado que a resposta a esta pergunta é <quote
1736 >verdadeira</quote
1737 >, o controlador de execução <userinput
1738 >se</userinput
1739 > irá permitir que o código entre chavetas seja executado.</para
1740 ></listitem>
1741     </varlistentry>
1742   </variablelist>
1743 </sect2>
1744 
1745 <sect2 id="else">
1746 <title
1747 >Se não, por outras palavras: "else"</title>
1748   <variablelist>
1749     <varlistentry>
1750       <term
1751 >else<indexterm
1752 ><primary
1753 >else</primary
1754 ></indexterm
1755 ></term>
1756       <listitem
1757 ><para
1758 ><screen
1759 >se <link linkend="boolean-value"
1760 >booleano</link
1761 > { ... } senao { ... }</screen>
1762 O <userinput
1763 >senao</userinput
1764 > pode ser usado para além do controlador de execução <link linkend="if"
1765 ><userinput
1766 >se</userinput
1767 ></link
1768 >. O código entre chavetas a seguir ao <userinput
1769 >senao</userinput
1770 > só é executado se o <link linkend="boolean-value"
1771 >valor booleano</link
1772 > for <quote
1773 >falso</quote
1774 >. <screen>
1775 reset
1776 $x = 4
1777 se $x &gt; 5 {
1778   imprimir "O x é maior que cinco!"
1779 } senao {
1780   imprimir "O x é menor que seis!"
1781 }
1782 </screen
1783 > O <link linkend="comparing-operators"
1784 >operador de comparação</link
1785 > testa a expressão <userinput
1786 >x &gt; 5</userinput
1787 >. Dado que o <userinput
1788 >x</userinput
1789 > fica igual a 4 na primeira linha, a resposta à pergunta é <quote
1790 >falso</quote
1791 >. Isto significa que o código entre chavetas a seguir ao <userinput
1792 >senao</userinput
1793 > é executado.</para
1794 ></listitem>
1795     </varlistentry>
1796   </variablelist>
1797 </sect2>
1798 
1799 <sect2 id="while">
1800 <title
1801 >O ciclo "while"</title>
1802   <variablelist>
1803     <varlistentry>
1804       <term
1805 >while<indexterm
1806 ><primary
1807 >while</primary
1808 ></indexterm
1809 ></term>
1810       <listitem
1811 ><para
1812 ><screen
1813 >enquanto <link linkend="boolean-value"
1814 >booleano</link
1815 > { ... }</screen>
1816 O controlador de execução <userinput
1817 >while</userinput
1818 > é um pouco como o <link linkend="if"
1819 ><userinput
1820 >se</userinput
1821 ></link
1822 >. A diferença é que o <userinput
1823 >while</userinput
1824 > continua a repetir o código entre parêntesis até que a resposta à <link linkend="boolean-value"
1825 >valor booleano</link
1826 > seja <quote
1827 >falso</quote
1828 >. <screen>
1829 $x = 1
1830 enquanto $x &lt; 5 {
1831   avancar 10
1832   esperar 1
1833   $x = $x + 1
1834 }
1835 </screen
1836 > Na primeira linha, o <userinput
1837 >$x</userinput
1838 > fica igual a 1. Na segunda, a expressão <userinput
1839 >x &lt; 5</userinput
1840 > é avaliada. Dado que a resposta a esta pergunta é <quote
1841 >verdadeiro</quote
1842 >, o controlador de execução <userinput
1843 >enquanto</userinput
1844 > começa a execução do código entre chavetas até que a condição <userinput
1845 >$x &lt; 5</userinput
1846 > seja <quote
1847 >falso</quote
1848 >. Neste caso, o código entre parêntesis será executado 4 vezes, dado que, de cada vez que a quinta linha é executada, o <userinput
1849 >$x</userinput
1850 > fica um número acima.</para
1851 ></listitem>
1852     </varlistentry>
1853   </variablelist>
1854 </sect2>
1855 
1856 <sect2 id="repeat">
1857 <title
1858 >O ciclo "repeat"</title>
1859   <variablelist>
1860     <varlistentry>
1861       <term
1862 >repeat<indexterm
1863 ><primary
1864 >repeat</primary
1865 ></indexterm
1866 ></term>
1867       <listitem
1868 ><para
1869 ><screen
1870 >repetir <link linkend="number"
1871 >número</link
1872 > { ... }</screen>
1873 O controlador de execução <userinput
1874 >repetir</userinput
1875 > funciona um pouco como o <link linkend="while"
1876 ><userinput
1877 >enquanto</userinput
1878 ></link
1879 >. A diferença é que o <userinput
1880 >repetir</userinput
1881 > continua a repetir (em ciclo) o código entre parêntesis para o número indicado.</para
1882 ></listitem>
1883     </varlistentry>
1884   </variablelist>
1885 </sect2>
1886 
1887 <sect2 id="for">
1888 <title
1889 >O ciclo "for", um ciclo de contagem</title>
1890   <variablelist>
1891     <varlistentry>
1892       <term
1893 >for<indexterm
1894 ><primary
1895 >for</primary
1896 ></indexterm
1897 ><indexterm
1898 ><primary
1899 >to</primary
1900 ></indexterm
1901 ><indexterm
1902 ><primary
1903 >step</primary
1904 ></indexterm
1905 ></term>
1906       <listitem
1907 ><para
1908 ><screen
1909 >para <link linkend="assignment-of-variables"
1910 >variável</link
1911 > = <link linkend="number"
1912 >número</link
1913 > até <link linkend="number"
1914 >número</link
1915 > { ... }</screen>
1916 O ciclo <userinput
1917 >para</userinput
1918 > é um <quote
1919 >ciclo de contagem</quote
1920 >, &ie;, faz de contador para si. O primeiro membro configura a variável com o valor do primeiro ciclo. Em cada iteração, o número é aumentado até atingir o segundo número. <screen>
1921 para $x = 1 ate 10 {
1922   imprimir $x * 7
1923   avancar 15
1924 }
1925 </screen
1926 > De cada vez que o código entre chavetas é executado, o <userinput
1927 >$x</userinput
1928 > é incrementado de uma unidade, até que o valor do <userinput
1929 >x</userinput
1930 > chegue a 10. O código entre chavetas imprime o valor de <userinput
1931 >$x</userinput
1932 > multiplicado por 7. Depois de este programa terminar a sua execução, você irá ver a tabuada dos 7 na área de desenho. </para>
1933      <para
1934 >O tamanho por omissão do passo de um ciclo é 1; poderá usar outro valor qualquer com <screen
1935 >para <link linkend="assignment-of-variables"
1936 >variável</link
1937 > = <link linkend="number"
1938 >número</link
1939 > até <link linkend="number"
1940 >number</link
1941 > passo <link linkend="number"
1942 >número</link
1943 > { ... }</screen
1944 ></para
1945 ></listitem>
1946     </varlistentry>
1947   </variablelist>
1948 </sect2>
1949 
1950 <sect2 id="break">
1951 <title
1952 >Sair de um ciclo</title>
1953   <variablelist>
1954     <varlistentry>
1955       <term
1956 >break<indexterm
1957 ><primary
1958 >break</primary
1959 ></indexterm
1960 ></term>
1961       <listitem
1962 ><para
1963 ><screen
1964 >break</screen>
1965 Termina imediatamente o ciclo actual e transfere o controlo para a instrução imediatamente a seguir a esse ciclo.</para
1966 ></listitem>
1967     </varlistentry>
1968   </variablelist>
1969 </sect2>
1970 
1971 <sect2 id="exit">
1972 <title
1973 >Pára a a execução do seu programa</title>
1974   <variablelist>
1975     <varlistentry>
1976       <term
1977 >exit<indexterm
1978 ><primary
1979 >exit</primary
1980 ></indexterm
1981 ></term>
1982       <listitem
1983 ><para
1984 ><screen
1985 >exit</screen>
1986 Termina a execução do seu programa.</para
1987 ></listitem>
1988     </varlistentry>
1989   </variablelist>
1990 </sect2>
1991 
1992 <sect2 id="assert">
1993 <title
1994 >Verificar os testes durante a execução</title>
1995   <variablelist>
1996     <varlistentry>
1997       <term
1998 >assert<indexterm
1999 ><primary
2000 >assert</primary
2001 ></indexterm
2002 ></term>
2003       <listitem
2004 ><para
2005 ><screen
2006 >assert <link linkend="boolean-value"
2007 >booleano</link
2008 ></screen>
2009 Pode ser usado para confirmar a correcção do programa ou dos seus parâmetros. <screen
2010 >$valor = ask "Qual é a sua data de nascimento?"
2011 # o ano tem de ser positivo
2012 assert $valor 
2013 > 0
2014 </screen
2015 ></para
2016 ></listitem>
2017     </varlistentry>
2018   </variablelist>
2019 </sect2>
2020 </sect1>
2021 
2022 
2023 <sect1 id="learn">
2024 
2025 <title
2026 >Crie os seus próprios comandos com o <quote
2027 >learn</quote
2028 ></title>
2029 <para
2030 >O <userinput
2031 >aprender</userinput
2032 ><indexterm
2033 ><primary
2034 >aprender</primary
2035 ></indexterm
2036 > é um comando muito especial, porque é usado para criar os seus próprios comandos. O comando que criar poderá receber <glossterm linkend="input-output"
2037 >parâmetros</glossterm
2038 > e devolver <glossterm linkend="input-output"
2039 >resultados</glossterm
2040 >. Vamos ver como é que é criado um novo comando. <screen>
2041 aprender circunferencia $x {
2042   repetir 36 {
2043     avancar $x
2044     esquerda 10
2045   }
2046 }
2047 </screen
2048 > O novo comando chama-se <userinput
2049 >circunferencia</userinput
2050 >. O <userinput
2051 >circunferencia</userinput
2052 > recebe um <glossterm linkend="input-output"
2053 >parâmetro</glossterm
2054 >, um número, para definir o tamanho da circunferência. O <userinput
2055 >circunferencia</userinput
2056 > não devolve nenhum <glossterm linkend="input-output"
2057 >resultado</glossterm
2058 >. O comando <userinput
2059 >circunferencia</userinput
2060 > pode agora ser usado como um comando normal. Veja este exemplo: <screen
2061 >learn circunferencia $X {
2062   repeat 36 {
2063     forward $X
2064     turnleft 10
2065   }
2066 }
2067 
2068 go 30,30
2069 circunferencia 20
2070 
2071 go 40,40
2072 circunferencia 50  
2073 </screen>
2074 </para>
2075 <para
2076 >No próximo exemplo, vai ser criado um comando <indexterm
2077 ><primary
2078 >devolver</primary
2079 ></indexterm
2080 > com um valor de resultado devolvido. <screen>
2081 aprender faculdade $x {
2082   $r = 1
2083   para $i = 1 ate $x {
2084     $r = $n * $i
2085   }
2086   devolver $r
2087 }
2088 
2089 imprimir faculdade 5
2090 </screen
2091 > Neste exemplo, existe agora um comando novo chamado <userinput
2092 >faculdade</userinput
2093 >. Se o parâmetro deste comando for <userinput
2094 >5</userinput
2095 >, então o resultado é igual a <userinput
2096 >5*4*3*2*1</userinput
2097 >. Ao usar o <userinput
2098 >devolver</userinput
2099 >, o valor do <glossterm linkend="input-output"
2100 >resultado</glossterm
2101 > é indicado e a execução é devolvida.</para>
2102 <para
2103 >Os comandos poderão ter mais de uma <glossterm linkend="input-output"
2104 >entrada</glossterm
2105 >. No exemplo seguinte, é criado um comando que desenha um rectângulo. <screen>
2106 learn caixa $x, $y {
2107   avancar $y
2108   direita 90
2109   avancar $x
2110   direita 90
2111   avancar $y
2112   direita 90
2113   avancar $x
2114   direita 90
2115 }
2116 </screen
2117 > Agora, poderá usar o <userinput
2118 >caixa 50, 100</userinput
2119 > para que a tartaruga desenhe um rectângulo na área de desenho. </para>
2120   
2121 </sect1>
2122 
2123 </chapter>