1
<!--Dear translator: please NEVER translate the id or anything inside the tags as they are needed in english by the application
2
Thanks a lot in advance.-->
3
1
<chapter id="reference">
5
>Guía de referencia del programador de &kturtle; &logo;</title>
3
>Guía del lenguaje de programación &turtlescript; </title>
7
>Esta es la guía de referencia para el programador de &kturtle; &logo;. Comenzaremos, en este capítulo, introduciendo brevemente los <link linkend="different-instructions"
8
>diferentes tipos de instrucciones</link
9
>. Luego, seguiremos uno a uno con la explicación de los <link linkend="commands"
11
>. Más adelante, nos referiremos a las <link linkend="containers"
13
>, <link linkend="math"
14
>los operadores matemáticos</link
15
>, <link linkend="questions"
16
>los condicionales</link
17
> y los <link linkend="controlling-execution"
18
>estructuras de control</link
19
>. Finalmente, aprenderemos a crear nuestras propias funciones, mediante el comando <link linkend="learn"
5
>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"
7
> de los programas de &turtlescript;. La segunda sección trata exclusivamente los <link linkend="mathematical-operators"
8
>operadores aritméticos</link
9
>, los <link linkend="boolean-operators"
10
>operadores lógicos (verdadero/falso)</link
11
> y los <link linkend="comparing-operators"
12
>operadores de comparación</link
13
>. La tercera sección es, básicamente, una gran lista con todos las <link linkend="commands"
15
> explicadas una a una. La cuarta sección explica cómo <link linkend="assignment-of-variables"
16
>asignar valores a las variables</link
17
>. Finalmente, en la quinta sección se explica cómo organizar la ejecución de órdenes usando <link linkend="controlling-execution"
18
>declaraciones de control de la ejecución</link
19
> y, en la sexta, cómo puede crear sus propias órdenes con <link linkend="learn"
23
<sect1 id="different-instructions">
25
>Los diferentes tipos de instrucciones</title>
27
>Como cualquier otro lenguaje, LOGO tiene diferentes tipos de palabras y símbolos. Aquí se explican brevemente las características de los distintos grupos y las diferencias existentes entre ellos.</para>
25
>La gramática de &turtlescript;</title>
27
>Como ocurre con todos los lenguajes, &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>
29
>En esta sección se explican brevemente los distintos tipos de palabras que usa &turtlescript;. Se introduce lo que son <link linkend="comment"
31
>, <link linkend="command"
33
> y los tres diferentes tipos de literales: <link linkend="number"
35
>, <link linkend="string"
37
> y <link linkend="boolean-value"
38
>valores lógicos (verdadero/falso)</link
46
>Un programa consiste 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
48
> se considera como un comentario en &turtlescript;. Un ejemplo es este programa que no hace nada: <screen>
49
# este programa no hace nada, es solo un comentario
51
> Es un programa inútil, pero permite explicar bien el asunto.</para>
53
>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á comentarios que se usan junto con la orden <link linkend="print"
56
# este programa ha sido creado por Cies Breijs
57
escribir "este texto aparecerá escrito en el lienzo"
58
# la línea anterior no es un comentario, pero la siguiente sí que lo es:
59
# escribir "¡este texto no aparecerá escrito!"
61
> La primera línea describe el programa. La segunda línea es ejecutada por &kturtle;, que escribe en el lienzo <userinput
62
>este texto aparecerá escrito en el lienzo</userinput
63
>. 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
65
>, &kturtle; ejecutaría la orden de escribir. Lo que los programadores suelen decir es que la orden de escribir se ha «comentado».</para>
67
>Las líneas comentadas aparecen <glossterm
68
>resaltadas</glossterm
69
> en gris claro en el <link linkend="the-editor"
70
>editor de código</link
29
74
<sect2 id="command">
33
>Los comandos nos permiten pedirle a la tortuga (o &kturtle;) que realice una acción determinada. Algunos comandos requieren información (parámetros), mientras que otros devuelven información. <screen
34
># avanzar solicita un número como parámetro (en este caso, pasaremos el 100):
78
>Con las órdenes puede 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>
79
# avanzar es una orden que requiere de un parámetro de entrada, en este caso el número 100:
82
> La primera línea es un <link linkend="comment"
84
>. La segunda línea contiene la orden <userinput
86
> y el <link linkend="number"
90
>. El número no es parte de la orden, es solo su parámetro de entrada.</para>
39
>Podemos ver una descripción detallada de todos los comandos que &kturtle; soporta <link linkend="commands"
92
>Para una descripción detallada de todas las órdenes que reconoce &kturtle;, vaya <link linkend="commands"
94
>. Las órdenes integradas en &kturtle; aparecen <glossterm
95
>resaltadas</glossterm
96
> en azul oscuro.</para>
44
99
<sect2 id="number">
48
>Seguramente ya conocerás bastante acerca de los números. De hecho, la forma en la cual utilizaremos los números en &kturtle; no es muy diferente de como lo hacemos en el habla o las matemáticas. </para>
103
>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>
50
>Tenemos los llamados números naturales: <userinput
105
>Tenemos los llamados números naturales («<userinput
62
>, etc. Los enteros negativos: <userinput
117
>», etc.), los enteros negativos («<userinput
68
>, etc. Y los números con decimales <userinput
123
>», etc.), y los números con decimales («<userinput
80
>Los números pueden utilizarse en <link linkend="questions"
82
> y <link linkend="math"
83
>cálculos matemáticos</link
84
>.. Y también pueden ponerse dentro de <link linkend="containers"
135
>Los números pueden utilizarse en conjunción con <link linkend="mathematical-operators"
136
>operadores aritméticos</link
137
> y <link linkend="comparing-operators"
138
>operadores de comparación</link
139
>. También pueden guardarse en <link linkend="assignment-of-variables"
88
>Los números se <glossterm
90
> con azul en el <link linkend="the-code-editor"
91
>editor de código</link
141
>. Los números aparecen <glossterm
142
>resaltados</glossterm
143
> en rojo oscuro.</para>
146
<!-- constants like pi? -->
95
148
<sect2 id="string">
99
>Comenzaremos con un ejemplo:<screen>
152
>Primero un ejemplo: <screen>
100
153
escribir "Hola, soy una cadena."
102
> En nuestro ejemplo, <userinput
155
> En este ejemplo, <userinput
103
156
>escribir</userinput
104
> es un comando. Este comando toma como parámetro de entrada una cadena: "Hola, soy una cadena." (la forma de indicarle a &kturtle; que estamos trabajando con una cadena, es delimitar el texto en cuestión entre comillas dobles: "...").</para>
106
>Las cadenas pueden utilizarse dentro de <link linkend="containers"
108
>. Pero no es posible utilizarlas en <link linkend="questions"
110
> y cálculos matemáticos..</para>
112
>Las cadenas se <glossterm
114
> con rojo oscuro en el <link linkend="the-code-editor"
115
>editor de código</link
124
>A medida que utilicemos el lenguaje de programación &logo;, iremos generando nuestras propias estructuras. Con frecuencia, haremos uso de las <link linkend="containers"
126
>, y en muchos casos invocaremos al comando <link linkend="learn"
128
> para crear nuestras nuevas funciones. Al crear un <link linkend="containers"
130
> o una nueva función con <link linkend="learn"
132
>, tendremos que darle un nombre a nuestra nueva estructura.</para>
134
>Así, podremos utilizar cualquier nombre, siempre y cuando no este siendo ya utilizado por algún comando (es decir, un nombre no puede ser una palabra reservada para un comando de KTurtle). Por ejemplo, no es posible utilizar el nombre <link linkend="forward"
136
> por ser este el nombre de un comando KTurtle.
138
#Lo siguiente, nos daría un mensaje de error: avanzar = 20
139
#Como avanzar es un comando, lo que corresponde es: avanzar 20
141
Todo nombre debe comenzar con una letra. A partir de allí, pueden contener tanto letras, como números o guiones bajos (_). </para>
143
>Más adelante veremos a las <link linkend="containers"
145
> y al comando <link linkend="learn"
147
> en más detalle. </para>
150
<sect2 id="assignment">
152
>Asignaciones</title>
154
>Las asignaciones se realizan con el símbolo <userinput
156
>. En los lenguajes de programación entendemos el símbolo <userinput
158
>, diciendo que tal variable toma el valor de, y no diciendo que tal variable es igual a. Decir que una variable es igual a, es más apropiado para el símbolo <userinput
160
> que no es una asignación sino un <link linkend="questions"
164
>Las asignaciones se utilizan por lo general por dos motivos: (1) para dar contenido a una <link linkend="containers"
166
>, y (2) para modificar el contenido de una variable. Por ejemplo: <screen
168
# la variable x toma el valor del número 10
170
# la variable W toma ahora el valor de la cadena "Mi edad es: "
171
# Ahora, imprimimos el valor de ambas variables en el área de dibujo.
176
>Para ver más ejemplos podemos consultar la sección <link linkend="containers"
181
<sect2 id="math-symbols">
183
>Símbolos matemáticos</title>
185
>&kturtle; soporta todas las operaciones matemáticas básicas: suma (<userinput
157
> es una orden y <userinput
158
>"Hola, soy una cadena."</userinput
159
> es una cadena. Las cadenas comienzan y terminan con dobles comillas (<userinput
161
>); es esto lo que hace que &kturtle; las identifique como tal.</para>
163
>Al igual que ocurre con los <link linkend="number"
165
>, las cadenas también pueden ser guardadas en <link linkend="assignment-of-variables"
167
>. Sin embargo, al contrario que los números, las cadenas no pueden usarse con <link linkend="mathematical-operators"
168
>operadores aritméticos </link
169
> o con <link linkend="comparing-operators"
170
>operadores de comparación</link
171
>. Las cadenas aparecen <glossterm
172
>resaltadas</glossterm
176
<sect2 id="boolean-value">
178
>Valores lógicos (verdadero/falso)</title>
180
>Hay solo dos valores lógicos: <userinput
181
>verdadero</userinput
184
>, aunque en ocasiones se los denomina «sí» y «no», o «uno» y «cero». Pero en &turtlescript; siempre los llamaremos <userinput
185
>verdadero</userinput
188
>. Fíjese en este código de &turtlescript;: <screen>
191
> Si le echa un vistazo al <link linkend="the-inspector"
193
> verá que a la <link linkend="assignment-of-variables"
197
> le corresponde el valor <userinput
198
>verdadero</userinput
199
> y que es de tipo lógico.</para>
201
>Con frecuencia, los valores lógicos son el resultado de un <link linkend="comparing-operators"
202
>operador de comparación</link
203
>, como ocurre en el siguiente ejemplo: <screen>
204
$respuesta = 10 > 3
206
> A la <link linkend="assignment-of-variables"
209
>$respuesta</userinput
210
> le corresponde el valor <userinput
211
>verdadero</userinput
214
> es mayor que <userinput
218
>Los valores lógicos <userinput
219
>verdadero</userinput
222
> aparecen <glossterm
223
>resaltados</glossterm
224
> en rojo oscuro.</para>
231
<sect1 id="operators">
233
>Operadores aritméticos, lógicos y de comparación</title>
235
>Aunque el título de esta sección parezca complejo, verá como el contenido no es tan difícil como parece.</para>
237
<sect2 id="mathematical-operators">
239
>Operadores aritméticos</title>
241
>Estos son los símbolos aritméticos básicos: suma (<userinput
187
243
>), resta (<userinput
191
247
>), división (<userinput
193
>) y los parentesis, <userinput
249
>) y potenciación (<userinput
254
>Este es un ejemplo de cómo usar los operadores aritméticos en &turtlescript;: <screen>
257
$multiplicar = 15 * 2
261
> Los valores resultantes de estas operaciones aritméticos son <link linkend="assignment-of-variables"
262
>asignados a variables</link
263
>. Puede ver los valores resultantes en el <link linkend="the-inspector"
267
>Si lo que quiere es realizar un cálculo simple, puede hacer algo como esto: <screen
272
>Ahora veamos un ejemplo con paréntesis: <screen>
273
escribir ( ( 20 - 5 ) * 2 / 30 ) + 1
275
> Las operaciones dentro de los paréntesis se calculan primero. 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>
277
>&kturtle; también tiene otras funciones aritméticas en forma de órdenes. Eche un vistazo a las siguientes órdenes, eso sí, teniendo en cuenta que se trata de operaciones avanzadas: <link linkend="round"
279
>, <link linkend="random"
281
>, <link linkend="sqrt"
283
>, <link linkend="pi"
285
>, <link linkend="sin"
287
>, <link linkend="cos"
289
>, <link linkend="tan"
291
>, <link linkend="arcsin"
293
>, <link linkend="arccos"
295
>, <link linkend="arctan"
300
<sect2 id="boolean-operators">
302
>Operadores lógicos (verdadero/falso)</title>
304
>Mientras que los <link linkend="mathematical-operators"
305
>operadores aritméticos</link
306
> se usan principalmente con <link linkend="number"
308
>, los operadores lógicos están pensados para ser usados con <link linkend="boolean-value"
309
>valores lógicos</link
311
>verdadero</userinput
199
>Para una explicación más completa, podemos consultar la sección <link linkend="math"
204
<sect2 id="question">
206
>Condicionales</title>
208
>Podemos establecer condiciones simples en las cuales la respuesta será simplemente verdadero o falso.</para>
210
>El uso de los condicionales se explica detalladamente en la sección <link linkend="questions"
215
<sect2 id="questions-glue">
217
>Operadores lógicos</title>
219
>Mediante los operadores lógicos se pueden combinar condicionales. Los operadores lógicos están representados por <userinput
314
>). Hay solo tres operadores lógicos: <userinput
227
>El uso de los operadores lógicos se explica detalladamente en la sección <link linkend="questions"
320
>. El siguiente código de &turtlescript; muestra cómo usarlos: <screen>
321
$y_1_1 = verdadero y verdadero # -> verdadero
322
$y_1_0 = verdadero y falso # -> falso
323
$y_0_1 = falso y verdadero # -> falso
324
$y_0_0 = falso y falso # -> falso
326
$o_1_1 = verdadero o verdadero # -> verdadero
327
$o_1_0 = verdadero o falso # -> verdadero
328
$o_0_1 = falso o verdadero # -> verdadero
329
$o_0_0 = falso o falso # -> falso
331
$no_1 = no verdadero # -> falso
332
$no_0 = no falso # -> verdadero
334
> Puede ver los valores resultantes en el <link linkend="the-inspector"
336
>, aunque también se le proporcionan pequeños comentarios al final de las líneas. <userinput
338
> resulta en <userinput
339
>verdadero</userinput
340
> solo si ambos lados son <userinput
341
>verdaderos</userinput
344
> resulta en <userinput
345
>verdadero</userinput
346
> si uno de los dos lados es <userinput
347
>verdadero</userinput
350
> transforma <userinput
351
>verdadero</userinput
357
>verdadero</userinput
360
>Los operadores lógicos aparecen <glossterm
361
>resaltados</glossterm
364
<sect3 id="boolean-operators-advanced-examples">
366
>Unos ejemplos más complejos:</title>
368
>Considere el siguiente ejemplo con <userinput
373
si (($a < 10) y ($b == 5)) y ($a < $b) {
377
> En este código de &turtlescript;, el resultado de los tres <link linkend="comparing-operators"
378
>operadores de comparación</link
379
> están agrupados mediante los operadores <userinput
381
>. Esto significa que los tres resultados tienen que ser iguales a «verdadero» para que se escriba la palabra «hola».</para>
384
>Un ejemplo con <userinput
388
si ($n < 10) o ($n == 2) {
392
> En este código de &turtlescript;, la parte izquierda del operador <userinput
394
> es «verdadera», mientras que la derecha es «falsa». Ya que una de las dos partes del operador <userinput
396
> es «verdadera», el resultado de la operación también lo es. Esto quiere decir que se escribe la palabra «hola».</para>
399
>Finalmente, un ejemplo con <userinput
401
>, que transforma «verdadero» en «falso» y «falso» en verdadero». Fíjese: <screen
406
escribir "no hola ;-)"
413
<sect2 id="comparing-operators">
415
>Operadores de comparación</title>
237
>Los comentarios son líneas que comienzan con <userinput
239
>. Por ejemplo:<screen>
240
#Esto es un comentario
241
escribir "Esto no es un comentario"
242
#Así, la línea anterior no era un comentario, pero la próxima lo será:
243
#escribir "Esto no se mostrará porque es un comentario."
417
>Considere esta comparación sencilla: <screen>
418
$respuesta = 10 > 3
245
> La utilidad de los comentarios reside tanto en la posibilidad de dar una breve explicación acerca del código, como en la de apartar momentáneamente ciertas líneas de la ejecución, sin tener que borrarlas.</para>
247
>Las líneas comentadas se <glossterm
249
> en amarillo oscuro en el <link linkend="the-code-editor"
250
>editor de código</link
422
> se compara con <userinput
424
> usando el operador «más grande que». El resultado de esta operación, es decir, el <link linkend="boolean-value"
427
>verdadero</userinput
428
>, se guarda en la <link linkend="assignment-of-variables"
431
>$respuesta</userinput
434
>Todos los <link linkend="number"
436
> y <link linkend="assignment-of-variables"
438
> (que contengan números) pueden ser comparados entre sí usando operadores de comparación.</para>
440
>Estos son todos los posibles operadores de comparación: <table
442
>Tipos de preguntas</title
453
>la respuesta es «verdadera» si <userinput
455
> es igual a <userinput
467
>la respuesta es «verdadera» si <userinput
469
> no es igual a <userinput
479
>más grande que</entry
481
>la respuesta es «verdadera» si <userinput
483
> es más grande que <userinput
493
>más pequeño que</entry
495
>la respuesta es «verdadera» si <userinput
497
> es más pequeño que <userinput
504
>A >= B</userinput
507
>más grande o igual que</entry
509
>la respuesta es «verdadera» si <userinput
511
> es más grande o igual que <userinput
518
>A <= B</userinput
521
>más pequeño o igual que</entry
523
>la respuesta es «verdadera» si <userinput
525
> es más pequeño o igual que <userinput
532
> Tenga en cuenta que A y B tienen que ser <link linkend="number"
534
> o <link linkend="assignment-of-variables"
536
> que contengan números.</para>
257
544
<sect1 id="commands">
261
>Los comandos nos permiten pedirle a la tortuga de &kturtle;, que realice una acción determinada. De este modo, algunos comandos requieren tomar información (parámetros), mientras que otros devuelven información. A partir de aquí, y hasta el final de esta sección, explicaremos todos los comandos de &kturtle;, los cuales aparecerán <glossterm
262
>resaltados</glossterm
263
> en el <link linkend="the-code-editor"
264
>editor de código</link
265
> en verde oscuro.</para>
548
>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, puede usar <link linkend="learn"
550
> para crear sus propias órdenes. Las órdenes que van a detallarse aquí aparecen <glossterm
551
>resaltadas</glossterm
552
> en azul oscuro.</para>
267
554
<sect2 id="moving-the-turtle">
269
>Moviendo la tortuga</title>
556
>Cómo mover la tortuga</title>
271
>Disponemos de varios comandos que nos permitirán desplazar a la tortuga a lo largo y ancho de la pantalla.</para>
275
>avanzar (avz)</title>
558
>Hay varias órdenes que permiten mover la tortuga por la pantalla.</para>
561
<anchor id="forward"/>
565
>avanzar (avz)<indexterm
567
>avanzar (avz)</primary
286
575
>avanzar</userinput
287
> hace que la tortuga se adelante X pixels. Cuando la pluma esté abajo, la tortuga dejará un trazo. <userinput
576
> desplaza la tortuga hacia delante X píxeles. Cuando el pincel está bajado, la tortuga deja a su paso un trazo. <userinput
288
577
>avanzar</userinput
289
578
> puede abreviarse como <userinput
296
<sect3 id="backward">
298
>retroceder (rtd)</title>
585
<anchor id="backward"/>
589
>retroceder (ret)<indexterm
591
>retroceder (ret)</primary
307
597
>retroceder X</screen>
309
599
>retroceder</userinput
310
> hace retroceder la tortuga X pixels. Cuando la pluma esté abajo, la tortuga dejará un trazo. <userinput
600
> hace retroceder la tortuga X píxeles. Cuando el pincel está bajado, la tortuga deja a su paso un trazo. <userinput
311
601
>retroceder</userinput
312
602
> puede abreviarse como <userinput
319
<sect3 id="turnleft">
321
>izquierda (izq)</title>
609
<anchor id="turnleft"/>
613
>izquierda (izq)<indexterm
615
>izquierda (izq)</primary
330
621
>izquierda X</screen>
332
623
>izquierda</userinput
333
> le pide a la tortuga que rote X grados hacia la izquierda. <userinput
624
> le ordena a la tortuga que rote X grados hacia la izquierda. <userinput
334
625
>izquierda</userinput
335
626
> puede abreviarse como <userinput
342
<sect3 id="turnright">
344
>derecha (dch)</title>
633
<anchor id="turnright"/>
637
>derecha (der)<indexterm
639
>derecha (der)</primary
353
645
>derecha X</screen>
355
647
>derecha</userinput
356
> le pide a la tortuga que rote X grados hacia la derecha. <userinput
648
> le ordena a la tortuga que rote X grados hacia la derecha. <userinput
357
649
>derecha</userinput
358
650
> puede abreviarse como <userinput
365
<sect3 id="direction">
367
>dirección (dir)</title>
657
<anchor id="direction"/>
661
>dirección (dir)<indexterm
663
>dirección (dir)</primary
376
669
>dirección X</screen>
378
671
>dirección</userinput
379
> determina el ángulo de dirección de la tortuga medido en X grados, contando desde cero. Es decir, que no es relativo a la dirección anterior de la tortuga. <userinput
672
> 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
380
673
>dirección</userinput
381
> se puede abreviar como <userinput
674
> puede abreviarse como <userinput
402
> desplaza la tortuga al centro del área de dibujo (lienzo).</para
421
> le indica a la tortuga que debe ir a al lugar (X, Y) del área de dibujo (lienzo). Esto significa, contando a partir del la esquina superior izquierda , X <glossterm linkend="pixels"
423
> hacia la derecha e Y <glossterm linkend="pixels"
425
>hacia abajo. Vale aclarar que al utilizar el comando <userinput
427
>, la tortuga no dibujará una línea en su trayectoría.</para
681
<anchor id="center"/>
696
> mueve la tortuga al centro del lienzo.</para
716
> le ordena a la tortuga que se desplace a una posición concreta del lienzo. Esta posición está a X <glossterm linkend="pixels"
718
> del margen izquierdo del lienzo, y a Y <glossterm linkend="pixels"
720
> del margen superior del lienzo. </para
446
> al utilizar este comando la tortuga se desplazará a X <glossterm linkend="pixels"
448
> contando desde la izquierda del área de dibujo, mientras que se mantendrá a la misma altura.</para
740
> le ordena a la tortuga que vaya a una posición que está a X <glossterm linkend="pixels"
742
> del margen izquierdo del lienzo, sin modificar su altura. </para
467
> al utilizar este comando la tortuga se desplazará a Y <glossterm linkend="pixels"
469
> contando desde la parte superior del área de dibujo, mientras que se mantendrá a la misma distancia de los bordes laterales.</para
762
> le ordena a la tortuga que vaya a una posición que está a Y <glossterm linkend="pixels"
764
> del margen superior del lienzo, sin modificar la distancia a la que se encuentre del margen izquierdo.</para
770
>Con las órdenes <userinput
778
>, la tortuga no dibuja ningún trazo, independientemente de que el pincel esté bajado o no.</para>
782
<sect2 id="locate-the-turtle">
784
>¿Dónde está la tortuga?</title>
786
>Hay dos órdenes que devuelven la posición de la tortuga en la pantalla.</para>
802
> devuelve el número de píxeles desde el margen izquierdo del lienzo de la posición actual de la tortuga.</para
820
> devuelve el número de píxeles desde el margen superior del lienzo de la posición actual del la tortuga.</para
478
>La tortuga tiene una pluma</title>
828
>La tortuga tiene un pincel</title>
480
>La tortuga tiene una pluma, y va dibujando una línea al desplazarse. Existen algunos comandos que controlan esta pluma. Aquí, explicaremos estos comandos.</para>
483
>levantarpluma (lpl)</title>
830
>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>
488
>levantarpluma</term>
836
>levantarpincel (lpl)<indexterm
838
>levantarpincel (lpl)</primary
492
>levantarpluma</screen>
844
>levantarpincel</screen>
494
>levantarpluma</userinput
495
> levanta la pluma del área de dibujo. Cuando la pluma está <quote
497
> la tortuga no trazará ninguna línea a su paso. El comando <userinput
499
> puede también abreviarse <userinput
846
>levantarpincel</userinput
847
> alza el pincel del lienzo. Cuando el pincel está «levantado», la tortuga no deja ningún trazo cuando se desplaza. Vea también <userinput
848
>bajarpincel</userinput
850
>levantarpincel</userinput
851
> puede abreviarse como <userinput
508
>bajarpluma (bpl)</title>
858
<anchor id="pendown"/>
862
>bajarpincel (bpl)<indexterm
864
>bajarpincel (bpl)</primary
870
>bajarpincel</screen>
519
>bajarpluma</userinput
520
> presiona la pluma sobre el área de dibujo. Cuando la pluma está <quote
522
> la tortuga trazará una línea a su paso. El comando <userinput
523
>bajarpluma</userinput
524
> puede también abreviarse <userinput
872
>bajarpincel</userinput
873
> presiona el pincel sobre el lienzo. Cuando el pincel está «bajado», la tortuga deja un trazo a su paso. Vea también <userinput
874
>levantarpincel</userinput
876
>bajarpincel</userinput
877
> puede abreviarse como <userinput
531
<sect3 id="setpenwidth">
533
>grosorpluma (apl)</title>
884
<anchor id="setpenwidth"/>
888
>grosorpincel (gpl)<indexterm
890
>grosorpincel (gpl)</primary
542
>grosorpluma X</screen>
896
>grosorpincel X</screen>
544
>grosorpluma</userinput
545
> determina el grosor de la línea trazada por la tortuga en X <glossterm linkend="pixels"
547
>.El comando <userinput
548
>grosorpluma</userinput
898
>grosorpincel</userinput
899
> fija el grosor de la línea trazada por la tortuga en X <glossterm linkend="pixels"
902
>grosorpincel</userinput
549
903
> puede abreviarse como <userinput
556
<sect3 id="setfgcolor">
558
>colorpluma (cpl)</title>
910
<anchor id="setfgcolor"/>
914
>colorpincel (cpl)<indexterm
916
>colorpincel (cpl)</primary
567
>colorpluma R, V, A </screen>
922
>colorpincel R;G;B </screen>
569
>colorpluma</userinput
570
> determina el color de la línea trazada por la tortuga. El comando <userinput
571
>colorpluma</userinput
572
> toma una <glossterm linkend="rgb"
573
>combinación RGB (RVA)</glossterm
574
> como parámetro de entrada. <userinput
575
>colorpluma</userinput
924
>colorpincel</userinput
925
> fija el color del pincel. El parámetro de entrada de <userinput
926
>colorpincel</userinput
927
> es una <glossterm linkend="rgb"
928
>combinación RGB</glossterm
930
>colorpincel</userinput
576
931
> puede abreviarse como <userinput
585
939
<sect2 id="canvas">
587
>Comandos que controlan el área de dibujo</title>
941
>Órdenes que controlan el lienzo</title>
589
>Tenemos varios comandos que podremos utilizar para controlar el área de dibujo.</para>
590
<sect3 id="resizecanvas">
592
>tamañolienzo (tad)</title>
943
>Existen varias órdenes que controlan el lienzo.</para>
945
<anchor id="resizecanvas"/>
948
>tamañolienzo (tl)<indexterm
950
>tamañolienzo (tl)</primary
600
>tamañolienzo X, Y</screen>
601
Con el comando <userinput
956
>tamañolienzo X;Y</screen>
957
Con la orden <userinput
602
958
>tamañolienzo</userinput
603
> podemos redimensionar el área de dibujo. Toma dos parámetros de entrada, X e Y, los cuales representan respectivamente el ancho y el alto en <glossterm linkend="pixels"
605
>. El comando <userinput
959
> puede redimensionar el lienzo. Requiere de X e Y como parámetros de entrada, donde X es el ancho en <glossterm linkend="pixels"
961
> del nuevo lienzo, e Y es la altura del nuevo lienzo también en <glossterm linkend="pixels"
606
964
>tamañolienzo</userinput
607
965
> puede abreviarse como <userinput
614
<sect3 id="setbgcolor">
616
>colorlienzo (cad)</title>
972
<anchor id="setbgcolor"/>
976
>colorlienzo (cl)<indexterm
978
>colorlienzo (cl)</primary
625
>colorlienzo R, V, A</screen>
984
>colorlienzo R;G;B</screen>
627
986
>colorlienzo</userinput
628
> define el color del área de dibujo. <userinput
987
> define el color del lienzo. El parámetro de entrada de <userinput
629
988
>colorlienzo</userinput
630
> toma una <glossterm linkend="rgb"
989
> es una <glossterm linkend="rgb"
631
990
>combinación RGB</glossterm
632
> como parámetro de entrada. <userinput
633
>canvascolor</userinput
992
>colorlienzo</userinput
634
993
> puede abreviarse como <userinput
653
El comando <userinput
657
> la (<glossterm linkend="wrapping"
658
>envoltura</glossterm
659
>) del área de dibujo. En el glosario encontraremos más información acerca del concepto de <glossterm linkend="wrapping"
660
>envoltura</glossterm
677
>desenvolver</screen>
678
El comando <userinput
679
>desenvolver</userinput
682
> la (<glossterm linkend="wrapping"
683
>envoltura</glossterm
684
>) del área de dibujo. De nuevo, en el glosario encontraremos más información acerca del concepto de <glossterm linkend="wrapping"
685
>envoltura</glossterm
693
1001
<sect2 id="clean">
695
>Comandos para la limpieza</title>
1003
>Comandos para limpiar</title>
697
>Existen dos comandos que ordenarán un poco las cosas.</para>
700
>limpiar (lmp)</title>
1005
>Existen dos comandos que permiten limpiar el lienzo después de un embrollo.</para>
1007
<anchor id="clear"/>
1011
>limpiar (lmp)<indexterm
1013
>limpiar (lmp)</primary
709
1019
>limpiar</screen>
711
1021
>limpiar</userinput
712
> dejaremos el área de dibujo totalmente en limpio. Sin embargo, todas las demás condiciones como ángulo de la tortuga, color del área de dibujo, etc. permanecerán intactas. Puede abreviarse el comando <userinput
714
> puede abreviarse como <userinput
1022
> 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
1027
<anchor id="reset"/>
1031
>reiniciar<indexterm
734
>restaurar</userinput
735
> limpia todo el entorno, a diferencia de <userinput
1041
>reiniciar</userinput
1042
> borra todo de una forma más concienzuda que la orden <userinput
736
1043
>limpiar</userinput
737
> que solo deja en limpio el área de dibujo. Luego de <userinput
738
>restaurar</userinput
739
>, todo vuelve al estado en el que &kturtle; estaba al iniciarse: la tortuga se posiciona en el medio del área de dibujo, el color de fondo es blanco, y el color de línea negro.</para
1044
>. Después de una orden <userinput
1045
>reiniciar</userinput
1046
>, 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
746
1052
<sect2 id="sprites">
748
>La tortuga es una imagen movil</title>
1054
>La tortuga es un sprite</title>
750
>Comenzaremos con una breve explicación sobre lo que significa una imágen móvil en este contexto: las imágenes móviles son pequeñas figuras que pueden moverse al rededor de la pantalla, como las que vemos en los juegos de computadora. Entonces, nuestra tortuga es una imagen móvil. Obtendremos más información en el glosario bajo <glossterm linkend="sprites"
751
>imágenes móviles</glossterm
1056
>Antes de nada conviene explicar qué son los sprites: los sprites (en inglés «duendecillos») son pequeñas figuras que puedes desplazarse por la pantalla, como lo que vemos con frecuencua en los videojuegos. Nuestra tortuga también es un sprite. Para obtener más información, vea la entrada en el glosario correspondiente a los <glossterm linkend="sprites"
754
>A continuación encontraremos una descripción detallada de todos los comandos que podemos utilizar para manejar las imágenes móviles.</para>
1060
>A continuación encontrará una descripción detallada de todas las órdenes relacionadas con sprites.</para>
756
>[La versión actual de &kturtle; no soporta todavía el uso de otras imágenes móviles más allá de la tortuga. Pero esto puede cambiar en las próximas versiones.]</para>
757
<sect3 id="spriteshow">
759
>mostrartortuga</title>
1062
>(La versión actual de &kturtle; no admite otro sprite que la tortuga. En las versiones futuras sí que podrá cambiar la tortuga por algo diseñado por usted mismo.)</para>
1064
<anchor id="spriteshow"/>
764
>mostrartortuga (mt)</term>
1068
>mostrartortuga (mt)<indexterm
1070
>mostrartortuga (mt)</primary
768
1076
>mostrartortuga</screen>
770
1078
>mostrartortuga</userinput
771
> hace la tortuga visible luego de haberla ocultado. Puede abreviarse al comando <userinput
1079
> vuelve visible de nuevo a la tortuga después de haberla ocultado. <userinput
772
1080
>mostrartortuga</userinput
1081
> puede abreviarse como <userinput
780
<sect3 id="spritehide">
782
>ocultartortuga</title>
1088
<anchor id="spritehide"/>
787
>ocultartortuga</term>
1092
>ocultartortuga (ot)<indexterm
1094
>ocultartortuga (ot)</primary
791
1100
>ocultartortuga</screen>
793
1102
>ocultartortuga</userinput
794
> oculta la tortuga. Esto puede utilizarse si la tortuga no luciera bien dentro de nuestro dibujo. <userinput
1103
> oculta la tortuga. Puede usarse cuando la tortuga no quede bien en su dibujo. <userinput
795
1104
>ocultartortuga</userinput
796
1105
> puede abreviarse como <userinput
805
1113
<sect2 id="writing">
807
>¿Esta tortuga sabe escribir escribir?</title>
1115
>¿La tortuga puede escribir?</title>
809
>La respuesta es <quote
811
>, la tortuga puede escribir cualquier cosa que le pidamos.</para>
1117
>La respuesta es «sí». La tortuga puede escribir: escribirá todo lo que usted le ordene.</para>
1119
<anchor id="print"/>
823
1131
>escribir X</screen>
824
El comando <userinput
826
> se utiliza para que la tortuga escriba algo sobre el área de dibujo. <userinput
828
> acepta cadenas alfanuméricas como parámetro de entrada. Es posible concatenar los parámetros de <userinput
830
> mediante el símbolo <quote
832
>. Veamos el siguiente ejemplo: <screen
835
escribir autor + "comenzó a trabajar en el proyecto KTurtle en el año" + año + "y todavía disfruta haciéndolo"
1133
>escribir</userinput
1134
> le indica a la tortuga que escriba algo en el lienzo. El parámetro de entrada de <userinput
1135
>escribir</userinput
1136
> puede ser un número o una cadena. Puede concatenar varios números y cadenas usando el símbolo «+». Aquí tiene un ejemplo sencillo: <screen
1139
escribir $autor + " comenzó a trabajar en el proyecto KTurtle en " + $año + " y todavía disfruta haciéndolo"
842
<sect3 id="fontsize">
844
>tamañofuente</title>
1146
<anchor id="fontsize"/>
1150
>tamañoletra<indexterm
1152
>tamañoletra</primary
853
>tamañofuente X</screen>
1158
>tamañoletra X</screen>
855
>tamañofuente</userinput
856
> determina el tamaño en <glossterm linkend="pixels"
858
>de la tipografía utilizada por <userinput
1160
>tamañoletra</userinput
1161
> fija el tamaño del tipo de letra que usa la orden <userinput
859
1162
>escribir</userinput
861
>tamañofuente</userinput
862
> toma una entrada numérica.</para
1163
>. El parámetro de entrada de <userinput
1164
>tamañoletra</userinput
1165
> tiene que ser un número. El tamaño viene determinado en <glossterm linkend="pixels"
1173
<sect2 id="math-commands">
871
>Un comando que tira los dados por nosotros</title>
1175
>Órdenes aritméticas</title>
873
>Existe un comando que tira los dados por nosotros: <userinput
874
>aleatorio</userinput
1177
>Las siguientes son algunas de las órdenes aritméticas más avanzadas de &kturtle;.</para>
1179
<anchor id="round"/>
1182
>redondear<indexterm
1190
>redondear(X)</screen>
1192
>redondear</userinput
1193
> el número dado a su entero más cercano. <screen>
1194
escribir redondear(10,8)
1196
escribir redondear(10,3)
1198
> Este código hace que la tortuga escriba los números 11 y 10.</para
1203
<anchor id="random"/>
1207
>aleatorio (alt)<indexterm
1209
>aleatorio (alt)</primary
884
>aleatorio X,Y</screen>
1215
>aleatorio X;Y</screen>
886
1217
>aleatorio</userinput
887
> es un comando que toma dos parámetro de entrada, X e Y, y devuelve un número. La X y la Y representa respectivamente el mínimo y el máximo que podrá tomar el valor de salida. Dicho valor de salida es un número dentro de ese intervalo cerrado. Veamos aquí un pequeño ejemplo:<screen>
1218
> 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>
894
> Utilizando el comando <userinput
1225
> Con esta orden <userinput
895
1226
>aleatorio</userinput
896
> podemos agregar un poco de incertidumbre a nuestro programa.</para
1227
> puede incorporar algo de caos a su programa.</para
1247
> sirve para calcular la raíz cuadrada de un número X.</para
1285
Esta orden devuelve el valor del número Pi, <userinput
1317
Estas tres órdenes representan las famosas funciones trigonométricas <userinput
1323
>. El parámetro de entrada de estas tres órdenes, X, es un <link linkend="number"
1330
<anchor id="arcsin"/>
1331
<anchor id="arccos"/>
1332
<anchor id="arctan"/>
1355
Estas tres órdenes son la funciones inversas de <link linkend="sin"
1357
>, <link linkend="cos"
1359
> y <link linkend="tan"
1361
>. El parámetro de entrada de estas órdenes, X, es un <link linkend="number"
904
1371
>Entrada y salida mediante diálogos</title>
906
>Un diálogo es una ventana emergente la cual puede proveer alguna información o pedir que se le pasen datos. &kturtle; se encarga de los diálogos mediante <userinput
1373
>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
907
1374
>mensaje</userinput
1376
>preguntar</userinput
1379
<anchor id="message"/>
922
1391
>mensaje X</screen>
923
El comando <userinput
924
1393
>mensaje</userinput
925
> toma una <link linkend="string"
926
>cadena alfanumérica</link
927
> como parámetro de entrada, generando un diálogo emergente que contiene la <link linkend="string"
932
escribir autor + "comenzó a trabajar en el proyecto KTurtle en el año" + año + "y todavía disfruta haciéndolo"
1394
> necesita una <link linkend="string"
1396
> como parámetro de entrada. Muestra una ventana emergente con el texto de la <link linkend="string"
1399
>mensaje "Cies comenzó a trabajar en el proyecto KTurtle en 2003 y todavía disfruta haciéndolo"
939
<sect3 id="inputwindow">
1410
>preguntar<indexterm
1418
>preguntar X</screen>
953
> toma una <link linkend="string"
1420
>preguntar</userinput
1421
> necesita una <link linkend="string"
955
> como parámetro de entrada y nos muestra un diálogo emergente con el texto dado, tal como lo hace <link linkend="message"
1423
> como parámetro de entrada. Muestra el texto de la cadena en una ventana emergente (igual que hace <link linkend="message"
957
>. Sin embargo, también muestra una casilla que permitirá al usuario ingresar tanto<link linkend="number"
959
> como <link linkend="string"
960
>cadenas alfanuméricas</link
961
> y pueden ser guardados en una <link linkend="containers"
1425
>) junto a un campo de entrada. Una vez que el usuario ha introducido un <link linkend="number"
1427
> o una <link linkend="string"
1429
>, el resultado puede guardarse en una <link linkend="assignment-of-variables"
963
>. Por ejemplo, <screen>
964
entrada = pregunta "Cual es tu edad?"
1431
> o pasarse como un argumento a otra <link linkend="commands"
1433
>. Por ejemplo: <screen>
1434
$entrada = preguntar "¿En qué año naciste?"
1435
$salida = 2003 - $entrada
966
1436
escribir "En 2003 tenías " + salida + " años."
968
> Cuando el usuario cancela el diálogo o no ingresa nada, la<link linkend="containers"
1438
> Si el usuario cancela el diálogo de entrada o no introduce ningún valor, la <link linkend="assignment-of-variables"
970
> quedará vacía.</para
1440
> queda vacía.</para
981
<sect1 id="containers">
985
>Las variables son letras o cadenas de texto que pueden ser utilizadas por el programador para guardar información dentro de ellas. Las variables que contienen números son llamadas <link linkend="variables"
986
>variables numéricas</link
987
>, las que contienen cadenas de texto se llaman <link linkend="string"
988
>variables alfanuméricas</link
992
>Las variables no utilizadas, están vacías. Por ejemplo:<screen>
995
> No mostrará nada hasta que no declaremos a N. Si intentamos realizar <link linkend="math"
996
>operaciones matemáticas</link
997
> con variables no declaradas, obtendremos un error. </para>
999
<sect2 id="variables">
1001
>Variables numéricas</title>
1003
>Para comenzar, veamos un ejemplo<screen>
1007
> En la primera línea declaramos a <userinput
1009
> como una variable numérica que contiene el valor 3. En la segunda línea, se muestra el valor de <userinput
1011
> en el área de dibujo.</para>
1013
>Observemos que si hubiéramos querido imprimir la letra <quote
1015
>, deberíamos haber escrito: <screen
1020
>Ahora veamos un ejemplo algo más complejo: <screen>
1025
# el próximo comando muestra "2029"
1028
# el próximo comando muestra "2004 más 25"
1029
escribir A + " más " + B
1450
<sect1 id="assignment-of-variables">
1452
>Asignar valores a las variables</title>
1454
>Antes de nada, echemos un vistazo a las variables, después veremos cómo asignarles valores. </para>
1457
>Las variables son palabras que comienzan con un <quote
1459
>; en el <link linkend="the-editor"
1461
>, aparecen <glossterm
1462
>resaltadas</glossterm
1463
> en color púrpura.</para>
1466
>Las variables pueden contener un <link linkend="number"
1468
>, una <link linkend="string"
1470
> o un <link linkend="boolean-value"
1471
>valor lógico (verdadero/falso)</link
1472
>. Con el signo de asignación (<userinput
1474
>) 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>
1477
>Puede usar las variables, una vez asignadas, de la misma forma que usaría su contenido. Por ejemplo, vea el siguiente código de &turtlescript;: <screen>
1482
> Primero, a la variable <userinput
1484
> se le asigna el valor <userinput
1486
>. A continuación, a esta misma variable <userinput
1488
> se le asigna su propio valor dividido por <userinput
1490
>, es decir, a la variable <userinput
1492
> se da el valor <userinput
1494
>. Finalmente, se escribe <userinput
1496
>. En las líneas dos y tres, comprobará que se usa la variable <userinput
1498
> como si fuera un número.</para>
1501
>A las variables hay que asignarles un valor para que puedan ser usadas. Por ejemplo:<screen>
1504
> Este código da lugar a un mensaje de error.</para>
1507
>Considere ahora el siguiente código de &turtlescript;: <screen>
1511
# la próxima orden escribe "2029"
1031
#el próximo comando muestra "1979"
1514
# la próxima orden escribe "2004 más 25 igual a 2029"
1515
escribir $a + " más " + $b + " es igual a " + ($a + $b)
1034
> En las primeras dos líneas, se declaran las variables <userinput
1517
> En las primeras dos líneas, a las variables <userinput
1038
> y se les asigna los valores 2004 y 25. En la tercer línea se le asigna la operación <userinput
1040
> (2029) a la variable <userinput
1042
>. El resto del código consiste en 3 <userinput
1043
>escribir</userinput
1045
>retroceder 30 </userinput
1049
<sect2 id="strings">
1051
>Variables alfanuméricas</title>
1053
>En general, en los lenguajes de programación, las cadenas de texto se encierran entre comillas. Así, en <screen>
1054
escribir "Hola programador"
1056
> la <link linkend="strings"
1058
> esta encerrada entre comillas.</para>
1060
>Las cadenas de texto pueden almacenarse en <link linkend="containers"
1061
>variables alfanuméricas</link
1062
>. Las variables numéricas y alfanuméricas difieren en el tipo de contenido que almacenan (números y cadenas respectivamente) y a partir de allí en el tipo de operaciones que podemos realizar con ellas. De este modo, no podremos realizar <link linkend="math"
1063
>operaciones aritméticas</link
1064
> ni <link linkend="questions"
1065
>condicionales</link
1066
> con variables alfanuméricas. Veamos ahora un ejemplo del uso de las cadenas de texto:<screen>
1068
nombre = pregunta "¿Cual es tu nombre?"
1069
escribir x + nombre + ", ¿Como estamos hoy?"
1071
>. En la primera línea asignamos la cadena <quote
1073
> a la variable alfanumérica<userinput
1075
>. En la segunda, a la variable alfanumérica <userinput
1077
> se le asigna la salida del comando <userinput
1078
>pregunta</userinput
1079
>. En la tercer línea el programa escribe una composición de las tres variables en el área de dibujo.</para>
1081
>Este programa nos pide que ingresemos un nombre. Entonces, por ejemplo, si ingresamos <quote
1083
>, el programa nos responderá<quote
1084
>Hola Fernanda, ¿Como estamos hoy?</quote
1085
>. Observemos que en nuestro código utilizamos el operador aritmético correspondiente a la adición (+). Este es el único operador aritmético que podemos utilizar con cadenas de texto, y la función que cumple es la de concatenar dichas cadenas.</para>
1091
>¿La tortuga sabe matemáticas?</title>
1093
>Si, la tortuga de &kturtle; puede resolver operaciones matemáticas como sumar (+), restar (-), multiplicar (*) y dividir (/). He aquí un ejemplo en el cual utilizamos todas ellas:<screen>
1098
escribir "a: "+a+", b: "+b+", c: "+c+", d: "+d
1100
> Así, asignamos valores númericos a las variables a, b, c, y d mediante el simbolo de <link linkend="assignment"
1106
>Si queremos realizar un cálculo simple, bastará con algo como esto: <screen
1111
>Ahora veamos un ejemplo en el cual utilizamos los paréntesis <screen>
1112
escribir ( ( 20 - 5 ) * 2 / 30 ) + 1
1114
> Así, las operaciones se agrupan entre paréntesis de modo que se van calculando en el orden establecido. En este ejemplo, primer se calculará 20 - 5, luego se multiplicará el resultado por dos y a eso se le dividirá por 30. Finalmente, al resultado obtenido anteriormente se le suma 1. El resultado final es 2.</para>
1117
<sect1 id="questions">
1119
>Establecer condiciones, obtener respuestas...</title>
1125
> y <link linkend="while"
1127
>mientras</userinput
1129
> son <link linkend="controlling-execution"
1130
>estructuras de control</link
1131
> las cuales discutiremos en la próxima sección. En esta sección utilizaremos al comando <link linkend="if"
1135
> para explicar los condicionales.</para>
1138
>Condicionales</title>
1140
>Un ejemplo simple del uso de condicionales <screen>
1146
> En este ejemplo la condición es: <userinput
1147
>x > 5</userinput
1148
>. Si la condición se cumple (es verdadera), se ejecuta la parte del código que está entre corchetes. Los condicionales son una parte importante en los lenguajes de programación y generalmente se les utiliza en combinación con las <link linkend="controlling-execution"
1149
>estructuras de control</link
1150
> como <link linkend="if"
1154
>. Todos los números y las variables numéricas pueden formar parte de condicionales.</para>
1156
>He aquí todas los condicionales <table>
1158
>Tipos de condicionales</title>
1169
>La respuesta es <quote
1173
> es igual a <userinput
1185
>La respuesta es <quote
1189
> no es igual a <userinput
1196
>a > b</userinput
1199
>a es mayor que b</entry>
1201
>La respuesta es <quote
1205
> es es mayor que <userinput
1212
>a < b</userinput
1215
>a es menor que b</entry>
1217
>La respuesta es <quote
1221
> es es menor que <userinput
1228
>a >= b</userinput
1231
>a es mayor o igual que b</entry>
1233
>La respuesta es <quote
1237
> es es mayor o igual que <userinput
1244
>a <= b</userinput
1247
>a es menor o igual que b</entry>
1249
>La respuesta es <quote
1253
> es es menor que <userinput
1262
>Los condicionales se <glossterm
1263
>resaltan</glossterm
1264
> en celeste en el <link linkend="the-code-editor"
1265
>editor de código</link
1270
<sect2 id="question-glue">
1272
>Operadores lógicos</title>
1274
>Los operadores lógicos nos permiten agrupar varias condiciones en un único condicional. <screen>
1277
si (a < 5) y (b == 5) [
1281
>En este ejemplo, utilizamos al operador lógico <userinput
1283
> para agrupar dos condiciones (<userinput
1284
>a < 5</userinput
1287
>). Si alguna de las dos condiciones agrupadas por el operador lógico <userinput
1291
>, toda la sentencia resultaría <quote
1293
>. Así, el operador lógico <userinput
1295
> requiere que ambas condiciones (tanto a izquierda como a derecha) sean <quote
1297
> para que el condicional resulte verdadero. Adicionalmente, recordemos que ambas condiciones deben estar encerradas entre paréntesis.</para>
1300
>Aquí se nos presenta una visión esquemática. Abajo encontraremos una explicación más detallada. <table>
1302
>Operadores lógicos</title>
1311
>Ambos lados deben ser verdaderos para que la condición sea verdadera</entry>
1319
>Si al menos una de las condiciones es verdadera, la sentencia es verdadera</entry>
1327
>Es un caso especial que solo funciona en condicionales. Lo que hace es cambiar 'verdadero' por 'falso' y 'falso' por 'verdadero'. Dicho de otro modo, niega la condición original.</entry>
1334
>Los operadores lógicos se <glossterm
1335
>resaltan</glossterm
1336
> en purpura en el <link linkend="the-code-editor"
1337
>editro de código</link
1344
>Cuando dos condiciones están agrupadas por el operador lógico <userinput
1346
>, la sentencia debe ser verdadera a ambos lados del <userinput
1348
> para que se considere verdadera. Por ejemplo: <screen>
1351
si ((a < 10) and (b == 5)) yy (a < b) [
1355
> En este ejemplo se utilizan dos operadores lógicos. El primero, opera sobre las dos primeras condiciones que se encuentran entre paréntesis, y el segundo opera sobre la tercer condición y el resultado de las dos anteriores.</para>
1362
>Cuando dos condiciones están agrupadas por el operador lógico <userinput
1364
>, la sentencia debe ser verdadera a alguno de los dos lados del <userinput
1366
> para que se considere verdadera. Por ejemplo: <screen>
1369
si ((a < 10) oo (b == 5)) or (a < b) [
1373
> Al igual que el ejemplo anterior, aquí se utilizan dos operadores lógicos. El primero, opera sobre las dos primeras condiciones que se encuentran entre paréntesis, y el segundo opera sobre la tercer condición y el resultado de las dos anteriores.</para>
1382
> es un caso especial de operador lógico, ya que opera solamente sobre una condición. El efecto que el operador lógico <userinput
1384
> tiene sobre la condición, es la de negarla. <screen>
1387
si no ((a < 10) yy (b == 5)) [
1395
> Observemos que la condición que se plantea es verdadera. Sin embargo, la presencia del operador de negación, hace que la sentencia resulte falsa por lo que nuestro programa imprimirá Chau.</para>
1521
> se les asigna los valores 2004 y 25. A continuación hay dos órdenes <userinput
1522
>escribir</userinput
1523
> con una orden <userinput
1524
>retroceder 30</userinput
1525
> en medio. Los comentarios antes de las órdenes <userinput
1526
>escribir</userinput
1527
> explican lo que estas hacen. Como puede ver, puede usar las variables de la misma forma que usaría sus contenidos. Es decir, puede usarlas con cualquier <link linkend="operators"
1529
> o convertirlas en el parámetro de entrada de una <link linkend="commands"
1534
>Un nuevo ejemplo: <screen>
1535
$nombre = preguntar "¿Cuál es tu nombre?"
1536
escribir "¡Hola " + $nombre + "! Buena suerte con el aprendizaje del arte del programar..."
1538
> Este ejemplo es muy claro. De nuevo, aquí tiene como la variable <userinput
1540
> es tratada como si fuera una cadena.</para>
1543
>Cuando esté usando variables, el <link linkend="the-inspector"
1545
> le puede ser de gran ayuda. Muestra el contenido de todas las variables que están en uso en un momento dado.</para>
1402
1550
<sect1 id="controlling-execution">
1404
>Estructuras de control</title>
1406
>Las estructuras de control nos permiten — como su nombre sugiere — controlar bajo que condiciones se ejecutará cierta porción de nuestro código.</para>
1408
>Los comandos correspondientes a las estructuras de control se <glossterm
1409
>resaltan</glossterm
1410
> en verde oscuro y negrita. Los corchetes se <glossterm
1411
>resaltan</glossterm
1412
> en verde claro.</para>
1552
>Cómo controlar la ejecución</title>
1554
>Los controladores de la ejecución permiten, tal como su nombre indica, controlar la ejecución.</para>
1556
>Las órdenes de control de la ejecución aparecen <glossterm
1557
>resaltadas</glossterm
1558
> en negro y con un tipo de letra negrita. Las llaves, que se usan generalmente junto con los controladores de ejecución, aparecen <glossterm
1559
>resaltadas</glossterm
1560
> en verde oscuro.</para>
1414
1562
<sect2 id="wait">
1416
>Hagamos que la tortuga espere</title>
1564
>Cómo hacer que la tortuga espere</title>
1418
>Luego de haber programado durante algún tiempo en &kturtle;, nos daremos cuenta de que, a veces, la tortuga va demasiado rápido. Con el comando esperar, podemos hacer que la tortuga se detenga durante un lapso de tiempo determinado.</para>
1566
>Si ya ha programado algo en &kturtle;, se habrá 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>
1426
1578
>esperar X</screen>
1428
1580
>esperar</userinput
1429
> hace que la tortuga espere por X segundos. <screen>
1581
> hace que la tortuga se detenga durante X segundos. <screen>
1436
> Esta porción de código, dibuja un circulo, pero la tortuga esperará medio segundo luego de cada paso. Esto da la impresión de la tortuga moviendose lentamente por la pantalla.</para
1588
> 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
1438
1590
</varlistentry>
1439
1591
</variablelist>
1489
1684
<sect2 id="while">
1491
>El bucle "mientras"</title>
1686
>El bucle «mientras»</title>
1501
>mientras <link linkend="questions"
1504
La estructura de control <userinput
1698
>mientras <link linkend="boolean-value"
1701
El controlador <userinput
1505
1702
>mientras</userinput
1506
> actúa en forma similar a <link linkend="if"
1703
> actúa de forma similar a <link linkend="if"
1510
1707
>. La diferencia es que <userinput
1511
1708
>mientras</userinput
1512
> generará un bucle que repetirá la ejecución de código siempre que <link linkend="questions"
1709
> continúa ejecutando (en un bucle) el código que se encuentra entre llaves hasta que el <link linkend="boolean-value"
1711
> sea «falso». <screen>
1713
mientras $x < 5 {
1524
>En la primer línea, <userinput
1526
> toma el valor 1. En la segunda, se plantea la <link linkend="questions"
1529
>x < 5</userinput
1530
>. Ya que esta condición <quote
1532
>, la estructura de control <userinput
1533
>mientras</userinput
1534
> permitirá que el código entre corchetes se ejecute hasta que la <link linkend="questions"
1536
>se evalúe como <quote
1538
>. En este ejemplo, el código entre corchetes se ejecutará cuatro veces, ya que el valor de <userinput
1540
> se incrementa en 1 en cada iteración.</para
1719
>En la primer línea, a <userinput
1721
> se le asigna el valor 1. En la segunda, se evalúa la condición <userinput
1722
>$x < 5</userinput
1723
>. Mientras el resultado de esta condición sea «verdadero», el controlador <userinput
1725
> continúa ejecutando el código que se encuentra entre llaves, así hasta que la condición <userinput
1726
>$x < 5</userinput
1727
> 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
1729
> se le suma 1.</para
1542
1731
</varlistentry>
1543
1732
</variablelist>
1548
>En cualquier otro caso. El comando "sino"</title>
1737
>El bucle «repetir»</title>
1558
>Si argumento [...] sino [...]</screen>
1559
A la estructura de control <link linkend="if"
1749
>repetir <link linkend="number"
1752
El controlador <userinput
1754
> actúa de forma similar a <link linkend="while"
1756
>mientras</userinput
1563
> se la ve con frecuencia acompañada de otra estructura de control llamada <userinput
1565
>. El código que se encuentra entre corchetes luego de un <userinput
1567
> solo se ejecutará si la condición planteada por el si <quote
1568
>no se cumple (es falsa)</quote
1573
escribir "x es mayor que cinco."
1577
escribir "x es menor que seis."
1580
> La <link linkend="questions"
1582
> pregunta si <userinput
1584
> es mayor que 5. Como <userinput
1586
> toma el valor 4 en la primera línea, la condición es <quote
1588
>. Esto significa que el código entre corchetes luego del <userinput
1590
> se ejecutará.</para
1758
>. La diferencia es que <userinput
1760
> continúa ejecutando (en un bucle) el código que se encuentra entre llaves tantas veces como le indica el número dado.</para
1592
1762
</varlistentry>
1593
1763
</variablelist>
1596
1766
<sect2 id="for">
1598
>La estructura de control "para", un bucle que sabe contar</title>
1768
>El bucle "para", un bucle que cuenta</title>
1609
>punto de inicio</userinput
1611
>punto de corte</userinput
1613
La estructura de control <userinput
1784
>para <link linkend="assignment-of-variables"
1786
> = <link linkend="number"
1788
> hasta <link linkend="number"
1614
1792
>para</userinput
1616
>un bucle que sabe contar</quote
1793
> es un «bucle que cuenta», &ie;, que lleva el recuento. 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>
1794
para $x = 1 hasta 10 {
1623
> Cada vez que el código entre corchetes se ejecuta, la variable numérica <userinput
1625
> se incrementa en 1 hasta que el valor de <userinput
1627
> llega a 10. El código entre corchetes muestra el valor de <userinput
1629
> multiplicado por 7. Una vez que el código termine de ejecutarse, veremos la tabla del 7 en el área de dibujo.</para
1799
> Cada vez que el código entre llaves se ejecute, la variable <userinput
1801
> se incrementa en 1, así hasta que sea igual a 10. El código entre llaves escribe el valor de <userinput
1803
> multiplicado por 7. Cuando el código termine de ejecutarse, verá en el lienzo la tabla de multiplicar del 7. </para>
1805
>El incremento predeterminado del bucle es 1, pero puede usar otro valor con: <screen
1806
>para <link linkend="assignment-of-variables"
1808
> = <link linkend="number"
1810
> hasta <link linkend="number"
1812
> paso <link linkend="number"
1823
>Interrumpir un bucle</title>
1836
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
1844
>Interrumpir la ejecución de su programa</title>
1857
Detiene la ejecución de su programa.</para
1638
1865
<sect1 id="learn">
1640
>Nuestras propias funciones con <quote
1868
<!--<sect2 id="name">
1872
>When using the &turtlescript; programming language you create new things. If you write a program you will often need <link linkend="containers"
1874
> and in some cases you need <link linkend="learn"
1876
> to create new commands. When making a new command with <link linkend="learn"
1878
> you will have to specify a name.</para>
1880
>You can choose any name, as long as it does not already have a meaning. For instance you cannot name a function <link linkend="forward"
1882
>, since that name is already used for an internal command.
1885
# here forward is used as a new command,
1886
# but it already has a meaning so
1887
# this will produce an error:
1889
print "this is invalid"
1897
Names can contain only letters, numbers and underscores (_). Yet they have to start with a letter. Container names have to start with the container prefix ($).
1900
# here forward is used as a container,
1901
# starting with the $ prefix, so it does
1902
# not conflict with the forward command
1908
>Containers are <glossterm
1909
>highlighted</glossterm
1910
> with bolded purple in the <link linkend="the-editor"
1914
Please read the documentation on <link linkend="containers"
1916
> and the <link linkend="learn"
1918
> command for a better explanation and more examples.
1928
>Cree sus propias órdenes con «aprender»</title>
1645
1931
>aprender</userinput
1646
> se utiliza para crear funciones personalizadas. La nueva función puede tanto <glossterm linkend="input-output"
1647
>tomar parámetros de entrada</glossterm
1648
> como <glossterm linkend="input-output"
1649
>devolver valores de salida</glossterm
1650
>. Veamos entonces como podemos crear nuestras propias funciones. Crearemos la función <userinput
1653
>aprender circulo x [
1932
> es especial ya que lo puede usar para crear sus propias órdenes. La orden que cree puede requerir de <glossterm linkend="input-output"
1933
>parámetros de entrada</glossterm
1934
> y devolver <glossterm linkend="input-output"
1935
>parámetros de salida</glossterm
1936
>. Veamos cómo se crea una nueva orden:<screen>
1937
aprender círculo $x {
1660
> Así, definimos el nombre de la función como <userinput
1662
>, y esperamos un <glossterm linkend="input-output"
1944
> La nueva orden se denomina <userinput
1948
> necesita un <glossterm linkend="input-output"
1663
1949
>parámetro de entrada</glossterm
1664
> numérico y ningún <glossterm linkend="input-output"
1950
> para fijar el tamaño del círculo y no devuelve ningún <glossterm linkend="input-output"
1665
1951
>parámetro de salida</glossterm
1666
>. Ahora, podemos utilizar la función <userinput
1668
> en cualquier lugar de nuestro código. Veamos este ejemplo: <screen
1669
>aprender circle X [
1952
>. A partir de ahora la orden <userinput
1954
> puede utilizarse como una orden normal en cualquier lugar del código. Vea este ejemplo: <screen
1955
>aprender círculo $x {
1684
>En el próximo ejemplo veremos como crear una función que retorne un valor. <screen>
1970
>En el próximo ejemplo, se crea una orden que devuelve un parámetro de salida: <screen>
1971
aprender facultad $x {
1973
para $i = 1 hasta $x {
1687
aprender multiplicarPorSiMismo n [
1692
i = pregunta "Ingresar un número:"
1693
escribir i + " multiplicado por si mismo es: " +multiplicarPorSiMismo i
1695
>En este ejemplo, creamos una función llamada <userinput
1696
>multiplicarPorSiMismo</userinput
1697
>. Esta función pide que se le ingrese un número. Luego, lo multiplica por si mismo y devuelve el resultado con el comando <anchor id="return"/><userinput
1698
>devolver</userinput
1699
>. El comando <userinput
1700
>devolver</userinput
1701
> es la forma que tenemos de decirle a una función que queremos que devuelva un valor determinado. </para>
1981
>En este ejemplo, se crea una nueva orden llamada <userinput
1982
>facultad</userinput
1983
>. Si el parámetro de entrada es <userinput
1985
>, entonces el parámetro de salida es <userinput
1986
>5*4*3*2*1</userinput
1988
>devolver</userinput
1989
> se define un <glossterm linkend="input-output"
1990
>parámetro de salida</glossterm
1991
> que se devuelve durante la ejecución.</para>
1993
>Las órdenes pueden requerir de más de un <glossterm linkend="input-output"
1994
>parámetro de entrada</glossterm
1995
>. En el siguiente ejemplo se crea una orden que dibuja un rectángulo: <screen>
1996
aprender caja $x;$y {
2007
> Ahora, si ejecuta <userinput
2008
>caja 50;100</userinput
2009
>, la tortuga dibujará una rectángulo en el lienzo. </para>