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

0001 <chapter id="reference">
0002 <title
0003 >Referencia do programador de &turtlescript;</title>
0004 <para
0005 >Este é o manual do &turtlescript; de &kturtle;. Na primeira sección vense algúns aspectos da <link linkend="grammar"
0006 >gramática</link
0007 > dos programas de &turtlescript;. A segunda sección trata das <link linkend="mathematical-operators"
0008 >operacións matemáticas</link
0009 >, <link linkend="boolean-operators"
0010 >operacións lóxicas (certo/falso)</link
0011 > e <link linkend="comparing-operators"
0012 >operacións de comparación</link
0013 >. A terceira sección é unha lista de todas as <link linkend="commands"
0014 >ordes</link
0015 > explicándoas unha por unha. A cuarta sección explica como <link linkend="assignment-of-variables"
0016 >asignar</link
0017 > valores a <link linkend="assignment-of-variables"
0018 >variábeis</link
0019 >. Na quinta sección explícase como ordear a execución das ordes con <link linkend="controlling-execution"
0020 >sentenzas de control da execución</link
0021 > e finalmente na sexta como crear as tuas proprias ordes con <link linkend="learn"
0022 >define</link
0023 >.</para>
0024 
0025 <sect1 id="grammar">
0026 <title
0027 >A gramática de &turtlescript;</title>
0028 <para
0029 >Como calquera linguaxe, &turtlescript; ten diferentes tipos de palabras e símbolos. En galego distinguimos verbos (como «camiñar» ou «falar») e nomes (como «tartaruga» ou  «bicicleta»), e úsanse para cousas diferentes. &turtlescript; é unha linguaxe de programación que se usa para dicirlle á &kturtle; o que ten que facer.</para>
0030 <para
0031 >Nesta sección explícase brevemente que son algúns tipos de palabras de &turtlescript;. Explicaremos os <link linkend="comment"
0032 >comentarios</link
0033 >, <link linkend="command"
0034 >ordes</link
0035 > e os tres tipos diferentes de literais: <link linkend="number"
0036 >números</link
0037 >, <link linkend="string"
0038 >textos</link
0039 > e <link linkend="boolean-value"
0040 >valores lóxicos (certo/falso)</link
0041 >.</para>
0042 
0043 
0044 <sect2 id="comment">
0045 <title
0046 >Comentarios</title>
0047 <para
0048 >Un programa consiste en instrucións que se executan cando se executa o programa e en comentarios. Os comentarios non se executan, &kturtle; ignóraos; somente están aí para que outros programadores entendan mellor o que fai o programa. En &turtlescript; considérase comentario todo o que segue a un símbolo <userinput
0049 >#</userinput
0050 >. Por exemplo este programa que non fai ren: <screen>
0051 #este programa non fai ren, só é un comentario!
0052 </screen
0053 > É pouco útil pero explica moi ben o asunto.</para>
0054 <para
0055 >Os comentarios son moi útiles cando o programa empeza a ser algo complexo. Poden axudar a outros programadores. No seguinte programa podes ver comentarios usados xunto coa orde <link linkend="print"
0056 >escribe</link
0057 >.<screen>
0058 # este programa fíxoo Cies Breijs.
0059 escribe "este texto hase escribir no lenzo"
0060 # a liña anterior non é un comentario, a seguinte si:
0061 # escribe "este texto non se ha escribir!"
0062 </screen
0063 > A primeira liña describe o programa. &kturtle; executa a segunda e imprime <userinput
0064 >este texto hase escribir no lenzo</userinput
0065 > no lenzo. A terceira liña é un comentario, e a cuarta liña é un comentario que contén unha peza de &turtlescript;, se eliminásemos o símbolo <userinput
0066 >#</userinput
0067 > desta liña &kturtle; había executar a orde. Os programadores din: a orde escribe na cuarta liña está «comentada».</para>
0068 <para
0069 >As liñas comentadas son <glossterm
0070 >realzadas</glossterm
0071 > en gris claro no <link linkend="the-editor"
0072 >editor do código</link
0073 >.</para>
0074 </sect2>
0075 
0076 <sect2 id="command">
0077 <title
0078 >Ordes</title>
0079 <para
0080 >Mediante as ordes díslle á tartaruga de &kturtle; que faga algo. Algunhas ordes precisan datos, outras producen algunha saída. <screen>
0081 # avanza é unha orde que precisa de datos, neste caso o número 100:
0082 avanza 100
0083 </screen
0084 > A primeira liña é un <link linkend="comment"
0085 >comentario</link
0086 >. A segunda liña contén a orde <userinput
0087 >avanza</userinput
0088 > e o <link linkend="number"
0089 >número</link
0090 > <userinput
0091 >100</userinput
0092 >. O número non é parte da orde, senón que se considera «entrada» del.</para>
0093 <para
0094 >Algunhas ordes como &eg; <userinput
0095 >vai</userinput
0096 > precisan de máis dun dato de entrada. Cando son varios valores hai que separalos mediente <userinput
0097 >,</userinput
0098 > (comas).</para>
0099 <para
0100 >Para coñecer máis detalles sobre todas as ordes permitidas por &kturtle; vaia <link linkend="commands"
0101 >aquí</link
0102 >. As ordes de serie <glossterm
0103 >reálzanse</glossterm
0104 > en azul escuro</para>
0105 </sect2>
0106 
0107 <sect2 id="number">
0108 <title
0109 >Números</title>
0110 <para
0111 >Posibelmente xa saiba bastante sobre os números. A maneira de utilizar os números en &kturtle; non é moi distinta da oral, nin da matemática. </para>
0112 <para
0113 >Temos os 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 tamén temos números con parte decimal, 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 >. Úsase o <userinput
0142 >.</userinput
0143 > (punto) como separador decimal. </para>
0144 <para
0145 >Os números poden ser utilizados en <link linkend="mathematical-operators"
0146 >operacións matemáticas</link
0147 > e <link linkend="comparing-operators"
0148 >comparacións</link
0149 >. Tamén poden gardarse en <link linkend="assignment-of-variables"
0150 >variábeis</link
0151 >. Os números <glossterm
0152 >reálzanse</glossterm
0153 > en roxo.</para>
0154 </sect2>
0155 
0156 <!-- constants like pi? -->
0157 
0158 <sect2 id="string">
0159 <title
0160 >Textos</title>
0161 <para
0162 >Primeiro un exemplo: <screen>
0163 escribe "Olá, son un texto."</screen>
0164 Neste exemplo <userinput
0165 >escribe</userinput
0166 > é unha orde na que <userinput
0167 >"Olá, son un texto."</userinput
0168 > é un texto. Os textos comezan e rematan con aspas, <userinput
0169 >"</userinput
0170 >, mediante as cais &kturtle; sabe que é un texto.</para>
0171 <para
0172 >Os textos poden porse en <link linkend="assignment-of-variables"
0173 >variábeis</link
0174 >, igual que os <link linkend="number"
0175 >números</link
0176 >, pero a diferenza destes non poden usarse en <link linkend="mathematical-operators"
0177 >operacións matemáticas</link
0178 > nin en <link linkend="comparing-operators"
0179 >comparacións</link
0180 >. Os textos <glossterm
0181 >reálzanse</glossterm
0182 > en vermello.</para>
0183 </sect2>
0184 
0185 <sect2 id="boolean-value">
0186 <title
0187 >Valores lóxicos (certo/falso)</title>
0188 <para
0189 >Só hai dous valores lóxicos: <userinput
0190 >certo</userinput
0191 ><indexterm
0192 ><primary
0193 >certo</primary
0194 ></indexterm
0195 > e <userinput
0196 >falso</userinput
0197 ><indexterm
0198 ><primary
0199 >falso</primary
0200 ></indexterm
0201 >. Algunhas veces tamén se lles chama: verdadeiro e falso, si e non, un e cero. Pero en &turtlescript; sempre se lles chama <userinput
0202 >certo</userinput
0203 > e <userinput
0204 >falso</userinput
0205 >. Bótalle unha olla da e este retallo de &turtlescript;: <screen>
0206 $a = certo
0207 </screen
0208 >. Se miran no <link linkend="the-inspector"
0209 >inspector</link
0210 > verás que a <link linkend="assignment-of-variables"
0211 >variábel</link
0212 > <userinput
0213 >$a</userinput
0214 > ten o valor <userinput
0215 >certo</userinput
0216 > e é de tipo lóxico.</para>
0217 <para
0218 >A miúdo os valores lóxicos son o resultado dunha <link linkend="comparing-operators"
0219 >operación de comparación</link
0220 >, como no seguinte retallo de &turtlescript;: <screen>
0221 $resposta = 10 &gt; 3
0222 </screen
0223 > A <link linkend="assignment-of-variables"
0224 >variábel</link
0225 > <userinput
0226 >$resposta</userinput
0227 > ten o valor <userinput
0228 >certo</userinput
0229 > porque <userinput
0230 >10</userinput
0231 > é maior que <userinput
0232 >3</userinput
0233 >.</para>
0234 <para
0235 >Os valores lóxicos, <userinput
0236 >certo</userinput
0237 > e <userinput
0238 >falso</userinput
0239 >,  son <glossterm
0240 >realzados</glossterm
0241 > en roxo escuro.</para>
0242 </sect2>
0243 
0244 </sect1>
0245 
0246 
0247 
0248 <sect1 id="operators">
0249 <title
0250 >Operacións matemáticas, lóxicas e de comparación</title>
0251 <para
0252 >O título desta sección pode parecer difícil, pero non o é tanto como parece.</para>
0253 
0254 <sect2 id="mathematical-operators">
0255 <title
0256 >Operacións matemáticas</title>
0257 <para
0258 >Estes son os símbolos matemáticos básicos: suma (<userinput
0259 >+</userinput
0260 >), resta (<userinput
0261 >-</userinput
0262 >), multiplicación (<userinput
0263 >*</userinput
0264 >), división (<userinput
0265 >/</userinput
0266 >) e potencia(<userinput
0267 > ^ </userinput
0268 >).</para>
0269 
0270 <para
0271 >Este é un exemplo das operacións matemáticas que podes usar no &turtlescript;: <screen>
0272 $suma      = 1 + 1
0273 $resta      = 20 - 5
0274 $multiplica= 15*2
0275 $divide    = 30 / 30
0276 $repite    = 2 ^ 2
0277 </screen
0278 > Os resultados das operacións matemáticas <link linkend="assignment-of-variables"
0279 >asígnanse</link
0280 > a <link linkend="assignment-of-variables"
0281 >variábeis</link
0282 >. Mediante o <link linkend="the-inspector"
0283 >inspector</link
0284 > pode consultalas.</para>
0285 <para
0286 >Se só ques facer un cálculo simples podes facer algo como isto: <screen
0287 >escribe 2010-12
0288 </screen
0289 ></para>
0290 <para
0291 >Agora un exemplo con parénteses: <screen>
0292 escribe ( (20 - 5) * 2 / 30 ) + 1
0293 </screen
0294 > 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. Os parénteses tamén se poden usar noutros casos.</para>
0295 <para
0296 >&kturtle; tamén ten funcionalidades matemáticas máis avanzadas entre as súas ordes. Bótalle un ollo ás seguintes ordes, pero ten en conta que son operacións avnzadas: <link linkend="round"
0297 >redondea</link
0298 >, <link linkend="random"
0299 >aleatorio</link
0300 >, <link linkend="sqrt"
0301 >raiz</link
0302 >, <link linkend="pi"
0303 >pi</link
0304 >, <link linkend="sin"
0305 >seno</link
0306 >, <link linkend="cos"
0307 >coseno</link
0308 >, <link linkend="tan"
0309 >tanxente</link
0310 >, <link linkend="arcsin"
0311 >arcoseno</link
0312 >, <link linkend="arccos"
0313 >arcocoseno</link
0314 >, <link linkend="arctan"
0315 >arcotanxente</link
0316 >.</para>
0317 </sect2>
0318 
0319 <sect2 id="boolean-operators">
0320 <title
0321 >Operacións lóxicas (certo/falso)</title>
0322 <para
0323 >Mentres que as <link linkend="mathematical-operators"
0324 >operacións matemáticas</link
0325 > son principalmente para <link linkend="number"
0326 >números</link
0327 >, as lóxicas sono para <link linkend="boolean-value"
0328 >valores lóxicos</link
0329 > (<userinput
0330 >certo</userinput
0331 > e <userinput
0332 >falso</userinput
0333 >). Só hai tres operacións lóxicas: <userinput
0334 >e</userinput
0335 ><indexterm
0336 ><primary
0337 >e</primary
0338 ></indexterm
0339 >, <userinput
0340 >ou</userinput
0341 ><indexterm
0342 ><primary
0343 >ou</primary
0344 ></indexterm
0345 >, e <userinput
0346 >non</userinput
0347 ><indexterm
0348 ><primary
0349 >non</primary
0350 ></indexterm
0351 >. Este retallo de &turtlescript; mostra como usalos: <screen
0352 > $e_1_1 = certo e certo    # -> certo
0353 $e_1_0 = certo e falso              # -> falso
0354 $e_0_1 = falso e falso                        # -> falso
0355 $e_0_0 = falso e falso                        # -> falso
0356 
0357 $ou_1_1 = certo ou certo # -> certo
0358 $ou_1_0 = certo ou falso           # -> certo
0359 $ou_0_1 = falso ou certo           # -> certo
0360 $ou_0_0 = falso ou falso                     # -> falso
0361 n$non_1 = non certo   # -> falso
0362 $non_0 = non falso             # -> certo
0363 </screen
0364 > Usando o <link linkend="the-inspector"
0365 >inspector</link
0366 > pode consultar os valores,  aínda que poñemos os resultados nos comentarios ao final das liñas. <userinput
0367 >e</userinput
0368 >  dá <userinput
0369 >certo</userinput
0370 > só se ambos os dous lados son <userinput
0371 >certo</userinput
0372 >. <userinput
0373 >ou</userinput
0374 > dá <userinput
0375 >certo</userinput
0376 > se algún dos lados é <userinput
0377 >certo</userinput
0378 >. E <userinput
0379 >non</userinput
0380 > converte un <userinput
0381 >certo</userinput
0382 > nun <userinput
0383 >falso</userinput
0384 > e un <userinput
0385 >falso</userinput
0386 > nun <userinput
0387 >certo</userinput
0388 >.</para>
0389 <para
0390 >A operacións lóxicas <glossterm
0391 >reálzanse</glossterm
0392 > en rosa.</para>
0393 
0394 <sect3 id="boolean-operators-advanced-examples">
0395 <title
0396 >Algúns exemplos máis avanzados</title>
0397 <para
0398 >Considera o seguinte exemplo con <userinput
0399 >e</userinput
0400 >: <screen>
0401 $a = 1
0402 $b = 5
0403 se ( ($a &lt; 10) e ($b == 5) ) e ($a &lt; $b) {
0404   escribe "Olá"
0405 }
0406 </screen
0407 > Neste retallo de &turtlescript; o resultado de tres <link linkend="comparing-operators"
0408 >operacións de comparación</link
0409 > xúntase mediante operacións <userinput
0410 >e</userinput
0411 >. Isto significa que os tres deben dar «certo» para que se escriba «Olá».</para>
0412 
0413 <para
0414 >Un exemplo con <userinput
0415 >ou</userinput
0416 >:<screen>
0417 %n = 1
0418 se ($n &lt; 10) ou ($n == 2) {
0419   escribe "Olá"
0420 }
0421 </screen
0422 > Neste retallo de &turtlescript; o lado da esquerda do <userinput
0423 >ou</userinput
0424 > avalíase como «certo» e o da dereira a «falso». Xa que un dos lados do operador <userinput
0425 >ou</userinput
0426 > é «certo», o operador <userinput
0427 >ou</userinput
0428 > avalíase como «certo», en consecuencia escríbese «Olá».</para>
0429 
0430 <para
0431 >E finalmente un exemplo con <userinput
0432 >non</userinput
0433 >, que troca  para «certo» por «falso» e «falso» por «certo». Mira: <screen
0434 >$n = 1
0435 se non ($n == 3) {
0436   escribe "Olá"
0437 } senon {
0438   escribe "non olá ;-)"
0439 }
0440 </screen
0441 ></para>
0442 </sect3>
0443 </sect2>
0444 
0445 <sect2 id="comparing-operators">
0446 <title
0447 >Operacións de comparación</title>
0448 <para
0449 >Considera esa sinxela comparación: <screen>
0450 $resposta = 10 &gt; 3
0451 </screen
0452 > Aquí compárase<userinput
0453 >10</userinput
0454 > con <userinput
0455 >3</userinput
0456 > mediante o operador «maior que».
0457 O resultado desta comparación, o <link linkend="boolean-value"
0458 >valor lóxico</link
0459 > <userinput
0460 >certo</userinput
0461 > gárdase na <link linkend="assignment-of-variables"
0462 >variábel</link
0463 > <userinput
0464 >$resposta</userinput
0465 >.</para>
0466 <para
0467 >Os <link linkend="number"
0468 >números</link
0469 > e as <link linkend="assignment-of-variables"
0470 >variábeis</link
0471 > (que conteñen  números) poden compararse entre si mediante operacións de comparación.</para>
0472 <para
0473 >Este son todas as operacións de comparación: <table
0474 > <title
0475 >Tipos de preguntas</title
0476 > <tgroup cols="3"
0477 > <tbody
0478 > <row
0479 > <entry
0480 ><userinput
0481 >$A == $B</userinput
0482 ></entry
0483 > <entry
0484 >é igual a</entry
0485 > <entry
0486 >a resposta é <quote
0487 >certo</quote
0488 > se <userinput
0489 >$A</userinput
0490 > conté o mesmo valor que <userinput
0491 >$B</userinput
0492 ></entry
0493 > </row
0494 > <row
0495 > <entry
0496 ><userinput
0497 >$A != $B</userinput
0498 ></entry
0499 > <entry
0500 >é diferente de </entry
0501 > <entry
0502 >a resposta é <quote
0503 >certo</quote
0504 > se <userinput
0505 >$A</userinput
0506 > non é igual que <userinput
0507 >$B</userinput
0508 ></entry
0509 > </row
0510 > <row
0511 > <entry
0512 ><userinput
0513 >$A &gt; $B</userinput
0514 ></entry
0515 > <entry
0516 >maior que</entry
0517 > <entry
0518 >a resposta é <quote
0519 >certo</quote
0520 > se <userinput
0521 >$A</userinput
0522 > é maior que <userinput
0523 >$B</userinput
0524 ></entry
0525 > </row
0526 > <row
0527 > <entry
0528 ><userinput
0529 >$A &lt; $B</userinput
0530 ></entry
0531 > <entry
0532 >menor que</entry
0533 > <entry
0534 >a resposta é  <quote
0535 >certo</quote
0536 > se <userinput
0537 >$A</userinput
0538 > é menor que <userinput
0539 >$B</userinput
0540 ></entry
0541 > </row
0542 > <row
0543 > <entry
0544 ><userinput
0545 >$A &gt;= $B</userinput
0546 ></entry
0547 > <entry
0548 >maior ou igual que</entry
0549 > <entry
0550 >a resposta é <quote
0551 >certo</quote
0552 > se <userinput
0553 >$A</userinput
0554 > é maior que ou igual a <userinput
0555 >$B</userinput
0556 ></entry
0557 > </row
0558 > <row
0559 > <entry
0560 ><userinput
0561 >$A &lt;= $B</userinput
0562 ></entry
0563 > <entry
0564 >menor ou igual que</entry
0565 > <entry
0566 >a resposta é <quote
0567 >certo</quote
0568 > se <userinput
0569 >$A</userinput
0570 > é menor que ou igual a  <userinput
0571 >$B</userinput
0572 ></entry
0573 > </row
0574 > </tbody
0575 > </tgroup
0576 > </table
0577 > Lembra que $A e $B teñen que ser <link linkend="number"
0578 >números</link
0579 > ou <link linkend="assignment-of-variables"
0580 >variábeis</link
0581 > que conteñan númeors.</para>
0582 </sect2>
0583 
0584 
0585 </sect1>
0586 
0587 
0588 
0589 <sect1 id="commands">
0590 <title
0591 >Ordes</title>
0592 <para
0593 >Mediante as ordes pode dicirlle ao sapoconcho de &kturtle; que faga algo. Algunhas ordes precisan de parámetros, outras xeran un resultado. Nesta sección explicamos todas as ordes que veñen de serie no &kturtle;. Ademáis, mediante a orde <link linkend="learn"
0594 >define</link
0595 > pode crear as súas propias ordes. As ordes de serie que se explican aquí <glossterm
0596 >reálzanse</glossterm
0597 > en azul escuro.</para>
0598 
0599 <sect2 id="moving-the-turtle">
0600 <title
0601 >Mover o sapoconcho</title>
0602 <para
0603 >Hai varias ordes que moven o sapoconcho pola pantalla.</para>
0604 
0605   <variablelist>
0606     <anchor id="forward"/>
0607     <varlistentry
0608 > 
0609       <term
0610 >avanza (av)<indexterm
0611 ><primary
0612 >avanza (av)</primary
0613 ></indexterm
0614 ></term>
0615       <listitem
0616 ><para
0617 ><screen
0618 >avanza X</screen
0619 ><userinput
0620 >avanza</userinput
0621 > move o sapoconcho cara diante X píxeles. Cando o lapis está pousado deixará un rastro. <userinput
0622 >avanza</userinput
0623 > pode abreviarse como <userinput
0624 >av</userinput
0625 ></para
0626 ></listitem>
0627     </varlistentry>
0628   </variablelist>
0629   <variablelist>
0630     <anchor id="backward"/>
0631     <varlistentry
0632 >  
0633       <term
0634 >retrocede (re)<indexterm
0635 ><primary
0636 >retrocede (re)</primary
0637 ></indexterm
0638 ></term>
0639       <listitem
0640 ><para
0641 ><screen
0642 >retrocede X</screen
0643 ><userinput
0644 >retrocede</userinput
0645 > move o sapoconcho cara atrás X píxeles. Se o lapis está pousado deixará un rastro. <userinput
0646 >retrocede</userinput
0647 > pode abreviarse como <userinput
0648 >re</userinput
0649 >.</para
0650 ></listitem>
0651     </varlistentry>
0652   </variablelist>
0653   <variablelist>
0654     <anchor id="turnleft"/>
0655     <varlistentry
0656 > 
0657       <term
0658 >xiraesquerda (xe)<indexterm
0659 ><primary
0660 >xiraesquerda (xe)</primary
0661 ></indexterm
0662 ></term>
0663       <listitem
0664 ><para
0665 ><screen
0666 >xiraesquerda X</screen
0667 ><userinput
0668 >xiraesquerda</userinput
0669 > ordénalle ao sapoconcho que xire X graus á esquerda. <userinput
0670 >xiraesquerda</userinput
0671 > pode abreviarse como <userinput
0672 >xe</userinput
0673 >.</para
0674 ></listitem>
0675     </varlistentry>
0676   </variablelist>
0677   <variablelist>
0678     <anchor id="turnright"/>
0679     <varlistentry
0680 > 
0681       <term
0682 >xiradereita (xd)<indexterm
0683 ><primary
0684 >xiradereita (xd)</primary
0685 ></indexterm
0686 ></term>
0687       <listitem
0688 ><para
0689 ><screen
0690 >xiradereita X</screen
0691 ><userinput
0692 >xiradereita</userinput
0693 > ordénalle ao sapoconcho que xire X graus á dereita. <userinput
0694 >xiradereita</userinput
0695 > pode abreviarse como <userinput
0696 >xd</userinput
0697 >.</para
0698 ></listitem>
0699     </varlistentry>
0700   </variablelist>
0701   <variablelist>
0702     <anchor id="direction"/>
0703     <varlistentry
0704 > 
0705       <term
0706 >direccion (dir)<indexterm
0707 ><primary
0708 >direccion (dir)</primary
0709 ></indexterm
0710 ></term>
0711       <listitem
0712 ><para
0713 ><screen
0714 >direccion X</screen
0715 ><userinput
0716 >direccion</userinput
0717 > fai que o sapoconcho tome unha ruta a X graus do cero, polo que non é relativa á anterior ruta que seguise o sapoconcho. <userinput
0718 >direccion</userinput
0719 > pode abreviarse como <userinput
0720 >dir</userinput
0721 >.</para
0722 ></listitem>
0723     </varlistentry>
0724   </variablelist>
0725   <variablelist>
0726     <anchor id="getdirection"/>
0727     <varlistentry
0728 > 
0729       <term
0730 >obtendireccion<indexterm
0731 ><primary
0732 >obtendireccion</primary
0733 ></indexterm
0734 ></term>
0735       <listitem
0736 ><para
0737 ><screen
0738 >obtendireccion</screen
0739 ><userinput
0740 >obtendireccion</userinput
0741 > devolve a dirección na que mira a tartaruga como unha cantidade de graus contados desde arriba.</para
0742 ></listitem>
0743     </varlistentry>
0744   </variablelist>
0745   <variablelist>
0746     <anchor id="center"/>
0747     <varlistentry
0748 > 
0749       <term
0750 >vaiamedio<indexterm
0751 ><primary
0752 >vaimedio</primary
0753 ></indexterm
0754 ></term>
0755       <listitem
0756 ><para
0757 ><screen
0758 >vaimedio</screen
0759 ><userinput
0760 >vaiamedio</userinput
0761 > leva o sapoconcho ao centro do lenzo.</para
0762 ></listitem>
0763     </varlistentry>
0764   </variablelist>
0765   <variablelist>
0766     <anchor id="go"/>
0767     <varlistentry
0768 > 
0769       <term
0770 >vai<indexterm
0771 ><primary
0772 >vai</primary
0773 ></indexterm
0774 ></term>
0775       <listitem
0776 ><para
0777 ><screen
0778 >vai X,Y</screen
0779 ><userinput
0780 >vai</userinput
0781 > fai que o sapoconcho vaia a un lugar concreto do lenzo. Este lugar está a X <glossterm linkend="pixels"
0782 >píxeles</glossterm
0783 > da beira esquerda do lenzo e a Y <glossterm linkend="pixels"
0784 >píxeles</glossterm
0785 > da parte de riba do lenzo.</para
0786 ></listitem>
0787     </varlistentry>
0788   </variablelist>
0789   <variablelist>
0790     <anchor id="gox"/>
0791     <varlistentry
0792 > 
0793       <term
0794 >vaix<indexterm
0795 ><primary
0796 >vaix (vx)</primary
0797 ></indexterm
0798 ></term>
0799       <listitem
0800 ><para
0801 ><screen
0802 >vaix X</screen
0803 ><userinput
0804 >vaix</userinput
0805 > fai que o sapoconcho vaia a unha posición situada a X <glossterm linkend="pixels"
0806 >píxeles</glossterm
0807 > do borde esquerdo do lenzo sen desprazarse en altura. <userinput
0808 >vaix</userinput
0809 > pode abreviarse com <userinput
0810 >vx</userinput
0811 >.</para
0812 ></listitem>
0813     </varlistentry>
0814   </variablelist>
0815   <variablelist>
0816     <anchor id="goy"/>
0817     <varlistentry
0818 > 
0819       <term
0820 >vaiy<indexterm
0821 ><primary
0822 >vaiy (vy)</primary
0823 ></indexterm
0824 ></term>
0825       <listitem
0826 ><para
0827 ><screen
0828 >vaiy Y</screen
0829 ><userinput
0830 >vaiy</userinput
0831 > fai que o sapoconcho vaia a unha posición situada a Y <glossterm linkend="pixels"
0832 >píxeles</glossterm
0833 > do cume do lenzo sen desprazarse en horizontal. <userinput
0834 >vaiy</userinput
0835 > pode abreviarse como <userinput
0836 >vy</userinput
0837 >.</para
0838 ></listitem>
0839     </varlistentry>
0840   </variablelist>
0841   <note
0842 ><para
0843 >Cando se utilizan as ordes <userinput
0844 >vai</userinput
0845 >, <userinput
0846 >vaix</userinput
0847 >, <userinput
0848 >vaiy</userinput
0849 > e <userinput
0850 >vaimedio</userinput
0851 > o sapoconcho non debuxa a liña, con independencia de que o lapis estea erguido ou pousado.</para>
0852   </note>
0853 </sect2>
0854 
0855 <sect2 id="locate-the-turtle">
0856 <title
0857 >Onde está o sapoconcho?</title>
0858 <para
0859 >Hai dúas ordes que din a posición do sapoconcho na pantalla.</para>
0860 
0861   <variablelist>
0862     <anchor id="getx"/>
0863     <varlistentry
0864 > 
0865       <term
0866 >coordenadaX<indexterm
0867 ><primary
0868 >coordenadax</primary
0869 ></indexterm
0870 ></term>
0871       <listitem
0872 ><para
0873 ><userinput
0874 >coordenadax</userinput
0875 > devolve a cantidade de píxeles que hai desde a esquerda do lenzo ata a posición do sapoconcho.</para
0876 ></listitem>
0877     </varlistentry>
0878   </variablelist>
0879   <variablelist>
0880     <anchor id="gety"/>
0881     <varlistentry
0882 > 
0883       <term
0884 >coordenaday<indexterm
0885 ><primary
0886 >coordenaday</primary
0887 ></indexterm
0888 ></term>
0889       <listitem
0890 ><para
0891 ><userinput
0892 >coordenaday</userinput
0893 > devolve a cantidade de píxeles que hai do cume do lenzo ata a posición do sapoconcho.</para
0894 ></listitem>
0895     </varlistentry>
0896   </variablelist>
0897 </sect2>
0898 
0899 <sect2 id="pen">
0900 <title
0901 >O sapoconcho ten un lapis</title>
0902 <para
0903 >O sapoconcho ten un lapis que debuxa unha liña a medida que se move o animal. Hai unhas poucas ordes que controlan este lapis. Nesta sección explicarémolas.</para>
0904   <variablelist>
0905     <anchor id="penup"/>
0906     <varlistentry
0907 > 
0908       <term
0909 >subelapis (sl)<indexterm
0910 ><primary
0911 >subelapis (sl)</primary
0912 ></indexterm
0913 ></term>
0914       <listitem
0915 ><para
0916 ><screen
0917 >subelapis</screen
0918 ><userinput
0919 >subelapis</userinput
0920 > separa o lapis do lenzo. Cando o lapis está <quote
0921 >subido</quote
0922 > non se debuxan liñas ao moverse o sapoconcho. Consulta tamén <userinput
0923 >baixalapis</userinput
0924 >. <userinput
0925 >subelapis</userinput
0926 > pode abreviarse como <userinput
0927 >sl</userinput
0928 >.</para
0929 ></listitem>
0930     </varlistentry>
0931   </variablelist>
0932   <variablelist>
0933     <anchor id="pendown"/>
0934     <varlistentry
0935 > 
0936       <term
0937 >baixalapis (bl)<indexterm
0938 ><primary
0939 >baixalapis (bl)</primary
0940 ></indexterm
0941 ></term>
0942       <listitem
0943 ><para
0944 ><screen
0945 >baixalapis</screen
0946 ><userinput
0947 >baixalapis</userinput
0948 > pousa o lapis no lenzo. Cando o lapis está <quote
0949 >baixado</quote
0950 > debúxanse liñas cando se move o sapoconcho. Consulta tamén <userinput
0951 >subelapis</userinput
0952 >. <userinput
0953 >baixalapis</userinput
0954 > pode abreviarse como <userinput
0955 >bl</userinput
0956 >.</para
0957 ></listitem>
0958     </varlistentry>
0959   </variablelist>
0960   <variablelist>
0961     <anchor id="setpenwidth"/>
0962     <varlistentry
0963 > 
0964       <term
0965 >ancholapis (al)<indexterm
0966 ><primary
0967 >ancholapis (al)</primary
0968 ></indexterm
0969 ></term>
0970       <listitem
0971 ><para
0972 ><screen
0973 >ancholapis X</screen
0974 ><userinput
0975 >ancholapis</userinput
0976 > estabelece o grosor do trazo co valor de X <glossterm linkend="pixels"
0977 >píxeles</glossterm
0978 >. <userinput
0979 >ancholapis</userinput
0980 > pode abreviarse como <userinput
0981 >al</userinput
0982 >.</para
0983 ></listitem>
0984     </varlistentry>
0985   </variablelist>
0986   <variablelist>
0987     <anchor id="setfgcolor"/>
0988     <varlistentry
0989 > 
0990       <term
0991 >corlapis (cl)<indexterm
0992 ><primary
0993 >corlapis (cl)</primary
0994 ></indexterm
0995 ></term>
0996       <listitem
0997 ><para
0998 ><screen
0999 >corlapis R,G,B</screen
1000 ><userinput
1001 >corlapis</userinput
1002 > estabelece a cor do trazo. <userinput
1003 >corlapis</userinput
1004 > toma como parámetro unha <glossterm linkend="rgb"
1005 >combinación RGB</glossterm
1006 >. <userinput
1007 >corlapis</userinput
1008 > code abreviarse como <userinput
1009 >cl</userinput
1010 >.</para
1011 ></listitem>
1012     </varlistentry>
1013   </variablelist>
1014 </sect2>
1015 
1016 <sect2 id="canvas">
1017 <title
1018 >Ordes para controlar o lenzo</title>
1019 <para
1020 >Hai varias ordes que controlan o lenzo.</para>
1021   <variablelist>
1022     <anchor id="resizecanvas"/>
1023     <varlistentry>
1024       <term
1025 >tamañolenzo (tlz)<indexterm
1026 ><primary
1027 >tamañolenzo (tlz)</primary
1028 ></indexterm
1029 ></term>
1030       <listitem
1031 ><para
1032 ><screen
1033 >tamañolenzo X,Y</screen
1034 >Mediante a orde <userinput
1035 >tamañolenzo</userinput
1036 > pode axustar o tamaño da área. Toma X e Y como entradas, onde X é a nova anchura do lenzo en <glossterm linkend="pixels"
1037 >píxeles</glossterm
1038 > e Y é a nova altura en <glossterm linkend="pixels"
1039 >píxeles</glossterm
1040 >. <userinput
1041 >tamañolenzo</userinput
1042 > pode abreviarse como <userinput
1043 >tlz</userinput
1044 >.</para
1045 ></listitem>
1046     </varlistentry>
1047   </variablelist>
1048   <variablelist>
1049     <anchor id="setbgcolor"/>
1050     <varlistentry
1051 > 
1052       <term
1053 >corlenzo (clz)<indexterm
1054 ><primary
1055 >corlenzo (clz)</primary
1056 ></indexterm
1057 ></term>
1058       <listitem
1059 ><para
1060 ><screen
1061 >corlenzo R,G,B</screen
1062 ><userinput
1063 >corlenzo</userinput
1064 > estabelece a cor do lenzo. <userinput
1065 >corlenzo</userinput
1066 > toma unha <glossterm linkend="rgb"
1067 >combinación RGB</glossterm
1068 > como entrada. <userinput
1069 >corlenzo</userinput
1070 > pode abreviarse como <userinput
1071 >clz</userinput
1072 >.</para
1073 ></listitem>
1074     </varlistentry>
1075   </variablelist>
1076 </sect2>
1077 
1078 <sect2 id="clean">
1079 <title
1080 >Ordes para limpar</title>
1081 <para
1082 >Hai dúas ordes para limpar o lenzo cando o emborrona.</para>
1083   <variablelist>
1084     <anchor id="clear"/>
1085     <varlistentry
1086 > 
1087       <term
1088 >borra (br)<indexterm
1089 ><primary
1090 >borra (br)</primary
1091 ></indexterm
1092 ></term>
1093       <listitem
1094 ><para
1095 ><screen
1096 >borra</screen
1097 >Con <userinput
1098 >borra</userinput
1099 > pode limpar todos os debuxos do lenzo. As demais cousas quedan: a posición, dirección e visibilidade do sapoconcho, e a cor e o tamaño do lenzo.</para
1100 ></listitem>
1101     </varlistentry>
1102   </variablelist>
1103   <variablelist>
1104     <anchor id="reset"/>
1105     <varlistentry
1106 > 
1107       <term
1108 >reinicia<indexterm
1109 ><primary
1110 >reinicia</primary
1111 ></indexterm
1112 ></term>
1113       <listitem
1114 ><para
1115 ><screen
1116 >reinicia</screen
1117 ><userinput
1118 >reinicia</userinput
1119 > limpa máis a fondo do que o fai a orde <userinput
1120 >borra</userinput
1121 >. Despois de executar unha orde <userinput
1122 >reinicia</userinput
1123 > todo volve 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
1124 ></listitem>
1125     </varlistentry>
1126   </variablelist>
1127 </sect2>
1128 
1129 <sect2 id="sprites">
1130 <title
1131 >O sapoconcho é un sprite</title>
1132 <para
1133 >Os sprites son pequenas imaxes que se poden mover pola pantalla, como se ve nos xogos de computador. O noso animaliño tamén é un sprite. Para saber máis sobre isto, consulte a entrada <glossterm linkend="sprites"
1134 >sprites</glossterm
1135 > no glosario. </para>
1136 <para
1137 >A continuación atopará un resumo completo de todas as ordes que traballan sobre sprites.</para>
1138 <para
1139 >[A versión actual de &kturtle; aínda non permite utilizar outros sprites que non sexan o sapoconcho. En versións futuras poderá cambialo por un deseño seu]</para>
1140   <variablelist>
1141     <anchor id="spriteshow"/>
1142     <varlistentry
1143 > 
1144       <term
1145 >mostrasprite (ms)<indexterm
1146 ><primary
1147 >agochasprite (as)</primary
1148 ></indexterm
1149 ></term>
1150       <listitem
1151 ><para
1152 ><screen
1153 >mostrasprite</screen
1154 ><userinput
1155 >mostrasprite</userinput
1156 > fai visíbel o sapoconcho se antes se agochou. <userinput
1157 >mostrasprite</userinput
1158 > pode abreviarse como <userinput
1159 >ms</userinput
1160 >.</para
1161 ></listitem>
1162     </varlistentry>
1163   </variablelist>
1164   <variablelist>
1165     <anchor id="spritehide"/>
1166     <varlistentry
1167 > 
1168       <term
1169 >agochasprite (as)<indexterm
1170 ><primary
1171 >agochasprite (as)</primary
1172 ></indexterm
1173 ></term>
1174       <listitem
1175 ><para
1176 ><screen
1177 >agochasprite</screen
1178 ><userinput
1179 >agochasprite</userinput
1180 > agocha o sapoconcho. Isto pode empregarse se o animal non couber no debuxo. <userinput
1181 >agochasprite</userinput
1182 > pode abreviarse como <userinput
1183 >as</userinput
1184 >.</para
1185 ></listitem>
1186     </varlistentry>
1187   </variablelist>
1188 </sect2>
1189 
1190 <sect2 id="writing">
1191 <title
1192 >Pode escribir o sapoconcho?</title>
1193 <para
1194 >A resposta é: <quote
1195 >pode</quote
1196 >. A tartaruga pode escribir, e escribirá case calquera cousa que lle ordene.</para>
1197   <variablelist>
1198     <anchor id="print"/>
1199     <varlistentry
1200 > 
1201       <term
1202 >escribe<indexterm
1203 ><primary
1204 >escribe</primary
1205 ></indexterm
1206 ></term>
1207       <listitem
1208 ><para
1209 ><screen
1210 >escribe X</screen
1211 >A orde <userinput
1212 >escribe</userinput
1213 > ordéalle ao sapoconcho que escriba algo no lenzo. <userinput
1214 >escribe</userinput
1215 > pode tomar textos e números como parámetros. Pode <userinput
1216 >escribe</userinput
1217 >r varios números e cadeas mediante o símbolo <quote
1218 >+</quote
1219 >. Aquí vai un exemplo: <screen
1220 >$ano = 2021
1221 $autor = "Aroa"
1222 escribe $autor + " debuxou unha nora en KTurtle no ano" + $ano + " e gustoulle moito!"
1223 </screen>
1224       </para
1225 ></listitem>
1226     </varlistentry>
1227   </variablelist>
1228   <variablelist>
1229     <anchor id="fontsize"/>
1230     <varlistentry
1231 > 
1232       <term
1233 >tamañoletra<indexterm
1234 ><primary
1235 >tamañoletra</primary
1236 ></indexterm
1237 ></term>
1238       <listitem
1239 ><para
1240 ><screen
1241 >tamañoletra X</screen
1242 ><userinput
1243 >tamañoletra</userinput
1244 > modifica o tamaño de letra utilizado ao <userinput
1245 >escribe</userinput
1246 >r. <userinput
1247 >tamañoletra</userinput
1248 > toma un argumento numérico. O tamaño indícase en <glossterm linkend="pixels"
1249 >píxeles</glossterm
1250 >.</para
1251 ></listitem>
1252     </varlistentry>
1253   </variablelist>
1254 </sect2>
1255 
1256 <sect2 id="math-commands">
1257 <title
1258 >Ordes matemáticas</title>
1259 <para
1260 >As seguintes ordes son as máis avanzadas de &kturtle; para matemáticas.</para>
1261   <variablelist>
1262     <anchor id="round"/>
1263     <varlistentry>
1264       <term
1265 >redondea<indexterm
1266 ><primary
1267 >redondea</primary
1268 ></indexterm
1269 ></term>
1270       <listitem
1271 ><para
1272 ><screen
1273 >redondea X</screen
1274 ><userinput
1275 >redondea</userinput
1276 > o número indicado ao enteiro máis próximo. <screen>
1277 escribe redondea 10.8
1278 avanza 20
1279 escribe redondea 10.3
1280 avanza 20
1281 </screen
1282 > Con este código o sapoconcho escribirá os números 11 e 10. </para
1283 ></listitem>
1284     </varlistentry>
1285   </variablelist>
1286   <variablelist>
1287     <anchor id="random"/>
1288     <varlistentry
1289 > 
1290       <term
1291 >aleatorio (alea)<indexterm
1292 ><primary
1293 >aleatorio (alea)</primary
1294 ></indexterm
1295 ></term>
1296       <listitem
1297 ><para
1298 ><screen
1299 >aleatorio X,Y</screen
1300 ><userinput
1301 >aleatorio</userinput
1302 > é unha orde 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>
1303 repite 500 {
1304   $x = aleatorio 1,20
1305   avanza $x
1306   xiraesquerda 10 - $x
1307 }
1308 </screen
1309 > Mediante a orde <userinput
1310 >aleatorio</userinput
1311 > pode introducir algo de caos no programa.</para
1312 ></listitem>
1313     </varlistentry>
1314   </variablelist>
1315   <variablelist>
1316     <anchor id="mod"/>
1317     <varlistentry
1318 > 
1319       <term
1320 >mod<indexterm
1321 ><primary
1322 >mod</primary
1323 ></indexterm
1324 ></term>
1325       <listitem
1326 ><para
1327 ><screen
1328 >mod X,Y</screen
1329 ><userinput
1330 >mod</userinput
1331 > devolve o resto da división do primeiro número entre o segundo.</para
1332 ></listitem>
1333     </varlistentry>
1334   </variablelist>
1335   <variablelist>
1336     <anchor id="sqrt"/>
1337     <varlistentry
1338 > 
1339       <term
1340 >raiz<indexterm
1341 ><primary
1342 >raiz</primary
1343 ></indexterm
1344 ></term>
1345       <listitem
1346 ><para
1347 ><screen
1348 >raiz X</screen
1349 >A orde <userinput
1350 >raiz</userinput
1351 > devolve a raíz cuadrada do argumento.</para
1352 ></listitem>
1353     </varlistentry>
1354   </variablelist>
1355 <!--
1356   <variablelist>
1357     <anchor id="exp"/>
1358     <varlistentry
1359 > 
1360       <term
1361 >exp<indexterm
1362 ><primary
1363 >exp</primary
1364 ></indexterm
1365 ></term>
1366       <listitem
1367 ><para
1368 ><screen
1369 >sqrt X</screen>
1370       </para
1371 ></listitem>
1372     </varlistentry>
1373   </variablelist>
1374 -->
1375   <variablelist>
1376     <anchor id="pi"/>
1377     <varlistentry
1378 > 
1379       <term
1380 >pi<indexterm
1381 ><primary
1382 >pi</primary
1383 ></indexterm
1384 ></term>
1385       <listitem
1386 ><para
1387 ><screen
1388 >pi</screen
1389 >Esta orde devolve a constante Pi, <userinput
1390 >3.14159</userinput
1391 >.</para
1392 ></listitem>
1393     </varlistentry>
1394   </variablelist>
1395   <variablelist>
1396     <anchor id="sin"/>
1397     <anchor id="cos"/>
1398     <anchor id="tan"/>
1399     <varlistentry>
1400       <term
1401 >seno<indexterm
1402 ><primary
1403 >seno</primary
1404 ></indexterm
1405 >, coseno<indexterm
1406 ><primary
1407 >coseno</primary
1408 ></indexterm
1409 >, tanxente<indexterm
1410 ><primary
1411 >tanxente</primary
1412 ></indexterm
1413 ></term>
1414       <listitem
1415 ><para>
1416 <screen
1417 >seno X
1418 coseno X
1419 tanxente X
1420 </screen
1421 >Estas tres ordes representan as famosas funcións trigonométricas <userinput
1422 >seno</userinput
1423 >, <userinput
1424 >coseno</userinput
1425 > e <userinput
1426 >tanxente</userinput
1427 >. O argumento destas tres ordes, X, é un <link linkend="number"
1428 >número</link
1429 >.</para
1430 ></listitem>
1431     </varlistentry>
1432   </variablelist>
1433   <variablelist>
1434     <anchor id="arcsin"/>
1435     <anchor id="arccos"/>
1436     <anchor id="arctan"/>
1437     <varlistentry>
1438       <term
1439 >arcoseno<indexterm
1440 ><primary
1441 >arcoseno</primary
1442 ></indexterm
1443 >, arcocoseno<indexterm
1444 ><primary
1445 >arccoseno</primary
1446 ></indexterm
1447 >, arcotanxente<indexterm
1448 ><primary
1449 >arcotanxente</primary
1450 ></indexterm
1451 ></term>
1452       <listitem
1453 ><para>
1454 <screen
1455 >aroceion X
1456 arcocoseno X
1457 arcotanxente X
1458 </screen
1459 >Estas ordes son as funcións inversar de<link linkend="sin"
1460 >seno</link
1461 >, <link linkend="cos"
1462 >coseno</link
1463 > e <link linkend="tan"
1464 >tanxente</link
1465 >. O argumento, X, é un <link linkend="number"
1466 >número</link
1467 >.</para
1468 ></listitem>
1469     </varlistentry>
1470   </variablelist>
1471 </sect2>
1472 
1473 <sect2 id="dialogs">
1474 <title
1475 >Introdución de datos e obtención de resultados mediante diálogos</title>
1476 <para
1477 >Un diálogo é unha pequena xanela emerxente que lle fornece algo de información ou que lle pide algún dato. &kturtle; ten dúas ordes para diálogos, que son: <userinput
1478 >mostra</userinput
1479 > e <userinput
1480 >pregunta</userinput
1481 ></para>
1482   <variablelist>
1483     <anchor id="message"/>
1484     <varlistentry
1485 > 
1486       <term
1487 >mostra<indexterm
1488 ><primary
1489 >mostra</primary
1490 ></indexterm
1491 ></term>
1492       <listitem
1493 ><para
1494 ><screen
1495 >mostra X</screen
1496 >A orde <userinput
1497 >mostra</userinput
1498 > toma un <link linkend="string"
1499 >texto</link
1500 > como entrada, e mostra un diálogo que contén o <link linkend="string"
1501 >texto</link
1502 >. <screen
1503 >mostra "Brandán debuxou unha nora en KTurtle no ano 2021 e gustoulle moito!"
1504 </screen>
1505       </para
1506 ></listitem>
1507     </varlistentry>
1508   </variablelist>
1509   <variablelist>
1510     <anchor id="ask"/>
1511     <varlistentry
1512 > 
1513       <term
1514 >pregunta<indexterm
1515 ><primary
1516 >pregunta</primary
1517 ></indexterm
1518 ></term>
1519       <listitem
1520 ><para
1521 ><screen
1522 >pregunta X</screen
1523 ><userinput
1524 >pregunta</userinput
1525 > toma un <link linkend="string"
1526 >texto</link
1527 > como entrada. Mostra un diálogo que contén o texto, como fai <link linkend="message"
1528 >mostra</link
1529 >, pero ademais tamén pon un campo de texto no diálogo. Mediante este campo o usuario pode introducir un <link linkend="number"
1530 >número</link
1531 > ou un <link linkend="string"
1532 >texto</link
1533 >, que pode gardar nunha <link linkend="assignment-of-variables"
1534 >variábel</link
1535 > ou pasar como argumento a unha <link linkend="commands"
1536 >orde</link
1537 >. Por exemplo <screen>
1538 $idade = pregunta "Cantos anos tes?"
1539 $resultado = 2003 - $idade
1540 escribe "En 2003 tiñas " + $resultado + " anos."</screen>
1541 Cando un usuario cancela o diálogo de pergunta, ou non insere nada, a <link linkend="assignment-of-variables"
1542 >variábel</link
1543 > estará baleira.</para
1544 ></listitem>
1545     </varlistentry>
1546   </variablelist>
1547 </sect2>
1548 
1549 </sect1>
1550 
1551 
1552 
1553 <sect1 id="assignment-of-variables">
1554 <title
1555 >Asignación de variábeis</title>
1556 <para
1557 >Primeiro vexamos o que son as variábeis, logo como asignarlles valores. </para>
1558 
1559 <para
1560 >As variábeis son palabras que comezan cun <quote
1561 >$</quote
1562 >. No <link linkend="the-editor"
1563 >editor</link
1564 > <glossterm
1565 >reálzanse</glossterm
1566 > en morado.</para>
1567 
1568 <para
1569 >As variábeis poden contar calquera <link linkend="number"
1570 >número</link
1571 >, <link linkend="string"
1572 >texto</link
1573 > ou <link linkend="boolean-value"
1574 >valor lóxico (certo/falso</link
1575 >. Dáselles contido mediante a asignación, <userinput
1576 >=</userinput
1577 >. Terá ese valor até que o programa remate a execución ou até que se lle asigne outro valor.</para>
1578 
1579 <para
1580 >Unha vez asignadas, pode usar as variábeis no canto do seu valor. Por exemplo no seguinte retallo de &turtlescript; <screen>
1581 $x = 10
1582 $x = $x / 3
1583 escribe $x
1584 </screen
1585 > Primeiro a variábel <userinput
1586 >$x</userinput
1587 > convértese no <userinput
1588 >10</userinput
1589 >. Logo <userinput
1590 >$x</userinput
1591 > convértese no valore resultante de dividirse entre <userinput
1592 >3</userinput
1593 > &mdash; o que significa que se reasigna a <userinput
1594 >$x</userinput
1595 >  o resultado de <userinput
1596 >10/3</userinput
1597 >. Finalmente, escríbese <userinput
1598 >$x</userinput
1599 >. Nas liñas segunda e terceira podes ver que <userinput
1600 >$x</userinput
1601 > é usada como se ela fose o que contén.</para>
1602 
1603 <para
1604 >Para poder usar unha variábel ten que asignarse. Exemplo: <screen>
1605 escribe $n
1606 </screen
1607 > Non escribirá nada e pola contra mostrará unha mensaxe de erro.</para>
1608 
1609 <para
1610 >Vexamos o seguinte retallo de &turtlescript;: <screen>
1611 $a = 2004
1612 $b = 25
1613 
1614 # a seguinte orde escribe "2029"
1615 escribe $a + $b
1616 retrocede 30
1617 # a seguinte orde escribe "2004 máis 25 é igual a 2029"
1618 escribe $a + " máis " + $b " é igual a " ($a + $b)
1619 </screen
1620 > Nas primeiras dúas liñas dáselles os valores 2004 e 25 ás variábeis <userinput
1621 >$a</userinput
1622 > e <userinput
1623 >$b</userinput
1624 >. Despois execútanse dúas ordes <userinput
1625 >escribe</userinput
1626 > cunha <userinput
1627 >retrocede 30</userinput
1628 > no medio. Os comentarios antes de cada orde <userinput
1629 >escribe</userinput
1630 > explícan o que fan. A orde <userinput
1631 >retrocede</userinput
1632 > foi posta aí para garantir que cada cousa se escriba nunha liña nova. Neste exemplo tamén vemos como as variábeis poden empregarse como se fosen o que conteñen, pode usalas con calquera <link linkend="operators"
1633 >operación</link
1634 > ou usalas como parámetros das <link linkend="commands"
1635 >ordes</link
1636 >.</para>
1637 
1638 <para
1639 >Outro exemplo máis: <screen>
1640 $nome = pregunta "Como te chamas?"
1641 escribe "Olá " + $nome + "! Verás que sinxelo é aprender a programar..."
1642 </screen
1643 > Abondo claro. e novo vese o uso da variábel <userinput
1644 >$nome</userinput
1645 > tratada como un texto.</para>
1646 
1647 <para
1648 >O <link linkend="the-inspector"
1649 >inspector</link
1650 > é de moita axuda cando se usan variábeis. Móstra o contido de todas as variábeis que se están a usar.</para>
1651 </sect1>
1652 
1653 
1654 
1655 <sect1 id="controlling-execution">
1656 <title
1657 >Control da execución</title>
1658 <para
1659 >Os controladores da execución permítenlle, como indica o nome, controlar o fluxo de execución.</para>
1660 <para
1661 >As ordes de control da execución son <glossterm
1662 >realzadas</glossterm
1663 > en letra verde grosa. As chaves utilízanse caseque sempre xunto cos controladores de execución e son <glossterm
1664 >realzadas</glossterm
1665 > en letra negra grosa.</para>
1666 
1667 <sect2 id="wait">
1668 <title
1669 >Facer que o sapoconcho agarde</title>
1670 <para
1671 >Se programou algo en &kturtle; xa se decataría de que o sapoconcho pode ser moi moi moi rápido cando debuxa. Esta orde fai que agarde durante un tempo.</para>
1672   <variablelist>
1673     <varlistentry>
1674       <term
1675 >agarda<indexterm
1676 ><primary
1677 >agarda</primary
1678 ></indexterm
1679 ></term>
1680       <listitem
1681 ><para
1682 ><screen
1683 >agarda X</screen
1684 ><userinput
1685 >agarda</userinput
1686 > fai que o sapoconcho estea quedo durante X segundos. <screen>
1687 repite 36 {
1688   avanza 5
1689   xiradereita 10
1690   agarda 0.5
1691 }
1692 </screen
1693 > 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
1694 ></listitem>
1695     </varlistentry>
1696   </variablelist>
1697 </sect2>
1698 
1699 <sect2 id="if">
1700 <title
1701 >Executar «se»</title>
1702   <variablelist>
1703     <varlistentry>
1704       <term
1705 >se<indexterm
1706 ><primary
1707 >se</primary
1708 ></indexterm
1709 ></term>
1710       <listitem
1711 ><para
1712 ><screen
1713 >se <link linkend="boolean-value"
1714 >valor lóxico</link
1715 > { … }</screen
1716 >O código que vai entre as chaves só será executado <userinput
1717 >se</userinput
1718 > o <link linkend="boolean-value"
1719 >predicado</link
1720 > é <quote
1721 >certo</quote
1722 >. <screen>
1723 $x = 6
1724 se $x &gt; 5 {
1725   escribe "x é maior que cinco!"
1726 }
1727 </screen
1728 > Na primeira liña <userinput
1729 >$x</userinput
1730 > vale 6. Na segunda liña úsase unha <link linkend="comparing-operators"
1731 >operación de comparación</link
1732 > para avaliar <userinput
1733 >x &gt; 5</userinput
1734 >. Xa que a resposta é <quote
1735 >certo</quote
1736 > o controlador de execución <userinput
1737 >se</userinput
1738 > permitirá que se execute o código entre as chaves.</para
1739 ></listitem>
1740     </varlistentry>
1741   </variablelist>
1742 </sect2>
1743 
1744 <sect2 id="else">
1745 <title
1746 >Se non, ou en caso contrario: "senon"</title>
1747   <variablelist>
1748     <varlistentry>
1749       <term
1750 >senon<indexterm
1751 ><primary
1752 >senon</primary
1753 ></indexterm
1754 ></term>
1755       <listitem
1756 ><para
1757 ><screen
1758 >se <link linkend="boolean-value"
1759 >boolean</link
1760 > { ... } senon { ... }</screen
1761 ><userinput
1762 >senon</userinput
1763 > pode empregarse xunto ccontrolador de execución <link linkend="if"
1764 ><userinput
1765 >se</userinput
1766 ></link
1767 >. O código entre as chaves que seguen a <userinput
1768 >senon</userinput
1769 > só se executará se o <link linkend="boolean-value"
1770 >predicado</link
1771 > é <quote
1772 >falso</quote
1773 >. <screen>
1774 reinicia
1775 $x = 4
1776 se $x &gt; 5 {
1777  escribe "x é maior que cinco!"
1778 }
1779 senon
1780 {
1781   escribe "x é menor que seis!"
1782 }
1783 </screen
1784 > A <link linkend="comparing-operators"
1785 >comparación</link
1786 > avalia a expresión <userinput
1787 >$x &gt; 5</userinput
1788 >. Xa que 4 no o é a resposta é <quote
1789 >falso</quote
1790 >. Isto implica que se executará o código entre as chaves que seguen a <userinput
1791 >senon</userinput
1792 >.</para
1793 ></listitem>
1794     </varlistentry>
1795   </variablelist>
1796 </sect2>
1797 
1798 <sect2 id="while">
1799 <title
1800 >O ciclo «mentres»</title>
1801   <variablelist>
1802     <varlistentry>
1803       <term
1804 >mentres<indexterm
1805 ><primary
1806 >mentres</primary
1807 ></indexterm
1808 ></term>
1809       <listitem
1810 ><para
1811 ><screen
1812 >mentres <link linkend="boolean-value"
1813 >valor lóxico</link
1814 > { … }</screen
1815 >O controlador de execución <userinput
1816 >mentres</userinput
1817 > seméllase moito a <link linkend="if"
1818 ><userinput
1819 >se</userinput
1820 ></link
1821 >. A diferenza é que <userinput
1822 >mentres</userinput
1823 > repite o código entre as chaves ate que o <link linkend="boolean-value"
1824 >valor lóxico</link
1825 > sexa <quote
1826 >falso</quote
1827 >. <screen>
1828 $x = 1
1829 mentres $x &lt; 5 {
1830   avanza 10
1831   agarda 1
1832   $x = $x + 1
1833 }
1834 </screen
1835 > Na primeira liña <userinput
1836 >$x</userinput
1837 > toma o valor 1. Na segunda liña avalíase <userinput
1838 >$x &lt; 5</userinput
1839 >. Dado que a resposta é <quote
1840 >certo</quote
1841 > o controlador de execución <userinput
1842 >mentres</userinput
1843 > comeza a executar o código entre as chaves ata que <userinput
1844 >$x &lt; 5</userinput
1845 > sexa <quote
1846 >falso</quote
1847 >. Neste caso executarase 4 veces, porque cada vez que se executa a quinta liña <userinput
1848 >$x</userinput
1849 > increméntase.</para
1850 ></listitem>
1851     </varlistentry>
1852   </variablelist>
1853 </sect2>
1854 
1855 <sect2 id="repeat">
1856 <title
1857 >O ciclo «repite»</title>
1858   <variablelist>
1859     <varlistentry>
1860       <term
1861 >repite<indexterm
1862 ><primary
1863 >repite</primary
1864 ></indexterm
1865 ></term>
1866       <listitem
1867 ><para
1868 ><screen
1869 >repite <link linkend="number"
1870 >número</link
1871 > { … }</screen
1872 >O controlador de execucion <userinput
1873 >repite</userinput
1874 > seméllase moito a <link linkend="while"
1875 ><userinput
1876 >mentres</userinput
1877 ></link
1878 >. A diferenza é que <userinput
1879 >repite</userinput
1880 > executa o código entre as chaves o número dado de veces.</para
1881 ></listitem>
1882     </varlistentry>
1883   </variablelist>
1884 </sect2>
1885 
1886 <sect2 id="for">
1887 <title
1888 >O ciclo «desde», un ciclo cun contador</title>
1889   <variablelist>
1890     <varlistentry>
1891       <term
1892 >desde<indexterm
1893 ><primary
1894 >desde</primary
1895 ></indexterm
1896 ><indexterm
1897 ><primary
1898 >ate</primary
1899 ></indexterm
1900 ><indexterm
1901 ><primary
1902 >pasando</primary
1903 ></indexterm
1904 ></term>
1905       <listitem
1906 ><para
1907 ><screen
1908 >desde <link linkend="assignment-of-variables"
1909 >variábel</link
1910 > = <link linkend="number"
1911 >número</link
1912 > ate <link linkend="number"
1913 >número</link
1914 > { ... }</screen
1915 >O bucle <userinput
1916 >desde</userinput
1917 > é un <quote
1918 >bucle con contador</quote
1919 >, &ie;, mantén por si o reconto. O primeiro número é o valor da variábel na primeira volta. En cada ciclo a variábel increméntase até que se acade o segundo número.<screen>
1920 desde $x = 1 ate 10 {
1921   escribe $x * 7
1922   avanza 15
1923 }
1924 </screen
1925 > Cada vez que se executa o código entre as chaves o <userinput
1926 >$x</userinput
1927 > aumenta en 1, ate que <userinput
1928 >$x</userinput
1929 > acada o valor de 10. O código nas chaves escribe o valor do <userinput
1930 >$x</userinput
1931 > multiplicado por 7. Cando este programa remate a execución verá a táboa de multiplicar do 7 no lenzo. </para>
1932      <para
1933 >O paso predeterminado no bucle é 1, pero pode utilizar outro valor mediante <screen
1934 >desde <link linkend="assignment-of-variables"
1935 >variábel</link
1936 > = <link linkend="number"
1937 >número</link
1938 > ate <link linkend="number"
1939 >número</link
1940 > pasando <link linkend="number"
1941 >número</link
1942 > { ... }</screen
1943 ></para
1944 ></listitem>
1945     </varlistentry>
1946   </variablelist>
1947 </sect2>
1948 
1949 <sect2 id="break">
1950 <title
1951 >Saír dun bucle</title>
1952   <variablelist>
1953     <varlistentry>
1954       <term
1955 >sair<indexterm
1956 ><primary
1957 >sair</primary
1958 ></indexterm
1959 ></term>
1960       <listitem
1961 ><para
1962 ><screen
1963 >sair</screen
1964 >Termina de inmediato esta volta ao bucle e transfere o control á instrucción que vai despois del.</para
1965 ></listitem>
1966     </varlistentry>
1967   </variablelist>
1968 </sect2>
1969 
1970 <sect2 id="exit">
1971 <title
1972 >Detén a execución do programa</title>
1973   <variablelist>
1974     <varlistentry>
1975       <term
1976 >fin<indexterm
1977 ><primary
1978 >fin</primary
1979 ></indexterm
1980 ></term>
1981       <listitem
1982 ><para
1983 ><screen
1984 >fin</screen
1985 >Remata a execución do programa.</para
1986 ></listitem>
1987     </varlistentry>
1988   </variablelist>
1989 </sect2>
1990 
1991 <sect2 id="assert">
1992 <title
1993 >Comprobar asercións durante a execución</title>
1994   <variablelist>
1995     <varlistentry>
1996       <term
1997 >aserto<indexterm
1998 ><primary
1999 >aserto</primary
2000 ></indexterm
2001 ></term>
2002       <listitem
2003 ><para
2004 ><screen
2005 >aserto <link linkend="boolean-value"
2006 >predicado</link
2007 ></screen
2008 >Pode usarse para razonar acerca do programa ou comprobar que as entradas sexan correctas. <screen
2009 >$en = pregunta "En que ano naciches?"
2010 # o ano debe ser positivo
2011 aserto $en 
2012 > 0 
2013 </screen
2014 ></para
2015 ></listitem>
2016     </varlistentry>
2017   </variablelist>
2018 </sect2>
2019 </sect1>
2020 
2021 
2022 <sect1 id="learn">
2023 
2024 <title
2025 >Cree as súas propios ordes con <quote
2026 >define</quote
2027 ></title>
2028 <para
2029 ><userinput
2030 >define</userinput
2031 ><indexterm
2032 ><primary
2033 >define</primary
2034 > </indexterm
2035 > é unha orde moi especial, porque se utiliza para crear novas ordes. A orde que cree pode tomar <glossterm linkend="input-output"
2036 >entradas</glossterm
2037 > e devolver <glossterm linkend="input-output"
2038 >resultados</glossterm
2039 >. Vexamos como se crea unha orde nova: <screen>
2040 define faiCirculo $x {
2041   repite 36 {
2042     avanza $x
2043     xiraesquerda 10
2044   }
2045 }
2046 </screen
2047 > O nova orde chámase <userinput
2048 >faiCirculo</userinput
2049 >. <userinput
2050 >faiCirculo</userinput
2051 > toma unha <glossterm linkend="input-output"
2052 >entrada</glossterm
2053 >, un número que indica o tamaño do círculo. <userinput
2054 >faiCirculo</userinput
2055 > non devolve nengún <glossterm linkend="input-output"
2056 >resultado</glossterm
2057 >. A orde <userinput
2058 >faiCirculo</userinput
2059 > pode ser utilizado como unha orde normal no resto do código. Vexa este exemplo: <screen
2060 >define faiCirculo $X {
2061   repite 36 {
2062     avanza $X
2063     xiraesquerda 10
2064   }
2065 }
2066 vai 200,200
2067 faiCirculo 20
2068 
2069 vai 300,300
2070 faiCirculo 40  
2071 </screen>
2072 </para>
2073 <para
2074 >No seguinte exemplo, créase unha orde que <indexterm
2075 ><primary
2076 >devolve</primary
2077 ></indexterm
2078 > un valor. <screen>
2079 define factorial $x {
2080   $r = 1
2081   deste $i = 1 ate $x  {
2082     $r = $r * $i
2083   }
2084   devolve $r
2085 }
2086 
2087 escribe factorial 5
2088 </screen
2089 > Neste exemplo críase unha orde nova chamada <userinput
2090 >factorial</userinput
2091 >. Se entrada desta orde é<userinput
2092 >5</userinput
2093 > a saída será <userinput
2094 >5*4*3*2*1</userinput
2095 >. Ao usar <userinput
2096 >devolve</userinput
2097 >  especifícase o valor <glossterm linkend="input-output"
2098 >devolto</glossterm
2099 > e a execución continúase.</para>
2100 <para
2101 >As ordes poden ter máis dun <glossterm linkend="input-output"
2102 >parámetro</glossterm
2103 >. No seguinte exemplo, créase unha orde que debuxa un rectángulo. <screen>
2104 define debuxaRectangulo $X, $Y {
2105   avanza $Y
2106   xiradereita 90
2107   avanza $X
2108   xiradereita 90
2109   avanza $Y
2110   xiradereita 90
2111   avanza $X
2112   xiradereita 90
2113 }
2114 </screen
2115 > Agora pode ordenar  <userinput
2116 >debuxaRectangulo 50,100</userinput
2117 > e o sapoconcho debuxará no lenzo un rectángulo. </para>
2118   
2119 </sect1>
2120 
2121 </chapter>