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

0001 <chapter id="reference">
0002 <title
0003 >Guía del lenguaje de programación &turtlescript; </title>
0004 <para
0005 >Esta es la guía del lenguaje de programación &turtlescript; de &kturtle;. La primera sección de este capítulo está dedicada a aspectos relacionados con la <link linkend="grammar"
0006 >gramática</link
0007 > de los programas de &turtlescript;. La segunda sección trata exclusivamente los <link linkend="mathematical-operators"
0008 >operadores aritméticos</link
0009 >, los <link linkend="boolean-operators"
0010 >operadores lógicos (verdadero/falso)</link
0011 > y los <link linkend="comparing-operators"
0012 >operadores de comparación</link
0013 >. La tercera sección es, básicamente, una gran lista con todos las <link linkend="commands"
0014 >órdenes</link
0015 > explicadas una a una. La cuarta sección explica cómo  <link linkend="assignment-of-variables"
0016 >asignar valores a las variables</link
0017 >. Finalmente, en la quinta sección se explica cómo organizar la ejecución de órdenes usando <link linkend="controlling-execution"
0018 >declaraciones de control de la ejecución</link
0019 > y, en la sexta, cómo puedes crear tus propias órdenes con <link linkend="learn"
0020 ><userinput
0021 >aprender</userinput
0022 ></link
0023 >.</para>
0024 
0025 <sect1 id="grammar">
0026 <title
0027 >La gramática de &turtlescript;</title>
0028 <para
0029 >Como ocurre con todos los idiomas, &turtlescript; consta de diferentes tipos de palabras y símbolos. En español distinguimos entre verbos (como «caminar» y «cantar») y sustantivos (como «hermana» o «casa») que se usan para distintos propósitos. &turtlescript; es un lenguaje de programación que se usa para dar instrucciones a la tortuga sobre lo que tiene que hacer.</para>
0030 <para
0031 >En esta sección, se explican brevemente los distintos tipos de palabras que usa &turtlescript;. Se introduce lo que son <link linkend="comment"
0032 >comentarios</link
0033 >, <link linkend="command"
0034 >órdenes</link
0035 > y los tres diferentes tipos de literales: <link linkend="number"
0036 >números</link
0037 >, <link linkend="string"
0038 >cadenas</link
0039 > y <link linkend="boolean-value"
0040 >valores lógicos (verdadero/falso)</link
0041 >.</para>
0042 
0043 
0044 <sect2 id="comment">
0045 <title
0046 >Comentarios</title>
0047 <para
0048 >Un programa consta de instrucciones (que es lo que se ejecuta) y de los denominados comentarios. Los comentarios no se ejecutan. Es decir, &kturtle; los ignora por completo cuando se ejecuta un programa. Los comentarios están ahí para que otros programadores puedan comprender mejor el programa. Todo lo que aparece después de un símbolo <userinput
0049 >#</userinput
0050 > se considera como un comentario en  &turtlescript;. Un ejemplo es este programa que no hace nada:  <screen>
0051 # este programa no hace nada, es solo un comentario
0052 </screen
0053 > Es un programa inútil, pero permite explicar bien el asunto.</para>
0054 <para
0055 >Los comentarios son especialmente útiles en el caso de programas más complejos, ya que permiten dar consejos a otros programadores. En el siguiente programa verás comentarios que se usan junto con la orden <link linkend="print"
0056 >escribir</link
0057 >. <screen>
0058 # este programa ha sido creado por Cies Breijs
0059 escribir "este texto aparecerá escrito en el lienzo"
0060 # la línea anterior no es un comentario, pero la siguiente sí que lo es:
0061 # escribir "¡este texto no aparecerá escrito!"
0062 </screen
0063 > La primera línea describe el programa. La segunda línea es ejecutada por &kturtle;, que escribe en el lienzo <userinput
0064 >este texto aparecerá escrito en el lienzo</userinput
0065 >. La tercera línea es un comentario. Y la cuarta es un comentario que contiene una orden de &turtlescript;. Si de esta cuarta línea se eliminara el símbolo <userinput
0066 >#</userinput
0067 >, &kturtle; ejecutaría la orden de escribir.  Lo que los programadores suelen decir es que la orden de escribir se ha «comentado».</para>
0068 <para
0069 >Las líneas comentadas aparecen <glossterm
0070 >resaltadas</glossterm
0071 > en gris claro en el <link linkend="the-editor"
0072 >editor de código</link
0073 >.</para>
0074 </sect2>
0075 
0076 <sect2 id="command">
0077 <title
0078 >Órdenes</title>
0079 <para
0080 >Con las órdenes puedes decirle a la tortuga o a &kturtle; lo que tiene que hacer. Algunas órdenes necesitan un parámetro de entrada, mientras que otras devuelven un parámetro de salida. <screen>
0081 # avanzar es una orden que requiere de un parámetro de entrada, en este caso el número 100:
0082 avanzar 100
0083 </screen
0084 > La primera línea es un  <link linkend="comment"
0085 >comentario</link
0086 >. La segunda línea contiene la orden <userinput
0087 >avanzar</userinput
0088 > y el <link linkend="number"
0089 >número</link
0090 > <userinput
0091 >100</userinput
0092 >. El número no es parte de la orden, es solo su parámetro de entrada.</para>
0093 <para
0094 >Algunas órdenes, como &eg; <userinput
0095 >ir</userinput
0096 >, necesitan más de un valor de entrada. Si hay varios valores, hay que separarlos con el carácter <userinput
0097 >,</userinput
0098 > (coma).</para>
0099 <para
0100 >Para una descripción detallada de todas las órdenes que reconoce &kturtle;, vaya <link linkend="commands"
0101 >aquí</link
0102 >. Las órdenes integradas en &kturtle; aparecen <glossterm
0103 >resaltadas</glossterm
0104 > en azul oscuro.</para>
0105 </sect2>
0106 
0107 <sect2 id="number">
0108 <title
0109 >Números</title>
0110 <para
0111 >Lo más probable es que ya sepa bastante de números. La forma en que &kturtle; usa los números no es muy diferente a cómo se hace en el idioma hablado o en las matemáticas.</para>
0112 <para
0113 >Tenemos los llamados números naturales («<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.), los enteros negativos («<userinput
0126 >-1</userinput
0127 >», «<userinput
0128 >-2</userinput
0129 >», «<userinput
0130 >-3</userinput
0131 >», etc.) y los números con decimales («<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 >», etc.). El carácter <userinput
0142 >,</userinput
0143 > (coma) se utiliza como separador. </para>
0144 <para
0145 >Los números pueden utilizarse en conjunción con <link linkend="mathematical-operators"
0146 >operadores aritméticos</link
0147 > y <link linkend="comparing-operators"
0148 >operadores de comparación</link
0149 >. También pueden guardarse en <link linkend="assignment-of-variables"
0150 >variables</link
0151 >. Los números aparecen <glossterm
0152 >resaltados</glossterm
0153 > en rojo oscuro.</para>
0154 </sect2>
0155 
0156 <!-- constants like pi? -->
0157 
0158 <sect2 id="string">
0159 <title
0160 >Cadenas</title>
0161 <para
0162 >Primero un ejemplo: <screen>
0163 escribir "Hola, soy una cadena."
0164 </screen
0165 > En este ejemplo, <userinput
0166 >escribir</userinput
0167 > es una orden y <userinput
0168 >"Hola, soy una cadena."</userinput
0169 > es una cadena. Las cadenas comienzan y terminan con dobles comillas (<userinput
0170 >"</userinput
0171 >); es esto lo que hace que &kturtle; las identifique como tal.</para>
0172 <para
0173 >Al igual que ocurre con los <link linkend="number"
0174 >números</link
0175 >, las cadenas también se pueden guardar en <link linkend="assignment-of-variables"
0176 >variables</link
0177 >. Sin embargo, al contrario que los números, las cadenas no pueden usarse con <link linkend="mathematical-operators"
0178 >operadores aritméticos </link
0179 > o con <link linkend="comparing-operators"
0180 >operadores de comparación</link
0181 >. Las cadenas aparecen <glossterm
0182 >resaltadas</glossterm
0183 > en rojo. </para>
0184 </sect2>
0185 
0186 <sect2 id="boolean-value">
0187 <title
0188 >Valores lógicos (verdadero/falso)</title>
0189 <para
0190 >Solo hay dos valores lógicos: <userinput
0191 >verdadero</userinput
0192 ><indexterm
0193 ><primary
0194 >verdadero</primary
0195 ></indexterm
0196 > y <userinput
0197 >falso</userinput
0198 ><indexterm
0199 ><primary
0200 >falso</primary
0201 ></indexterm
0202 >, aunque en ocasiones se los denomina «<userinput
0203 >encendido</userinput
0204 >» y «<userinput
0205 >apagado</userinput
0206 >», «<userinput
0207 >sí</userinput
0208 >» y «<userinput
0209 >no</userinput
0210 >» o «<userinput
0211 >uno</userinput
0212 >» y «<userinput
0213 >cero</userinput
0214 >». Pero en &turtlescript; siempre los llamaremos  <userinput
0215 >verdadero</userinput
0216 > y <userinput
0217 >falso</userinput
0218 >. Observa este código de &turtlescript;: <screen>
0219 $a = verdadero
0220 </screen
0221 > Si miras en el <link linkend="the-inspector"
0222 >inspector</link
0223 > verás que a la <link linkend="assignment-of-variables"
0224 >variable</link
0225 > <userinput
0226 >$a</userinput
0227 > le corresponde el valor <userinput
0228 >verdadero</userinput
0229 >, que es de tipo lógico.</para>
0230 <para
0231 >Con frecuencia, los valores lógicos son el resultado de un <link linkend="comparing-operators"
0232 >operador de comparación</link
0233 >, como ocurre en el siguiente ejemplo: <screen>
0234 $respuesta = 10 &gt; 3
0235 </screen
0236 > A la <link linkend="assignment-of-variables"
0237 >variable</link
0238 > <userinput
0239 >$respuesta</userinput
0240 > le corresponde el valor <userinput
0241 >verdadero</userinput
0242 > porque <userinput
0243 >10</userinput
0244 > es mayor que <userinput
0245 >3</userinput
0246 >. </para>
0247 <para
0248 >Los valores lógicos <userinput
0249 >verdadero</userinput
0250 > y <userinput
0251 >falso</userinput
0252 > aparecen <glossterm
0253 >resaltados</glossterm
0254 > en rojo oscuro.</para>
0255 </sect2>
0256 
0257 </sect1>
0258 
0259 
0260 
0261 <sect1 id="operators">
0262 <title
0263 >Operadores aritméticos, lógicos y de comparación</title>
0264 <para
0265 >Aunque el título de esta sección parezca complejo, verás como el contenido no es tan difícil como parece.</para>
0266 
0267 <sect2 id="mathematical-operators">
0268 <title
0269 >Operadores aritméticos</title>
0270 <para
0271 >Estos son los símbolos aritméticos básicos: suma (<userinput
0272 >+</userinput
0273 >), resta (<userinput
0274 >-</userinput
0275 >), multiplicación (<userinput
0276 >*</userinput
0277 >), división (<userinput
0278 >/</userinput
0279 >) y potenciación (<userinput
0280 >^</userinput
0281 >).</para>
0282 
0283 <para
0284 >Este es un ejemplo de cómo usar los operadores aritméticos en &turtlescript;: <screen>
0285 $sumar = 1 + 1
0286 $restar = 20 - 5
0287 $multiplicar = 15 * 2
0288 $dividir = 30 / 30
0289 $potencia = 2 ^ 2
0290 </screen
0291 > Los valores resultantes de estas operaciones aritméticos son <link linkend="assignment-of-variables"
0292 >asignados a variables</link
0293 >. Puedes ver los valores resultantes en el <link linkend="the-inspector"
0294 >inspector</link
0295 >.</para>
0296 <para
0297 >Si lo que quieres es realizar un cálculo simple, puedes hacer algo como esto: <screen
0298 >escribir 2010-12
0299 </screen
0300 ></para>
0301 <para
0302 >Ahora veamos un ejemplo con paréntesis: <screen>
0303 escribir ( ( 20 - 5 ) * 2 / 30 ) + 1
0304 </screen
0305 > Primero se calculan las operaciones que están dentro de los paréntesis. En este ejemplo, primero se calcula 20 - 5; el resultado se multiplica por 2, luego se divide por 30 y, por último, se le suma 1. El resultado final es 2. Los paréntesis pueden también usarse en otros casos.</para>
0306 <para
0307 >&kturtle; también tiene otras funciones aritméticas en forma de órdenes. Echa un vistazo a las siguientes órdenes, eso sí, teniendo en cuenta que se trata de operaciones avanzadas: <link linkend="round"
0308 >redondear</link
0309 >, <link linkend="random"
0310 >aleatorio</link
0311 >, <link linkend="sqrt"
0312 >raíz</link
0313 >, <link linkend="pi"
0314 >pi</link
0315 >, <link linkend="sin"
0316 >sen</link
0317 >, <link linkend="cos"
0318 >cos</link
0319 >, <link linkend="tan"
0320 >tan</link
0321 >, <link linkend="arcsin"
0322 >arcsen</link
0323 >, <link linkend="arccos"
0324 >arccos</link
0325 >, <link linkend="arctan"
0326 >arctan</link
0327 >.</para>
0328 </sect2>
0329 
0330 <sect2 id="boolean-operators">
0331 <title
0332 >Operadores lógicos (verdadero/falso)</title>
0333 <para
0334 >Mientras que los <link linkend="mathematical-operators"
0335 >operadores aritméticos</link
0336 > se usan principalmente con <link linkend="number"
0337 >números</link
0338 >, los operadores lógicos están pensados para usarse con <link linkend="boolean-value"
0339 >valores lógicos</link
0340 > (<userinput
0341 >verdadero</userinput
0342 > y <userinput
0343 >falso</userinput
0344 >). Hay solo tres operadores lógicos: <userinput
0345 >y</userinput
0346 ><indexterm
0347 ><primary
0348 >y</primary
0349 ></indexterm
0350 >, <userinput
0351 >o</userinput
0352 ><indexterm
0353 ><primary
0354 >o</primary
0355 ></indexterm
0356 > y <userinput
0357 >no</userinput
0358 ><indexterm
0359 ><primary
0360 >no</primary
0361 ></indexterm
0362 >. El siguiente código de &turtlescript; muestra cómo usarlos: <screen>
0363 $y_1_1 = verdadero y verdadero  # -> verdadero
0364 $y_1_0 = verdadero y falso  # -> falso
0365 $y_0_1 = falso y verdadero  # -> falso
0366 $y_0_0 = falso y falso  # -> falso
0367 
0368 $o_1_1 = verdadero o verdadero # -> verdadero
0369 $o_1_0 = verdadero o falso  # -> verdadero
0370 $o_0_1 = falso o verdadero  # -> verdadero
0371 $o_0_0 = falso o falso  # -> falso
0372 
0373 $no_1 = no verdadero  # -> falso
0374 $no_0 = no falso  # -> verdadero
0375 </screen
0376 > Puedes ver los valores resultantes en el <link linkend="the-inspector"
0377 >inspector</link
0378 >, aunque también se proporcionan pequeños comentarios al final de las líneas. <userinput
0379 >Y</userinput
0380 > resulta en <userinput
0381 >verdadero</userinput
0382 > solo si ambas partes son <userinput
0383 >verdaderos</userinput
0384 >. <userinput
0385 >O</userinput
0386 > resulta en <userinput
0387 >verdadero</userinput
0388 > si alguna de las dos partes es <userinput
0389 >verdadero</userinput
0390 >. Y <userinput
0391 >no</userinput
0392 > transforma <userinput
0393 >verdadero</userinput
0394 > en <userinput
0395 >falso</userinput
0396 > y<userinput
0397 >falso</userinput
0398 > en <userinput
0399 >verdadero</userinput
0400 >. </para>
0401 <para
0402 >Los operadores lógicos aparecen <glossterm
0403 >resaltados</glossterm
0404 > en rosa.</para>
0405 
0406 <sect3 id="boolean-operators-advanced-examples">
0407 <title
0408 >Unos ejemplos más complejos:</title>
0409 <para
0410 >Considera el siguiente ejemplo con <userinput
0411 >and</userinput
0412 >: <screen>
0413 $a = 1
0414 $b = 5
0415 si (($a &lt; 10) y ($b == 5)) y ($a &lt; $b) {
0416   escribir "hola"
0417 }
0418 </screen
0419 > En este código de &turtlescript;, el resultado de los tres <link linkend="comparing-operators"
0420 >operadores de comparación</link
0421 > están agrupados mediante los operadores <userinput
0422 >y</userinput
0423 >. Esto significa que los tres resultados tienen que ser iguales a «verdadero» para que se escriba la palabra «hola».</para>
0424 
0425 <para
0426 >Un ejemplo con <userinput
0427 >o</userinput
0428 >: <screen>
0429 $n = 1
0430 si ($n &lt; 10) o ($n == 2) {
0431   escribir "hola"
0432 }
0433 </screen
0434 > En este código de &turtlescript;, la parte izquierda del operador <userinput
0435 >o</userinput
0436 > es «verdadera», mientras que la derecha es «falsa». Ya que una de las dos partes del operador <userinput
0437 >o</userinput
0438 > es «verdadera», el resultado del operador <userinput
0439 >o</userinput
0440 > también lo es. Esto quiere decir que se escribe la palabra «hola».</para>
0441 
0442 <para
0443 >Finalmente, un ejemplo con <userinput
0444 >no</userinput
0445 >, que transforma «verdadero» en «falso» y «falso» en verdadero». Fíjate:  <screen
0446 >$n = 1
0447 si no ($n == 3) {
0448   escribir "hola"
0449 } sino {
0450   escribir "no hola ;-)"
0451 }
0452 </screen
0453 ></para>
0454 </sect3>
0455 </sect2>
0456 
0457 <sect2 id="comparing-operators">
0458 <title
0459 >Operadores de comparación</title>
0460 <para
0461 >Considera esta comparación sencilla: <screen>
0462 $respuesta = 10 &gt; 3
0463 </screen
0464 > Aquí, <userinput
0465 >10</userinput
0466 > se compara con <userinput
0467 >3</userinput
0468 > usando el operador «más grande que». El resultado de esta operación, es decir, el <link linkend="boolean-value"
0469 >valor lógico</link
0470 > <userinput
0471 >verdadero</userinput
0472 >, se guarda en la <link linkend="assignment-of-variables"
0473 >variable</link
0474 > <userinput
0475 >$respuesta</userinput
0476 >.</para>
0477 <para
0478 >Todos los <link linkend="number"
0479 >números</link
0480 > y <link linkend="assignment-of-variables"
0481 >variables</link
0482 > (que contengan números) pueden compararse entre sí usando operadores de comparación.</para>
0483 <para
0484 >Estos son todos los posibles operadores de comparación: <table
0485 > <title
0486 >Tipos de preguntas</title
0487 > <tgroup cols="3"
0488 > <tbody
0489 > <row
0490 > <entry
0491 ><userinput
0492 >$A == $B</userinput
0493 ></entry
0494 > <entry
0495 >igual a</entry
0496 > <entry
0497 >la respuesta es «verdadera» si <userinput
0498 >$A</userinput
0499 > es igual a <userinput
0500 >$B</userinput
0501 ></entry
0502 > </row
0503 > <row
0504 > <entry
0505 ><userinput
0506 >$A != $B</userinput
0507 ></entry
0508 > <entry
0509 >no igual a</entry
0510 > <entry
0511 >la respuesta es «verdadera» si <userinput
0512 >$A</userinput
0513 > no es igual a <userinput
0514 >$B</userinput
0515 ></entry
0516 > </row
0517 > <row
0518 > <entry
0519 ><userinput
0520 >$A &gt; $B</userinput
0521 ></entry
0522 > <entry
0523 >mayor que</entry
0524 > <entry
0525 >la respuesta es «verdadera» si <userinput
0526 >$A</userinput
0527 > es mayor que <userinput
0528 >$B</userinput
0529 ></entry
0530 > </row
0531 > <row
0532 > <entry
0533 ><userinput
0534 >$A &lt; $B</userinput
0535 ></entry
0536 > <entry
0537 >menor que</entry
0538 > <entry
0539 >la respuesta es «verdadera» si <userinput
0540 >$A</userinput
0541 > es menor que <userinput
0542 >$B</userinput
0543 ></entry
0544 > </row
0545 > <row
0546 > <entry
0547 ><userinput
0548 >$A &gt;= $B</userinput
0549 ></entry
0550 > <entry
0551 >mayor o igual que</entry
0552 > <entry
0553 >la respuesta es «verdadera» si <userinput
0554 >$A</userinput
0555 > es mayor o igual que <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 o igual que</entry
0566 > <entry
0567 >la respuesta es «verdadera» si <userinput
0568 >$A</userinput
0569 > es menor o igual que <userinput
0570 >B</userinput
0571 ></entry
0572 > </row
0573 > </tbody
0574 > </tgroup
0575 > </table
0576 > Ten en cuenta que <userinput
0577 >$A</userinput
0578 > y <userinput
0579 >$B</userinput
0580 > tienen que ser <link linkend="number"
0581 >números</link
0582 > o <link linkend="assignment-of-variables"
0583 >variables</link
0584 > que contengan números.</para>
0585 </sect2>
0586 
0587 
0588 </sect1>
0589 
0590 
0591 
0592 <sect1 id="commands">
0593 <title
0594 >Órdenes</title>
0595 <para
0596 >Con las órdenes podemos decirle a la tortuga o a &kturtle; lo que tiene que hacer. Algunas órdenes requieren de parámetros de entrada, mientras que otras devuelven parámetros de salida. En esta sección se explican todas las órdenes integradas en &kturtle;. Alternativamente, puedes usar <link linkend="learn"
0597 ><userinput
0598 >aprender</userinput
0599 ></link
0600 > para crear tus propias órdenes. Las órdenes que van a detallarse aquí aparecen <glossterm
0601 >resaltadas</glossterm
0602 > en azul oscuro.</para>
0603 
0604 <sect2 id="moving-the-turtle">
0605 <title
0606 >Cómo mover la tortuga</title>
0607 <para
0608 >Hay varias órdenes que permiten mover la tortuga por la pantalla.</para>
0609 
0610   <variablelist>
0611     <anchor id="forward"/>
0612     <varlistentry
0613 > 
0614       <term
0615 >avanzar (avz)<indexterm
0616 ><primary
0617 >avanzar (avz)</primary
0618 ></indexterm
0619 ></term>
0620       <listitem
0621 ><para
0622 ><screen
0623 >avanzar X</screen
0624 ><userinput
0625 >avanzar</userinput
0626 > desplaza la tortuga hacia delante X píxeles. Cuando el pincel está bajado, la tortuga deja a su paso un trazo. <userinput
0627 >avanzar</userinput
0628 > puede abreviarse como <userinput
0629 >avz</userinput
0630 >.</para
0631 ></listitem>
0632     </varlistentry>
0633   </variablelist>
0634   <variablelist>
0635     <anchor id="backward"/>
0636     <varlistentry
0637 >  
0638       <term
0639 >retroceder (ret)<indexterm
0640 ><primary
0641 >retroceder (ret)</primary
0642 ></indexterm
0643 ></term>
0644       <listitem
0645 ><para
0646 ><screen
0647 >retroceder X</screen
0648 ><userinput
0649 >retroceder</userinput
0650 > hace retroceder la tortuga X píxeles. Cuando el pincel está bajado, la tortuga deja a su paso un trazo. <userinput
0651 >retroceder</userinput
0652 > puede abreviarse como <userinput
0653 >ret</userinput
0654 >.</para
0655 ></listitem>
0656     </varlistentry>
0657   </variablelist>
0658   <variablelist>
0659     <anchor id="turnleft"/>
0660     <varlistentry
0661 > 
0662       <term
0663 >izquierda (izq)<indexterm
0664 ><primary
0665 >izquierda (izq)</primary
0666 ></indexterm
0667 ></term>
0668       <listitem
0669 ><para
0670 ><screen
0671 >izquierda X</screen
0672 ><userinput
0673 >izquierda</userinput
0674 > le ordena a la tortuga que rote X grados hacia la izquierda. <userinput
0675 >izquierda</userinput
0676 > puede abreviarse como <userinput
0677 >izq</userinput
0678 >.</para
0679 ></listitem>
0680     </varlistentry>
0681   </variablelist>
0682   <variablelist>
0683     <anchor id="turnright"/>
0684     <varlistentry
0685 > 
0686       <term
0687 >derecha (der)<indexterm
0688 ><primary
0689 >derecha (der)</primary
0690 ></indexterm
0691 ></term>
0692       <listitem
0693 ><para
0694 ><screen
0695 >derecha X</screen
0696 ><userinput
0697 >derecha</userinput
0698 > le ordena a la tortuga que rote X grados hacia la derecha. <userinput
0699 >derecha</userinput
0700 > puede abreviarse como <userinput
0701 >der</userinput
0702 >.</para
0703 ></listitem>
0704     </varlistentry>
0705   </variablelist>
0706   <variablelist>
0707     <anchor id="direction"/>
0708     <varlistentry
0709 > 
0710       <term
0711 >dirección (dir)<indexterm
0712 ><primary
0713 >dirección (dir)</primary
0714 ></indexterm
0715 ></term>
0716       <listitem
0717 ><para
0718 ><screen
0719 >dirección X</screen
0720 ><userinput
0721 >dirección</userinput
0722 > determina el ángulo de dirección de la tortuga, que será X grados contando a partir de cero. No se tiene en cuenta la dirección anterior de la tortuga. <userinput
0723 >dirección</userinput
0724 > puede abreviarse como <userinput
0725 >dir</userinput
0726 >.</para
0727 ></listitem>
0728     </varlistentry>
0729   </variablelist>
0730   <variablelist>
0731     <anchor id="getdirection"/>
0732     <varlistentry
0733 > 
0734       <term
0735 >obtenerdirección<indexterm
0736 ><primary
0737 >obtenerdirección</primary
0738 ></indexterm
0739 ></term>
0740       <listitem
0741 ><para
0742 ><screen
0743 >obtenerdirección</screen
0744 ><userinput
0745 >obtenerdirección</userinput
0746 > determina el ángulo de dirección de la tortuga, que será X grados contando a partir de cero.</para
0747 ></listitem>
0748     </varlistentry>
0749   </variablelist>
0750   <variablelist>
0751     <anchor id="center"/>
0752     <varlistentry
0753 > 
0754       <term
0755 >centrar<indexterm
0756 ><primary
0757 >centrar</primary
0758 ></indexterm
0759 ></term>
0760       <listitem
0761 ><para
0762 ><screen
0763 >centrar</screen
0764 ><userinput
0765 >centrar</userinput
0766 > mueve la tortuga al centro del lienzo.</para
0767 ></listitem>
0768     </varlistentry>
0769   </variablelist>
0770   <variablelist>
0771     <anchor id="go"/>
0772     <varlistentry
0773 > 
0774       <term
0775 >ir<indexterm
0776 ><primary
0777 >ir</primary
0778 ></indexterm
0779 ></term>
0780       <listitem
0781 ><para
0782 ><screen
0783 >ir X; Y</screen
0784 ><userinput
0785 >ir</userinput
0786 > le ordena a la tortuga que se desplace a una posición concreta del lienzo. Esta posición está a X <glossterm linkend="pixels"
0787 >píxeles</glossterm
0788 > del margen izquierdo del lienzo y a Y <glossterm linkend="pixels"
0789 >píxeles</glossterm
0790 > del margen superior del lienzo.</para
0791 ></listitem>
0792     </varlistentry>
0793   </variablelist>
0794   <variablelist>
0795     <anchor id="gox"/>
0796     <varlistentry
0797 > 
0798       <term
0799 >irx<indexterm
0800 ><primary
0801 >irx (ix)</primary
0802 ></indexterm
0803 ></term>
0804       <listitem
0805 ><para
0806 ><screen
0807 >irx X</screen
0808 ><userinput
0809 >irx</userinput
0810 > le ordena a la tortuga que vaya a una posición que está a X <glossterm linkend="pixels"
0811 >píxeles</glossterm
0812 > del margen izquierdo del lienzo, sin modificar su altura. <userinput
0813 >irx</userinput
0814 > se puede abreviar con <userinput
0815 >ix</userinput
0816 >.</para
0817 ></listitem>
0818     </varlistentry>
0819   </variablelist>
0820   <variablelist>
0821     <anchor id="goy"/>
0822     <varlistentry
0823 > 
0824       <term
0825 >iry<indexterm
0826 ><primary
0827 >iry (iy)</primary
0828 ></indexterm
0829 ></term>
0830       <listitem
0831 ><para
0832 ><screen
0833 >iry Y</screen
0834 ><userinput
0835 >iry</userinput
0836 > le ordena a la tortuga que vaya a una posición que está a Y <glossterm linkend="pixels"
0837 >píxeles</glossterm
0838 > del margen superior del lienzo, sin modificar la distancia a la que se encuentre del margen izquierdo. <userinput
0839 >iry</userinput
0840 > se puede abreviar con <userinput
0841 >iy</userinput
0842 >.</para
0843 ></listitem>
0844     </varlistentry>
0845   </variablelist>
0846   <note
0847 ><para
0848 >Con las órdenes <userinput
0849 >ir</userinput
0850 >, <userinput
0851 >irx</userinput
0852 >, <userinput
0853 >iry</userinput
0854 > y <userinput
0855 >centrar</userinput
0856 >, la tortuga no dibuja ningún trazo, independientemente de que el pincel esté bajado o no.</para>
0857   </note>
0858 </sect2>
0859 
0860 <sect2 id="locate-the-turtle">
0861 <title
0862 >¿Dónde está la tortuga?</title>
0863 <para
0864 >Hay dos órdenes que devuelven la posición de la tortuga en la pantalla.</para>
0865 
0866   <variablelist>
0867     <anchor id="getx"/>
0868     <varlistentry
0869 > 
0870       <term
0871 >obtenerx<indexterm
0872 ><primary
0873 >obtenerx</primary
0874 ></indexterm
0875 ></term>
0876       <listitem
0877 ><para
0878 ><userinput
0879 >obtenerx</userinput
0880 > devuelve el número de píxeles desde el margen izquierdo del lienzo de la posición actual de la tortuga.</para
0881 ></listitem>
0882     </varlistentry>
0883   </variablelist>
0884   <variablelist>
0885     <anchor id="gety"/>
0886     <varlistentry
0887 > 
0888       <term
0889 >obtenery<indexterm
0890 ><primary
0891 >obtenery</primary
0892 ></indexterm
0893 ></term>
0894       <listitem
0895 ><para
0896 ><userinput
0897 >obtenery</userinput
0898 > devuelve el número de píxeles desde el margen superior del lienzo de la posición actual del la tortuga.</para
0899 ></listitem>
0900     </varlistentry>
0901   </variablelist>
0902 </sect2>
0903 
0904 <sect2 id="pen">
0905 <title
0906 >La tortuga tiene un pincel</title>
0907 <para
0908 >La tortuga tiene un pincel que dibuja una línea cuando esta se desplaza. Hay varia órdenes que controlan el pincel. En esta sección se explican estas órdenes.</para>
0909   <variablelist>
0910     <anchor id="penup"/>
0911     <varlistentry
0912 > 
0913       <term
0914 >levantarpincel (lpl)<indexterm
0915 ><primary
0916 >levantarpincel (lpl)</primary
0917 ></indexterm
0918 ></term>
0919       <listitem
0920 ><para
0921 ><screen
0922 >levantarpincel</screen
0923 ><userinput
0924 >levantarpincel</userinput
0925 > alza el pincel del lienzo. Cuando el pincel está «levantado», la tortuga no deja ningún trazo cuando se desplaza. Consulta también <userinput
0926 >bajarpincel</userinput
0927 >. <userinput
0928 >levantarpincel</userinput
0929 > puede abreviarse como <userinput
0930 >lpl</userinput
0931 >.</para
0932 ></listitem>
0933     </varlistentry>
0934   </variablelist>
0935   <variablelist>
0936     <anchor id="pendown"/>
0937     <varlistentry
0938 > 
0939       <term
0940 >bajarpincel (bpl)<indexterm
0941 ><primary
0942 >bajarpincel (bpl)</primary
0943 ></indexterm
0944 ></term>
0945       <listitem
0946 ><para
0947 ><screen
0948 >bajarpincel</screen
0949 ><userinput
0950 >bajarpincel</userinput
0951 > presiona el pincel sobre el lienzo. Cuando el pincel está «bajado», la tortuga deja un trazo a su paso. Vea también <userinput
0952 >levantarpincel</userinput
0953 >. <userinput
0954 >bajarpincel</userinput
0955 > puede abreviarse como <userinput
0956 >bpl</userinput
0957 >.</para
0958 ></listitem>
0959     </varlistentry>
0960   </variablelist>
0961   <variablelist>
0962     <anchor id="setpenwidth"/>
0963     <varlistentry
0964 > 
0965       <term
0966 >grosorpincel (gpl)<indexterm
0967 ><primary
0968 >grosorpincel (gpl)</primary
0969 ></indexterm
0970 ></term>
0971       <listitem
0972 ><para
0973 ><screen
0974 >grosorpincel X</screen
0975 ><userinput
0976 >grosorpincel</userinput
0977 > fija el grosor de la línea trazada por la tortuga en X <glossterm linkend="pixels"
0978 >píxeles</glossterm
0979 >. <userinput
0980 >grosorpincel</userinput
0981 > puede abreviarse como <userinput
0982 >gpl</userinput
0983 >.</para
0984 ></listitem>
0985     </varlistentry>
0986   </variablelist>
0987   <variablelist>
0988     <anchor id="setfgcolor"/>
0989     <varlistentry
0990 > 
0991       <term
0992 >colorpincel (cpl)<indexterm
0993 ><primary
0994 >colorpincel (cpl)</primary
0995 ></indexterm
0996 ></term>
0997       <listitem
0998 ><para
0999 ><screen
1000 >colorpincel R;G;B </screen
1001 ><userinput
1002 >colorpincel</userinput
1003 > fija el color del pincel. El parámetro de entrada de <userinput
1004 >colorpincel</userinput
1005 > es una <glossterm linkend="rgb"
1006 >combinación RGB</glossterm
1007 >. <userinput
1008 >colorpincel</userinput
1009 > puede abreviarse como <userinput
1010 >cpl</userinput
1011 >.</para
1012 ></listitem>
1013     </varlistentry>
1014   </variablelist>
1015 </sect2>
1016 
1017 <sect2 id="canvas">
1018 <title
1019 >Órdenes que controlan el lienzo</title>
1020 <para
1021 >Existen varias órdenes que controlan el lienzo.</para>
1022   <variablelist>
1023     <anchor id="resizecanvas"/>
1024     <varlistentry>
1025       <term
1026 >tamañolienzo (tl)<indexterm
1027 ><primary
1028 >tamañolienzo (tl)</primary
1029 ></indexterm
1030 ></term>
1031       <listitem
1032 ><para
1033 ><screen
1034 >tamañolienzo X;Y</screen
1035 >Con la orden <userinput
1036 >tamañolienzo</userinput
1037 > puede modificar las dimensiones del lienzo. Requiere de X e Y como parámetros de entrada, donde X es el ancho en <glossterm linkend="pixels"
1038 >píxeles</glossterm
1039 > del nuevo lienzo, e Y es la altura del nuevo lienzo también en <glossterm linkend="pixels"
1040 >píxeles</glossterm
1041 >. <userinput
1042 >tamañolienzo</userinput
1043 > puede abreviarse como <userinput
1044 >tl</userinput
1045 >.</para
1046 ></listitem>
1047     </varlistentry>
1048   </variablelist>
1049   <variablelist>
1050     <anchor id="setbgcolor"/>
1051     <varlistentry
1052 > 
1053       <term
1054 >colorlienzo (cl)<indexterm
1055 ><primary
1056 >colorlienzo (cl)</primary
1057 ></indexterm
1058 ></term>
1059       <listitem
1060 ><para
1061 ><screen
1062 >colorlienzo R;G;B</screen
1063 ><userinput
1064 >colorlienzo</userinput
1065 > define el color del lienzo. El parámetro de entrada de <userinput
1066 >colorlienzo</userinput
1067 > es una <glossterm linkend="rgb"
1068 >combinación RGB</glossterm
1069 >. <userinput
1070 >colorlienzo</userinput
1071 > puede abreviarse como <userinput
1072 >cl</userinput
1073 >.</para
1074 ></listitem>
1075     </varlistentry>
1076   </variablelist>
1077 </sect2>
1078 
1079 <sect2 id="clean">
1080 <title
1081 >Comandos para limpiar</title>
1082 <para
1083 >Existen dos comandos que permiten limpiar el lienzo después de un embrollo.</para>
1084   <variablelist>
1085     <anchor id="clear"/>
1086     <varlistentry
1087 > 
1088       <term
1089 >limpiar (lmp)<indexterm
1090 ><primary
1091 >limpiar (lmp)</primary
1092 ></indexterm
1093 ></term>
1094       <listitem
1095 ><para
1096 ><screen
1097 >limpiar</screen
1098 >Con <userinput
1099 >limpiar</userinput
1100 > puede borrar todos los dibujos del lienzo. Todo lo demás permanece: la posición y ángulo de la tortuga, el color del lienzo, la visibilidad de la tortuga y el tamaño del lienzo. </para
1101 ></listitem>
1102     </varlistentry>
1103   </variablelist>
1104   <variablelist>
1105     <anchor id="reset"/>
1106     <varlistentry
1107 > 
1108       <term
1109 >reiniciar<indexterm
1110 ><primary
1111 >reiniciar</primary
1112 ></indexterm
1113 ></term>
1114       <listitem
1115 ><para
1116 ><screen
1117 >reiniciar</screen
1118 ><userinput
1119 >reiniciar</userinput
1120 > borra todo de una forma más concienzuda que la orden <userinput
1121 >limpiar</userinput
1122 >. Después de una orden <userinput
1123 >reiniciar</userinput
1124 >, todo vuelve a como estaba cuando inició &kturtle;. La tortuga regresará a su posición en el centro del lienzo, el color del lienzo volverá a ser blanco, la tortuga dibujará de nuevo una línea negra en el lienzo y el tamaño del lienzo será 400x400 píxeles.</para
1125 ></listitem>
1126     </varlistentry>
1127   </variablelist>
1128 </sect2>
1129 
1130 <sect2 id="sprites">
1131 <title
1132 >La tortuga es un duendecillo</title>
1133 <para
1134 >Antes de nada conviene explicar qué son los sprites: los duendecillos son pequeñas figuras que pueden desplazarse por la pantalla, como vemos con frecuencia en los videojuegos. Nuestra tortuga también es un duendecillo. Para obtener más información, consulta la entrada en el glosario correspondiente a los <glossterm linkend="sprites"
1135 >duendecillos</glossterm
1136 >.</para>
1137 <para
1138 >A continuación, encontrarás una descripción detallada de todas las órdenes relacionadas con duendecillos.</para>
1139 <note
1140 ><para
1141 >La versión actual de &kturtle; no admite otro duendecillo aparte de la tortuga. En las versiones futuras sí que podrá cambiar la tortuga por algo diseñado por usted mismo.</para
1142 ></note>
1143   <variablelist>
1144     <anchor id="spriteshow"/>
1145     <varlistentry
1146 > 
1147       <term
1148 >mostrartortuga (mt)<indexterm
1149 ><primary
1150 >mostrartortuga (mt)</primary
1151 ></indexterm
1152 ></term>
1153       <listitem
1154 ><para
1155 ><screen
1156 >mostrartortuga</screen
1157 ><userinput
1158 >mostrartortuga</userinput
1159 > vuelve visible de nuevo a la tortuga después de haberla ocultado. <userinput
1160 >mostrartortuga</userinput
1161 > puede abreviarse como <userinput
1162 >mt</userinput
1163 >.</para
1164 ></listitem>
1165     </varlistentry>
1166   </variablelist>
1167   <variablelist>
1168     <anchor id="spritehide"/>
1169     <varlistentry
1170 > 
1171       <term
1172 >ocultartortuga (ot)<indexterm
1173 ><primary
1174 >ocultartortuga (ot)</primary
1175 ></indexterm
1176 ></term>
1177       <listitem
1178 ><para
1179 ><screen
1180 >ocultartortuga</screen
1181 ><userinput
1182 >ocultartortuga</userinput
1183 > oculta la tortuga. Puede usarse cuando la tortuga no quede bien en su dibujo. <userinput
1184 >ocultartortuga</userinput
1185 > puede abreviarse como <userinput
1186 >ot</userinput
1187 >.</para
1188 ></listitem>
1189     </varlistentry>
1190   </variablelist>
1191 </sect2>
1192 
1193 <sect2 id="writing">
1194 <title
1195 >¿La tortuga puede escribir?</title>
1196 <para
1197 >La respuesta es «sí». La tortuga puede escribir: escribirá todo lo que le ordenes.</para>
1198   <variablelist>
1199     <anchor id="print"/>
1200     <varlistentry
1201 > 
1202       <term
1203 >escribir<indexterm
1204 ><primary
1205 >escribir</primary
1206 ></indexterm
1207 ></term>
1208       <listitem
1209 ><para
1210 ><screen
1211 >escribir X</screen
1212 >La orden <userinput
1213 >escribir</userinput
1214 > le indica a la tortuga que escriba algo en el lienzo. El parámetro de entrada de <userinput
1215 >escribir</userinput
1216 > puede ser un número o una cadena. Puedes concatenar varios números y cadenas usando el símbolo «+». Aquí tienes un ejemplo sencillo: <screen
1217 >$año = 2003
1218 $autor = "Cies"
1219 escribir $autor + " comenzó a trabajar en el proyecto KTurtle en " + $año + " y todavía disfruta haciéndolo"
1220 </screen>
1221       </para
1222 ></listitem>
1223     </varlistentry>
1224   </variablelist>
1225   <variablelist>
1226     <anchor id="fontsize"/>
1227     <varlistentry
1228 > 
1229       <term
1230 >tamañoletra<indexterm
1231 ><primary
1232 >tamañoletra</primary
1233 ></indexterm
1234 ></term>
1235       <listitem
1236 ><para
1237 ><screen
1238 >tamañoletra X</screen
1239 ><userinput
1240 >tamañoletra</userinput
1241 > fija el tamaño del tipo de letra que usa la orden <userinput
1242 >escribir</userinput
1243 >. El parámetro de entrada de <userinput
1244 >tamañoletra</userinput
1245 > tiene que ser un número. El tamaño viene determinado en <glossterm linkend="pixels"
1246 >píxeles</glossterm
1247 >.</para
1248 ></listitem>
1249     </varlistentry>
1250   </variablelist>
1251 </sect2>
1252 
1253 <sect2 id="math-commands">
1254 <title
1255 >Órdenes aritméticas</title>
1256 <para
1257 >Las siguientes son algunas de las órdenes aritméticas más avanzadas de &kturtle;.</para>
1258   <variablelist>
1259     <anchor id="round"/>
1260     <varlistentry>
1261       <term
1262 >redondear<indexterm
1263 ><primary
1264 >redondear</primary
1265 ></indexterm
1266 ></term>
1267       <listitem
1268 ><para
1269 ><screen
1270 >redondear(X)</screen
1271 >Permite <userinput
1272 >redondear</userinput
1273 > el número dado a su entero más cercano. <screen>
1274 escribir redondear(10,8)
1275 avanzar 20
1276 escribir redondear(10,3)
1277 </screen
1278 > Este código hace que la tortuga escriba los números 11 y 10.</para
1279 ></listitem>
1280     </varlistentry>
1281   </variablelist>
1282   <variablelist>
1283     <anchor id="random"/>
1284     <varlistentry
1285 > 
1286       <term
1287 >aleatorio (alt)<indexterm
1288 ><primary
1289 >aleatorio (alt)</primary
1290 ></indexterm
1291 ></term>
1292       <listitem
1293 ><para
1294 ><screen
1295 >aleatorio X;Y</screen
1296 ><userinput
1297 >aleatorio</userinput
1298 > es una orden que requiere de parámetros de entrada y que devuelve un parámetro de salida. Como parámetros de entrada, necesita dos números, el primero (X) fija el valor mínimo del parámetro de salida, y el segundo (Y) fija su valor máximo. El parámetro de salida es un número elegido al azar que es igual o más grande que el valor mínimo, e igual o más pequeño que el valor máximo. Aquí tiene un ejemplo sencillo: <screen>
1299 repetir 500 {
1300   $x = aleatorio 1;20
1301   avanzar $x
1302   izquierda 10 - $x
1303 }
1304 </screen
1305 > Con la orden <userinput
1306 >aleatorio</userinput
1307 > puedes incorporar algo de caos a tu programa.</para
1308 ></listitem>
1309     </varlistentry>
1310   </variablelist>
1311   <variablelist>
1312     <anchor id="mod"/>
1313     <varlistentry
1314 > 
1315       <term
1316 >mod<indexterm
1317 ><primary
1318 >mod</primary
1319 ></indexterm
1320 ></term>
1321       <listitem
1322 ><para
1323 ><screen
1324 >mod X,Y</screen
1325 >La orden <userinput
1326 >mod</userinput
1327 > devuelve el resto de la división del primer número entre el segundo número.</para
1328 ></listitem>
1329     </varlistentry>
1330   </variablelist>
1331   <variablelist>
1332     <anchor id="sqrt"/>
1333     <varlistentry
1334 > 
1335       <term
1336 >raíz<indexterm
1337 ><primary
1338 >raíz</primary
1339 ></indexterm
1340 ></term>
1341       <listitem
1342 ><para
1343 ><screen
1344 >raíz X</screen
1345 >La orden <userinput
1346 >raíz</userinput
1347 > sirve para calcular la raíz cuadrada de un número X.</para
1348 ></listitem>
1349     </varlistentry>
1350   </variablelist>
1351 <!--
1352   <variablelist>
1353     <anchor id="exp"/>
1354     <varlistentry
1355 > 
1356       <term
1357 >exp<indexterm
1358 ><primary
1359 >exp</primary
1360 ></indexterm
1361 ></term>
1362       <listitem
1363 ><para
1364 ><screen
1365 >sqrt X</screen>
1366       </para
1367 ></listitem>
1368     </varlistentry>
1369   </variablelist>
1370 -->
1371   <variablelist>
1372     <anchor id="pi"/>
1373     <varlistentry
1374 > 
1375       <term
1376 >pi<indexterm
1377 ><primary
1378 >pi</primary
1379 ></indexterm
1380 ></term>
1381       <listitem
1382 ><para
1383 ><screen
1384 >pi</screen
1385 >Esta orden devuelve el valor del número Pi, <userinput
1386 >3,14159</userinput
1387 >.</para
1388 ></listitem>
1389     </varlistentry>
1390   </variablelist>
1391   <variablelist>
1392     <anchor id="sin"/>
1393     <anchor id="cos"/>
1394     <anchor id="tan"/>
1395     <varlistentry>
1396       <term
1397 >sen<indexterm
1398 ><primary
1399 >sen</primary
1400 ></indexterm
1401 >, cos<indexterm
1402 ><primary
1403 >cos</primary
1404 ></indexterm
1405 >, tan<indexterm
1406 ><primary
1407 >tan</primary
1408 ></indexterm
1409 ></term>
1410       <listitem
1411 ><para>
1412 <screen
1413 >sen X
1414 cos X
1415 tan X
1416 </screen
1417 >Estas tres órdenes representan las famosas funciones trigonométricas <userinput
1418 >sen</userinput
1419 >, <userinput
1420 >cos</userinput
1421 > y <userinput
1422 >tan</userinput
1423 >. El parámetro de entrada de estas tres órdenes, X, es un <link linkend="number"
1424 >número</link
1425 >.</para
1426 ></listitem>
1427     </varlistentry>
1428   </variablelist>
1429   <variablelist>
1430     <anchor id="arcsin"/>
1431     <anchor id="arccos"/>
1432     <anchor id="arctan"/>
1433     <varlistentry>
1434       <term
1435 >arcsen<indexterm
1436 ><primary
1437 >arcsen</primary
1438 ></indexterm
1439 >, arccos<indexterm
1440 ><primary
1441 >arccos</primary
1442 ></indexterm
1443 >, arctan<indexterm
1444 ><primary
1445 >arctan</primary
1446 ></indexterm
1447 ></term>
1448       <listitem
1449 ><para>
1450 <screen
1451 >arcsen X
1452 arccos X
1453 arctan X
1454 </screen
1455 >Estas tres órdenes son las funciones inversas de <link linkend="sin"
1456 >sen</link
1457 >, <link linkend="cos"
1458 >cos</link
1459 > y <link linkend="tan"
1460 >tan</link
1461 >. El parámetro de entrada de estas órdenes, X, es un  <link linkend="number"
1462 >número</link
1463 >.</para
1464 ></listitem>
1465     </varlistentry>
1466   </variablelist>
1467 </sect2>
1468 
1469 <sect2 id="dialogs">
1470 <title
1471 >Entrada e información mediante diálogos</title>
1472 <para
1473 >Un diálogo es una pequeña ventana emergente que proporciona información o que solicita un parámetro de entrada. &kturtle; tiene dos órdenes relacionadas con diálogos: <userinput
1474 >mensaje</userinput
1475 > y <userinput
1476 >preguntar</userinput
1477 >.</para>
1478   <variablelist>
1479     <anchor id="message"/>
1480     <varlistentry
1481 > 
1482       <term
1483 >mensaje<indexterm
1484 ><primary
1485 >mensaje</primary
1486 ></indexterm
1487 ></term>
1488       <listitem
1489 ><para
1490 ><screen
1491 >mensaje X</screen
1492 >La orden <userinput
1493 >mensaje</userinput
1494 > necesita una <link linkend="string"
1495 >cadena</link
1496 > como parámetro de entrada. Muestra una ventana emergente con el texto de la <link linkend="string"
1497 >cadena</link
1498 >. <screen
1499 >mensaje "Cies comenzó a trabajar en el proyecto KTurtle en 2003 y todavía disfruta haciéndolo"
1500 </screen>
1501       </para
1502 ></listitem>
1503     </varlistentry>
1504   </variablelist>
1505   <variablelist>
1506     <anchor id="ask"/>
1507     <varlistentry
1508 > 
1509       <term
1510 >preguntar<indexterm
1511 ><primary
1512 >preguntar</primary
1513 ></indexterm
1514 ></term>
1515       <listitem
1516 ><para
1517 ><screen
1518 >preguntar X</screen
1519 ><userinput
1520 >preguntar</userinput
1521 > necesita una <link linkend="string"
1522 >cadena</link
1523 > como parámetro de entrada. Muestra el texto de la cadena en una ventana emergente (igual que hace <link linkend="message"
1524 >mensaje</link
1525 >) junto a un campo de entrada. Una vez que el usuario ha introducido un <link linkend="number"
1526 >número</link
1527 > o una <link linkend="string"
1528 >cadena</link
1529 >, el resultado puede guardarse en una  <link linkend="assignment-of-variables"
1530 >variable</link
1531 > o pasarse como un argumento a otra <link linkend="commands"
1532 >orden</link
1533 >. Por ejemplo: <screen>
1534 $entrada = preguntar "¿En qué año naciste?"
1535 $salida = 2003 - $entrada
1536 escribir "En 2003 tenías " + salida + " años."
1537 </screen
1538 > Si el usuario cancela el diálogo de entrada o no introduce ningún valor, la <link linkend="assignment-of-variables"
1539 >variable</link
1540 > queda vacía.</para
1541 ></listitem>
1542     </varlistentry>
1543   </variablelist>
1544 </sect2>
1545 
1546 </sect1>
1547 
1548 
1549 
1550 <sect1 id="assignment-of-variables">
1551 <title
1552 >Asignar valores a las variables</title>
1553 <para
1554 >Antes de nada, echemos un vistazo a las variables, después veremos cómo asignarles valores. </para>
1555 
1556 <para
1557 >Las variables son palabras que comienzan con un <quote
1558 >$</quote
1559 >; en el <link linkend="the-editor"
1560 >editor</link
1561 >, aparecen <glossterm
1562 >resaltadas</glossterm
1563 > en color morado.</para>
1564 
1565 <para
1566 >Las variables pueden contener un <link linkend="number"
1567 >número</link
1568 >, una <link linkend="string"
1569 >cadena</link
1570 > o un <link linkend="boolean-value"
1571 >valor lógico (verdadero/falso)</link
1572 >. Con el signo de asignación (<userinput
1573 >=</userinput
1574 >) se da un valor a la variable, que mantendrá hasta que el programa termine de ejecutarse o hasta que se le asigne un nuevo valor.</para>
1575 
1576 <para
1577 >Puedes usar las variables, una vez asignadas, de la misma forma que usarías su contenido. Por ejemplo, vea el siguiente código de &turtlescript;: <screen>
1578 $x = 10
1579 $x = $x / 3
1580 escribir $x
1581 </screen
1582 > Primero, a la variable  <userinput
1583 >$x</userinput
1584 > se le asigna el valor <userinput
1585 >10</userinput
1586 >. A continuación, a esta misma variable  <userinput
1587 >$x</userinput
1588 > se le asigna su propio valor dividido por <userinput
1589 >3</userinput
1590 >, es decir, a la variable <userinput
1591 >$x</userinput
1592 > se da el valor <userinput
1593 >10 / 3</userinput
1594 >. Finalmente, se escribe <userinput
1595 >$x</userinput
1596 >. En las líneas dos y tres, comprobará que se usa la variable  <userinput
1597 >$x</userinput
1598 > como si fuera un número.</para>
1599 
1600 <para
1601 >A las variables hay que asignarles un valor para que puedan ser usadas. Por ejemplo:<screen>
1602 escribir $n
1603 </screen
1604 > Este código da lugar a un mensaje de error.</para>
1605 
1606 <para
1607 >Considera el siguiente código de &turtlescript;: <screen>
1608 $a = 2004
1609 $b = 25
1610 
1611 # la siguiente orden escribe "2029"
1612 escribir $a + $b
1613 retroceder 30
1614 # la siguiente orden escribe  "2004 más 25 igual a 2029"
1615 escribir $a + " más " + $b + " es igual a " + ($a + $b)
1616 </screen
1617 > En las primeras dos líneas, a las variables <userinput
1618 >$a</userinput
1619 > y <userinput
1620 >$b</userinput
1621 > se les asigna los valores 2004 y 25. A continuación hay dos órdenes <userinput
1622 >escribir</userinput
1623 > con una orden <userinput
1624 >retroceder 30</userinput
1625 > en medio. Los comentarios que hay antes de las órdenes <userinput
1626 >escribir</userinput
1627 > explican lo que hacen. Como ves, puedes usar las variables de la misma forma que usarías sus contenidos. Es decir, puedes usarlas con cualquier <link linkend="operators"
1628 >operador</link
1629 > o convertirlas en el parámetro de entrada de una <link linkend="commands"
1630 >orden</link
1631 >.</para>
1632 
1633 <para
1634 >Un nuevo ejemplo: <screen>
1635 $nombre = preguntar "¿Cuál es tu nombre?"
1636 escribir "¡Hola " + $nombre + "! Buena suerte con el aprendizaje del arte del programar..."
1637 </screen
1638 > Este ejemplo es muy claro. De nuevo, aquí tiene como la variable <userinput
1639 >$name</userinput
1640 > se trata como si fuera una cadena.</para>
1641 
1642 <para
1643 >Cuando estés usando variables, el <link linkend="the-inspector"
1644 >inspector</link
1645 > te puede ser de gran ayuda. Muestra el contenido de todas las variables que están en uso en un momento dado.</para>
1646 </sect1>
1647 
1648 
1649 
1650 <sect1 id="controlling-execution">
1651 <title
1652 >Cómo controlar la ejecución</title>
1653 <para
1654 >Los controladores de la ejecución permiten, tal como su nombre indica, controlar la ejecución.</para>
1655 <para
1656 >Las órdenes de control de la ejecución aparecen <glossterm
1657 >resaltadas</glossterm
1658 > en negro y con un tipo de letra negrita. Las llaves, que se usan generalmente junto con los controladores de ejecución, aparecen <glossterm
1659 >resaltadas</glossterm
1660 > en negro.</para>
1661 
1662 <sect2 id="wait">
1663 <title
1664 >Cómo hacer que la tortuga espere</title>
1665 <para
1666 >Si ya has programado algo en &kturtle;, te habrás dado cuenta de que la tortuga es muy rápida dibujando. Con esta orden puede hacer que la tortuga se detenga durante un tiempo determinado.</para>
1667   <variablelist>
1668     <varlistentry>
1669       <term
1670 >esperar<indexterm
1671 ><primary
1672 >esperar</primary
1673 ></indexterm
1674 ></term>
1675       <listitem
1676 ><para
1677 ><screen
1678 >esperar X</screen
1679 ><userinput
1680 >esperar</userinput
1681 > hace que la tortuga se detenga durante X segundos. <screen>
1682 repetir 36 {
1683   avanzar 5
1684   derecha 10
1685   esperar 0,5
1686 }
1687 </screen
1688 > Este código dibuja un circulo, pero la tortuga espera durante medio segundo antes de realizar el siguiente paso. Esto da la impresión de que la  tortuga se está moviendo a cámara lenta.</para
1689 ></listitem>
1690     </varlistentry>
1691   </variablelist>
1692 </sect2>
1693 
1694 <sect2 id="if">
1695 <title
1696 >Ejecutar <quote
1697 >si</quote
1698 ></title>
1699   <variablelist>
1700     <varlistentry>
1701       <term
1702 >si<indexterm
1703 ><primary
1704 >si</primary
1705 ></indexterm
1706 ></term>
1707       <listitem
1708 ><para
1709 ><screen
1710 >si <link linkend="boolean-value"
1711 >valor lógico</link
1712 > { ... }</screen
1713 >El código que está entre llaves solo se ejecutará <userinput
1714 >si</userinput
1715 > el <link linkend="boolean-value"
1716 >valor lógico</link
1717 > es «verdadero». <screen>
1718 $x = 6
1719 si $x &gt; 5 {
1720   escribir $x + " es mayor que cinco"
1721 }
1722 </screen
1723 > En la primer línea, a <userinput
1724 >$x</userinput
1725 > se le asigna el valor 6. En la segunda, se usa un <link linkend="comparing-operators"
1726 >operador de comparación</link
1727 > para evaluar la condición <userinput
1728 >$x &gt; 5</userinput
1729 >. Al cumplirse esta condición, es decir, al ser 6 mayor que 5, el controlador <userinput
1730 >si</userinput
1731 > permite que el código entre llaves se ejecute.</para
1732 ></listitem>
1733     </varlistentry>
1734   </variablelist>
1735 </sect2>
1736 
1737 <sect2 id="else">
1738 <title
1739 >Si no es así: «sino»</title>
1740   <variablelist>
1741     <varlistentry>
1742       <term
1743 >sino<indexterm
1744 ><primary
1745 >sino</primary
1746 ></indexterm
1747 ></term>
1748       <listitem
1749 ><para
1750 ><screen
1751 >si <link linkend="boolean-value"
1752 >valor lógico</link
1753 > { ... } sino { ... }</screen
1754 ><userinput
1755 >sino</userinput
1756 > puede usarse en conjunción con el controlador <link linkend="if"
1757 ><userinput
1758 >si</userinput
1759 ></link
1760 >. El código que aparece entre llaves después de <userinput
1761 >sino</userinput
1762 > solo se ejecute si el <link linkend="boolean-value"
1763 >valor lógico</link
1764 > es «falso». <screen>
1765 reiniciar
1766 $x = 4
1767 si $x &gt; 5 {
1768   escribir $x + " es mayor que cinco"
1769 }
1770 sino {
1771   escribir $x + " es menor que seis"
1772 }
1773 </screen
1774 > El <link linkend="comparing-operators"
1775 >operador de comparación</link
1776 > evalúa la expresión <userinput
1777 >$x &gt; 5</userinput
1778 >. Ya que en este caso 4 no es mayor que 5, el resultado es «falso». Esto quiere decir que se ejecuta el código que aparece entre llaves después de <userinput
1779 >sino</userinput
1780 >.</para
1781 ></listitem>
1782     </varlistentry>
1783   </variablelist>
1784 </sect2>
1785 
1786 <sect2 id="while">
1787 <title
1788 >El bucle «mientras»</title>
1789   <variablelist>
1790     <varlistentry>
1791       <term
1792 >mientras<indexterm
1793 ><primary
1794 >mientras</primary
1795 ></indexterm
1796 ></term>
1797       <listitem
1798 ><para
1799 ><screen
1800 >mientras <link linkend="boolean-value"
1801 >valor lógico</link
1802 > { ... }</screen
1803 >El controlador <userinput
1804 >mientras</userinput
1805 > actúa de forma similar a <link linkend="if"
1806 ><userinput
1807 >si</userinput
1808 ></link
1809 >. La diferencia es que <userinput
1810 >mientras</userinput
1811 > continúa ejecutando (en un bucle) el código que se encuentra entre llaves hasta que el <link linkend="boolean-value"
1812 >valor lógico</link
1813 > sea «falso». <screen>
1814 $x = 1
1815 mientras $x &lt; 5 {
1816   avanzar 10
1817   esperar 1
1818   $x = $x + 1
1819 }
1820 </screen
1821 >En la primer línea, a <userinput
1822 >$x</userinput
1823 > se le asigna el valor 1. En la segunda, se evalúa la condición <userinput
1824 >$x &lt; 5</userinput
1825 >. Mientras el resultado de esta condición sea «verdadero», el controlador <userinput
1826 >while</userinput
1827 > continúa ejecutando el código que se encuentra entre llaves, así hasta que la condición <userinput
1828 >$x &lt; 5</userinput
1829 > sea «falsa». En este ejemplo, el código entre llaves se ejecuta 4 veces, porque cada vez que la quinta línea se ejecuta, al valor de <userinput
1830 >$x</userinput
1831 > se le suma 1.</para
1832 ></listitem>
1833     </varlistentry>
1834   </variablelist>
1835 </sect2>
1836 
1837 <sect2 id="repeat">
1838 <title
1839 >El bucle «repetir»</title>
1840   <variablelist>
1841     <varlistentry>
1842       <term
1843 >repetir<indexterm
1844 ><primary
1845 >repetir</primary
1846 ></indexterm
1847 ></term>
1848       <listitem
1849 ><para
1850 ><screen
1851 >repetir <link linkend="number"
1852 >número</link
1853 > { ... }</screen
1854 >El controlador <userinput
1855 >repetir</userinput
1856 > actúa de forma similar a  <link linkend="while"
1857 ><userinput
1858 >mientras</userinput
1859 ></link
1860 >. La diferencia es que <userinput
1861 >repetir</userinput
1862 > continúa ejecutando (en un bucle) el código que se encuentra entre llaves tantas veces como le indica el número dado.</para
1863 ></listitem>
1864     </varlistentry>
1865   </variablelist>
1866 </sect2>
1867 
1868 <sect2 id="for">
1869 <title
1870 >El bucle «para», un bucle que cuenta</title>
1871   <variablelist>
1872     <varlistentry>
1873       <term
1874 >para<indexterm
1875 ><primary
1876 >para</primary
1877 ></indexterm
1878 ><indexterm
1879 ><primary
1880 >hasta</primary
1881 ></indexterm
1882 ><indexterm
1883 ><primary
1884 >paso</primary
1885 ></indexterm
1886 ></term>
1887       <listitem
1888 ><para
1889 ><screen
1890 >para <link linkend="assignment-of-variables"
1891 >variable</link
1892 > = <link linkend="number"
1893 >número</link
1894 > hasta <link linkend="number"
1895 >número</link
1896 > { ... }</screen
1897 >El bucle <userinput
1898 >para</userinput
1899 > es un «bucle que cuenta», &ie;, que lleva la cuenta por ti. El primer número asigna a la variable el valor del primer bucle. Con cada bucle, este número se incrementa hasta alcanzar el segundo número. <screen>
1900 para $x = 1 hasta 10 {
1901   escribir $x * 7
1902   avanzar 15
1903 }
1904 </screen
1905 > Cada vez que se ejecute el código entre llaves, la variable <userinput
1906 >$x</userinput
1907 > se incrementa en 1, así hasta que sea igual a 10. El código entre llaves escribe el valor de <userinput
1908 >$x</userinput
1909 > multiplicado por 7. Cuando el código termine de ejecutarse, verás en el lienzo la tabla de multiplicar del 7. </para>
1910      <para
1911 >El incremento predeterminado del bucle es 1, pero puedes usar otro valor con: <screen
1912 >para <link linkend="assignment-of-variables"
1913 >variable</link
1914 > = <link linkend="number"
1915 >número</link
1916 > hasta <link linkend="number"
1917 >número</link
1918 > paso <link linkend="number"
1919 >número</link
1920 > { ... }</screen
1921 ></para
1922 ></listitem>
1923     </varlistentry>
1924   </variablelist>
1925 </sect2>
1926 
1927 <sect2 id="break">
1928 <title
1929 >Interrumpir un bucle</title>
1930   <variablelist>
1931     <varlistentry>
1932       <term
1933 >parar<indexterm
1934 ><primary
1935 >parar</primary
1936 ></indexterm
1937 ></term>
1938       <listitem
1939 ><para
1940 ><screen
1941 >parar</screen
1942 >Interrumpe inmediatamente el bucle que se está ejecutando y transfiere el control a la primera línea de código después del bucle. </para
1943 ></listitem>
1944     </varlistentry>
1945   </variablelist>
1946 </sect2>
1947 
1948 <sect2 id="exit">
1949 <title
1950 >Interrumpir la ejecución de tu programa</title>
1951   <variablelist>
1952     <varlistentry>
1953       <term
1954 >salir<indexterm
1955 ><primary
1956 >salir</primary
1957 ></indexterm
1958 ></term>
1959       <listitem
1960 ><para
1961 ><screen
1962 >salir</screen
1963 >Detiene la ejecución de tu programa.</para
1964 ></listitem>
1965     </varlistentry>
1966   </variablelist>
1967 </sect2>
1968 
1969 <sect2 id="assert">
1970 <title
1971 >Comprobación de afirmaciones en tiempo de ejecución</title>
1972   <variablelist>
1973     <varlistentry>
1974       <term
1975 >afirmar<indexterm
1976 ><primary
1977 >afirmar</primary
1978 ></indexterm
1979 ></term>
1980       <listitem
1981 ><para
1982 ><screen
1983 >afirmar<link linkend="boolean-value"
1984 >valor lógico</link
1985 > { ... }</screen
1986 >Se puede utilizar para razonar sobre la corrección del programa o de los datos de entrada <screen
1987 >$in = ask "What is your year of birth?"
1988 # el año debe ser positivo
1989 assert $in 
1990 > 0
1991 </screen
1992 ></para
1993 ></listitem>
1994     </varlistentry>
1995   </variablelist>
1996 </sect2>
1997 </sect1>
1998 
1999 
2000 <sect1 id="learn">
2001 
2002 <title
2003 >Crea tus propias órdenes con «aprender»</title>
2004 <para
2005 ><userinput
2006 >aprender</userinput
2007 ><indexterm
2008 ><primary
2009 >aprender</primary
2010 ></indexterm
2011 > es especial ya que lo puedes usar para crear tus propias órdenes. La orden que crees puede admitir <glossterm linkend="input-output"
2012 >parámetros de entrada</glossterm
2013 > y devolver <glossterm linkend="input-output"
2014 >parámetros de salida</glossterm
2015 >. Veamos cómo se crea una nueva orden:<screen>
2016 aprender círculo $x {
2017   repetir 36 {
2018     avanzar $x
2019     izquierda 10
2020   }
2021 }
2022 </screen
2023 > La nueva orden se denomina <userinput
2024 >círculo</userinput
2025 >. <userinput
2026 >círculo</userinput
2027 > necesita un <glossterm linkend="input-output"
2028 >parámetro de entrada</glossterm
2029 > para fijar el tamaño del círculo y no devuelve ningún <glossterm linkend="input-output"
2030 >parámetro de salida</glossterm
2031 >. A partir de ahora la orden <userinput
2032 >círculo</userinput
2033 > puede usarse como una orden normal en cualquier lugar del código. Mira este ejemplo: <screen
2034 >aprender círculo $x {
2035   repetir 36 { 
2036     avanzar $x 
2037     izquierda 10 
2038   }
2039 }
2040 
2041 ir 200;200
2042 círculo 20
2043 
2044 ir 300;200 
2045 círculo 40  
2046 </screen>
2047 </para>
2048 <para
2049 >En el próximo ejemplo, se crea una orden que devuelve un parámetro de salida<indexterm
2050 ><primary
2051 >parámetro de salida</primary
2052 ></indexterm
2053 >: <screen>
2054 aprender facultad $x {
2055   $r = 1
2056   para $i = 1 hasta $x {
2057     $r = $r * $i
2058   }
2059   devolver $r
2060 }
2061 
2062 escribir facultad 5
2063 </screen
2064 >En este ejemplo, se crea una nueva orden llamada <userinput
2065 >facultad</userinput
2066 >. Si el parámetro de entrada es <userinput
2067 >5</userinput
2068 >, entonces el parámetro de salida es <userinput
2069 >5*4*3*2*1</userinput
2070 >. Con <userinput
2071 >devolver</userinput
2072 > se define un <glossterm linkend="input-output"
2073 >parámetro de salida</glossterm
2074 > que se devuelve durante la ejecución.</para>
2075 <para
2076 >Las órdenes pueden tener más de un <glossterm linkend="input-output"
2077 >parámetro de entrada</glossterm
2078 >. En el siguiente ejemplo se crea una orden que dibuja un rectángulo: <screen>
2079 aprender caja $x;$y {
2080   avanzar $y
2081   derecha 90
2082   avanzar $x
2083   derecha 90
2084   avanzar $y
2085   derecha 90
2086   avanzar $x
2087   derecha 90
2088 }
2089 </screen
2090 > Ahora, si ejecuta <userinput
2091 >caja 50;100</userinput
2092 >, la tortuga dibujará una rectángulo en el lienzo. </para>
2093   
2094 </sect1>
2095 
2096 </chapter>