cortes de luz abril 2024 en la provincia de tungurahua
Aproximación a la Didactica del Logo(Parte4)
1. Una aproximación a la Didáctica del Logo. (parte 4)
Enrique Araujo Oviedo
Docente de Informática, I.E.D John F. Kennedy
Coordinador Red de Informática Educativa Localidad Octava, Rediel 8.
enriquearaujoviedo@gmail.com
LOGO, LOGO, ... LOGO. Sí, escrito en mayúsculas: el lenguaje para niños. Bueno esa no fue la
idea que me vendieron en el pregrado. Pero sí las editoriales y la misma Secretaría de
Educación; hasta compró equipos Atari para enseñar Logo en las escuelas!! De desquiciada
nada tenía la idea, ni por un lado ni por la otra: los equipos Atari, para su época (1986) eran
unas portentosas máquinas con cuatro (léase bién: cuatro) procesadores, pero con una escasa
memoria (64K, 128K y en el mejor de los casos 512K, claro estaban los Atari ST de 1024Kb,
pero esos no llegaron a la escuela). Del otro lado los cartridge (cartuchos) de Atari (en
español) eran y siguen siendo de lo mejor, pues que éste lenguaje lo que ha hecho es crecer y
mejorar cada vez. Bueno desde esa época y desde su diseño inicial LOGO ha sido un lenguaje
de programación bastante serio, basado precisamente en otro lenguaje muy poderoso como el
LISP. Desde esa época a ésta se nos ha escapado ese detalle precisamente: las listas y la
estructura de pensamiento subyacente en el manejo de las listas. Eso sí es lo que hay que
enseñarle a un niño: manejo de listas y la lógica de programación por listas. LOGO de alguna
manera ha conseguido a pesar de sus instructores y nosotros los maestros que los niños
adquieran unas valencias, que en la mayoría de los casos escapan a nuestro control,
desgraciadamente por no poseer ni estructuras de programación (no ser programadores) ni
conocer /dominar el lenguaje en su totalidad (desconocer la lógica de programación funcional,
ya mayoría todavía cree que la lógica de programación de LOGO es procedimental).
Bueno, el asunto a tratar en éste artículo es ese: cómo enseñar a los niños a adquirir las
estrategias de programación funcional, adquirir dominio del manejo de listas, observar cómo
las sentencias Logo son listas y resolver problemas utilizando listas, e.d, programando
soluciones en logo. Y todo esto para niños de grado sexto (10-12 años, aprox.)!
Lo primero sí es dar a conocer las primitivas Logo gráficas, especialmente las relativas a las
coordenadas referenciales. Realizar ejercicios en los que se involucren operaciones
aritméticas en los argumentos de los comandos. Así por ejemplo: FD 20*10, BK
(2*10+3*60) ó RT 3*90 (tomo como referencia el Logo en inglés, por ser el Logo estándar).
Con éste tipo de situaciones lo que se busca es que el estudiante distinga perfectamente que
existen dos elementos en éstas sentencias Logo: una parte literal (la cabeza) y una parte
numérica (la cola). Y que en general cualquier sentencia Logo, por compleja que sea es una
lista que posee éstos dos elementos: cabeza y cola. Simbólicamente: [ cabeza cola ] o
(cabeza, cola). Y que además ésta lista se puede representar por un grafo (ver teoría de grafos,
[ORE86] ) llamado árbol.
2. Entonces, en los ejemplos precedentes tenemos:
LISTA CABEZA COLA
FD 20*10 FD 20*10
BK (2*10+3*60) BK (2*10+3*60)
RT 3*90 RT 3*90
Tabla 1
No importa que tan compleja pueda ser una operación aritmética, es una sola entidad.
Sin embargo si existen unas listas que generan ciertas dudas, por ejemplo la lista:
REPEAT 4[ FD 100 RT 90]
Veamos:
LISTA CABEZA COLA
REPEAT 4[ FD 100 RT 90] REPEAT 4[ FD 100 RT 90]
4[ FD 100 RT 90] 4 [ FD 100 RT 90]
[ FD 100 RT 90] FD 100 RT 90
FD 100 FD 100
RT 90 RT 90
Tabla 2
O en otras palabras:
[ CABEZA [ CABEZA [ [ CABEZA COLA] [ CABEZA COLA] ] ] ]
Pensar de ésta manera no es fácil; y menos aún resolver problemas reformulándolos de éste
modo. Se pensaría que para un niño la cosa es muy compleja y difícil y que por tanto es mejor
3. no enseñárselo. Nada más erróneo! El tipo de pensamiento que subyace al Logo se
denomina “sintético” y proviene del “análisis sintético”, que a diferencia del pensamiento
analítico (que se especializa en descomponer un todo en sus partes y estudiarlas por separado)
se encarga de observar un elemento particular de un todo, conservando el todo mismo. Una
vez familiarizado el niño resuelve problemas interesantes con éste método.
Podemos colocarle un ejercicio como el siguiente: “escriba como una lista el sistema solar”.
Solución:
LISTA CABEZA COLA
[ SOL PLANETAS ] SOL PLANETAS
[ PLAN_MAY PLAN_MEN ] PLANETAS MAYORES PLANETAS MENORES
PLANETAS MAYORES URANO NEPTUNO JÚPITER
SATURNO
PLANETAS MENORES PLUTÓN TIERRA VENUS MARTE
MERCURIO
Tabla 3
Obteniéndose la lista:
[ SOL [ URANO NEPTUNO JÚPITER SATURNO PLUTÓN TIERRA VENUS MARTE MERCURIO] ]
¿ Importa acaso el orden de los planetas?
Observése cómo la lista del sistema solar tiene únicamente dos elementos, pero la lista
constituída por la cola pareciera ser distinta si se consideran « planetas mayores » y «
planetas menores » como puede verse en las filas 2 a 4 de la tabla 3:
Las Listas L1:: [ PLAN_MAY PLAN_MEN ] y L2:: [PLANETAS MAYORES PLANETAS MENORES] son por supuesto
iguales.
Ahora L3:: [PLANETAS MAYORES] [ URANO NEPTUNO JÚPITER SATURNO]
y
L4:: [PLANETAS MAYORES] [PLUTÓN TIERRA VENUS MARTE MERCURIO].
En L3 la CABEZA URANO y la COLA [ NEPTUNO JÚPITER SATURNO].
Nota: el símbolo se usa para establecer equivalencias entre listas y el símbolo para
establecer equivalencia entre elementos de una lista.
En otro artículo hé comentado acerca de las diferencias y similitudes de LOGO y LISP en el
manejo de las listas y sus operadores (“Lo que va del Lisp al Logo y otras minucias...”) , por
4. ahora bástenos saber que no es difícil para el estudiante de grado sexto comprender la lógica
del manejo de listas; muy por el contrario, es como un chicle en la boca.
Y bién en qué quedó nuestro ejercicio? Pues que el estudiante puede observar que la
estructura final del ejercicio es una lista de la forma: [ CABEZA [CABEZA COLA] ] y no importa
qué tan grande pueda ser la cola y que ésta a su vez sea una lista.
Se preguntará el docente: ¿Y cuál es la ganancia cognitiva que obtiene el estudiante de grado sexto al
manipular listas en lugar de aprender a manipular comandos Logo directamente? Pues que adquiere la
lógica de solución de problemas en Logo, o sea su formulación y representación por listas, lo que hace
fácil la estructuración modular de la propuesta de programación. Veamos un ejemplo, supongamos que
se pide a los niños que elaboren “el juego del triqui” para ser jugado por dos jugadores utilizando la
máquina como tablero (Obsérvese que éste es un problema débilmente estructurado). ¿Qué hacen los
niños? ¿Qué hace el maestro?
Vamos por partes, resolvamos la inquietud acerca de qué debe hacer el docente.
Mostrar a los niños que “el juego del triqui” tiene un tablero de la forma:
El tablero está constituido por dos líneas
paralelas horizontales, perpendiculares a
otras dos líneas paralelas verticales.
Una manera de realizarlo sería trazar
primero una paralela horizontal y luego la
otra, siguiendo la lógica visual. Pero la
manera eficiente de construir el tablero no
es esa; se requiere una unidad básica y a
partir de ésta realizar el resto por
modularidad y con reusabilidad de
código.
Tablero del juego del Triqui. unidad base Prototipo del tablero
Se propone que la unidad base sea un
Fig. 1 cuadrado y a partir de éste se construya el
tablero.
Fig. 2
Observemos más en detalle:
Fig. 3. El tablero está constituido por cinco cuadrados: uno central, dos Fig. 4. Aquí se ha considerado el tablero central y los cuadrados en
verticales, arriba y abajo; y, dos horizontales, a derecha e izquierda del líneas punteadas, borrando uno de sus lados. Si se observa con
5. cuadrado central. Aunque debe considerarse que el tablero realmente detenimiento ésta es la única acción a realizar sobre el cuadrado
tiene nueve (9) casillas o escaques. central: borrar un segmento y al objeto resultante aplicarle sucesivas
rotaciones. Con esto ya se tienen los módulos de construcción.
Entonces los módulos de construcción son:
etapa 1: crear cuadrado etapa 2: crear objeto
Fig. 5. Un cuadrado que sirve de Fig. 6. Un cuadrado al que se le
unidad base y corresponde al ha borrado un segmento (que
cuadrado central. aparece punteado en el dibujo) y
que se constituye en el objeto a
operar.
El objeto soporte (cuadrado sin un
etapa 3: sumar objeto a base etapa 4: rotar objeto 90 grados
segmento) se rotará tres veces sucesivas,
aplicándosele una rotación a derecha de 90
grados cada vez.
etapa 5: rotar objeto 180 grds etapa 6: rotar objeto 270 grds
Fig. 8
Nota adicional: el tablero debe poderse dibujar en cualquier sitio dela pantalla, por tanto basta
clicar en un punto de la pantalla para que éste sea el punto centro del tablero, leyendo Logo
las coordenadas.
En Logo como sabemos tendríamos el siguiente código para los módulos “unidad base” y
“objeto”.
To cuadrado :lado
REPEAT 4[FD :lado RT 90]
End
To objeto :lado
cuadrado :lado
6. FD :lado RT 90 PE FD :lado PPT
PU REPEAT 2[RT 90 FD :lado ]
PD RT 180
END
TO tablero :lado
« aquí leer las coordenadas del punto actual »
CS « borra pantalla »
cuadrado :lado « dibuja cuadrado central »
REPEAT 4[FD :lado objeto :lado] « dibuja las casillas »
END
Basta, escribir en la línea de sentencias: tablero 50 para obtener un tablero apropiado. Un
lado de 100 es más que suficiente, por lo que valdría la pena establecer restricciones máximo
70 y mínimo 30. Quedaría el módulo así:
TO tablero :lado
IF (OR :lado < 30 :lado >70) [PR [no se puede dibujar] STOP] « examina rango de trabajo »
CS « borra pantalla »
cuadrado :lado « dibuja cuadrado central »
REPEAT 4[FD :lado objeto :lado RT 90] « dibuja las casillas »
END
Capturar las coordenadas del lugar donde se encuentra el cursor lo detallaremos más adelante, por ahora
bástenos que podamos dibujar el tablero del triqui. Además debemos considerar el hecho que el tablero
se pueda dibujar dentro del área de trabajo.
Obviamente ésta no es la única manera de trazar el tablero del triqui, pero es la más apropiada
para mostrar la modularidad y la reusabilidad de código (En el apéndice presento otra manera,
que no me parece la mejor pero cada quien “mata sus pulgas a su manera” reza un adagio
popular. Y en programación esto sí que es cierto: nadie programa igual a otra persona).
Sigamos. El nuevo problema que debe presentar el docente a sus alumnos consiste en ubicar cada casilla a
través de algún mecanismo para trazar luego la ficha correspondiente. Supongamos el problema así:
Juanito y Juanita están jugando, ya dibujaron el tablero en la parte superior de la pantalla. Juanita
empieza primero y seleccionó la casilla superio-izquierda para colocar su ficha que es un círculo, ¿cómo
hace juanita para llegar hasta esa casilla para dibujar su círculo?
Ataquemos pues el problema.
Se sabe que Logo posee de manera subyacente un sistema de coordenadas cartesianas, esto
es que a cada punto del área de trabajo le corresponde un par de coordenadas (xCor, yCor)
que fijan su posición. Así pues de lo que se trata entonces es de localizar las coordenadas del
punto centro de cada casilla, y para ello basta con saber las coordenadas de la casilla central,
es decir el punto donde “se hizo clic” para dibujar el tablero. Entonces de lo que se trata es de
7. capturar las coordenadas del punto donde se hizo clic con el botón izquierdo del mouse. Esto
realmente no es difícil porque Logo trae estos comandos, lo realmente interesante es cómo
plantearle al estudiante la pregunta para que se vea motivado a consultar en el lenguaje las
posibilidades.
Para efectos prácticos reduciré el problema a uno equivalente en el que el mouse aún no
tenga nada que ver, precisamente para efectos didácticos.
Consideremos que podemos mover la tortuga al azar hasta que presionemos enter o cualquier
otra tecla. Y en el sitio que quede la tortuga se dibuje el tablero, esta vez pondremos la
condición que no se borren los tableros anteriores.
Mover la tortuga al azar.
Logo trae el comando RANDOM que tiene el siguiente formato: RANDOM num. Esta
instrucción Logo devuelve un entero positivo menor que el del argumento, que servirá de
entrada al comando deseado. Así por ejemplo podemos escribir: FD RANDOM 100. Logo
devolverá un entero positivo menor que 100, supongamos 75 y éste servirá de argumento a
FD, quedando pues
FD RANDOM 100 FD 75
(¿recuerda las equivalencias entre listas, arriba mencionadas?)
Como se trata de que se mueva al azar un poco más, consideremos que podemos rotar la
tortuga también aleatoriamente un número arbitrario de veces. Tenemos pues el
procedimiento mover.al.azar :
TO mover.al.azar :veces
PU HOME
REPEAT RANDOM :veces [ RT RANDOM :veces *10 FD RANDOM :veces *30 ]
PD
END
Este sería un procedimiento para luego ser incluido como módulo dentro de un procedimiento
dibuja.tablero . O una versión empeorada si se va a trabajar desde la línea de sentecias:
TO mover.al.azar :veces
IF :veces < 0 [PR [Oye, no puedes usar un entero negativo!] STOP ]
IF :veces > 10 [PR [Oh, Oh! Muchas vueltas, pón un número menor que 10] STOP ]
PU HOME
REPEAT RANDOM :veces [ RT RANDOM :veces *10 FD RANDOM :veces *30 ]
PD
END
O más complejo:
8. TO mover.al.azar :veces
IF :veces < 0 [MESSAGEBOX [ CUIDADO!] [Oye, no puedes usar un entero negativo!] STOP ]
IF :veces > 10 [MESSAGEBOX [ CUIDADO!] [Oh, Oh! Muchas vueltas, pón un número menor
que 10] STOP ]
PU SETH (REMAINDER 360 :veces*21)
REPEAT RANDOM :veces [ RT RANDOM :veces *10 FD RANDOM :veces *30 ]
PD
END
Por supuesto que se pueden poner todas las restricciones del caso. Por ejemplo: podemos
querer que rote una vez a la derecha y otra a la izquierda o que rote un número al azar de
veces a la derecha y luego una vez a la izquierda. Para el primer caso basta agregar LT como
cola de la lista [ RT RANDOM :veces *10 FD RANDOM :veces *30 ] quedando:
[ RT RANDOM :veces *10 FD RANDOM :veces *30 LT RANDOM :veces *5 ]
para el segundo caso hay que agregar otro RANDOM en la cabeza de la lista:
[ REPEAT RANDOM RT 360/:veces [RANDOM :veces *10 FD RANDOM :veces *30] LT
RANDOM :veces *5 BK RANDOM :veces *15]
consiguiendo una tortuga completamente loca!
Pero para no complicarnos tanto (por ahora...) dejemos el primer procedimiento
mover.al.azar .
Bueno ya tenemos una tortuga que se mueve al azar, pero que puede salirse de pantalla. Esto
lo resolveremos después. Por ahora concentrémonos en mover la tortuga y dibujar después.
Tenemos:
TO dibujar.triqui :veces :lado
mover.al.azar :veces
tablero :lado
END
La única dificultad que usualmente se le presenta al estudiante es recordar que debe
introducir el valor de las variables asociadas y en qué orden. Hay que trabajar en ello.
El siguiente problema a abordar será pues el de dibujar las fichas. Después abordaremos el de
posicionarla en cualquiera de las casillas. Consideremos eso sí el hecho que la ficha debe
quedar dentro de una casilla. Recordemos que cada casilla es un cuadrado porque con ésta
intención lo definimos desde el comienzo. El que cada casilla fuera un cuadrado nos sirve
porque así podemos fácilmente calcular su punto centro bien como el punto de corte de sus
diagonales o como un recorrido simple de dos segmentos medios perpendiculares que parte
de un vértice. Supongamos por ahora que el punto centro de una casilla tiene coordenadas
(xc, yc).
9. Fig. 9a. Método por diagonales Fig. 9b. Método por trayectoria de segmentos
medios
Sabemos que el cuadrado tiene segmentos de longitud :lado. Por tanto para llegar al punto
centro por el método de la figura 9a, sería:
To centro.casilla :lado
SETH 45
FD SQRT ( 2*( :lado /2)* (:lado /2))
END
Pues se trata de la hipotenusa de un triángulo rectángulo con catetos de longitud :lado.
Y por el método de la figura 9b, sería:
To centro.casilla :lado
FD :lado SETH 90 FD :lado SETH 0
END
Una vez escogido el método de llegar al centro dela casilla se dibuja la ficha según el turno del
jugador. Podemos hacer controlado el turno o libre, es decir que sea el jugador el que escriba
la ficha que le corresponde. En caso contrario sería el computador el que decida si la ficha
jugada es correcta según el turno o no. Tomemos por comodidad el caso libre.
Las fichas a dibujar son un circulo y una équis.
Caso ficha équis.
Veamos las siguientes figuras ilustrativas que nos ayudarán a elaborar el procedimiento.
Fig. 10a Ubicamos el centro Fig. 10b. Trazamos primer tramo Fig. 10c. Nos devolvemos Fig. 10d.Trazamos segundo tramo
10. Fig. 10e nos devolvemos Fig. 10f. Hemos trazado la équis Fig. 10g. Y ahora qué hacer?
El procedimiento realmente es muy sencillo:
TO equis :lado
centro.casilla :lado
primer.tramo :lado
segundo.tramo :lado
END
TO primer.tramo :lado
SETH 315 « da la orientación del tramo a la tortuga »
FD (3/4)*SQRT ( 2*(:lado /2)* ( :lado /2)) « avanza tres cuartos de la semidiagonal desde el
centro »
BK (3/2)* SQRT ( 2*(:lado /2)* (:lado /2)) « retrocede trazando dos semidiagonales »
FD (3/4)*SQRT ( 2*(:lado /2)* (:lado /2)) « se devuelve al centro »
SETH 0 « establece orientación estándar »
END
TO segundo.tramo :lado
SETH 45
FD (3/4)*SQRT ( 2*(:lado /2)* (:lado /2))
BK (3/2)* SQRT ( 2*(:lado /2)* (:lado /2))
FD (3/4)*SQRT ( 2*(:lado /2)* (:lado /2))
SETH 0
END
Abordemos ahora, el trazado de la ficha círculo.
Caso ficha circulo.
Con ésta ficha si no tendremos ningún inconveniente pues Logo dispone de una procedimiento
ARC, cuyo formato es ARC ángulo radio.
Nota: The turtle does not move in this command. It draws an arc (part of a circle) based on the
turtle heading, turtle position and the given arguments. The arc starts at the rear of the turtle
heading. The size is based on the radius. The current turtle position will be at the center of
11. the arc. Arc will also follow wrap/fence/windows modes. ARC 360 radius will of course draw a
circle.
TO circulo :lado
centro.casilla :lado
ARC 360 :lado/2
END
Así pues ya tenemos tablero y fichas. Entonces a jugar!!!
Eh, éh! Un momento y cómo posicionamos las fichas en las casillas?
Establezcamos para resolver éste problema lo siguiente: leemos el tablero de izquierda a
derecha y de arriba hacia abajo en trama de zeta. Para hacerlo más claro, numerémos cada
casilla de 1 a 9 así:
1 2 3
4 5 6
7 8 9
Fig. 11
Tomando como referencia la casilla del centro podemos ir a cualquier otra, de acuerdo a los
siguientes esquemas:
Fig. 12a. Camino a la casilla 2. Fig. 12b. Camino a la casilla 8 Fig. 12c. Camino a la casilla 4 Fig. 12d. Camino a la casilla 6
Fig. 12e. Camino a la casilla 1 Fig. 12f. Camino a la casilla 7 Fig. 12g. Camino a la casilla 3 Fig. 12h. Camino a la casilla 9
12. Hé dispuesto los esquemas de talmodo que se puedan observar las trayectorias de acuerdo a
su simétrica. Así la figura 12a. (trayectoria hacia la casilla 2) tiene como simétrica a la figura
12b. (trayectoria hacia la casilla 8) , así sucesivamente. Esto lo puede observar fácilmente un
niño de grado sexto si posee precurrentes de simetría (simetría axial, preferentemente).
Los procedimientos se realizan por código simétrico:
TO casilla2 :lado TO casilla8 :lado
PU SETH 0 PU SETH 180
FD :lado SETH 0 FD :lado SETH 0
PD PD
END END
TO casilla4 :lado TO casilla6 :lado
PU SETH 270 PU SETH 90
FD :lado SETH 0 FD :lado SETH 0
PD PD
END END
TO casilla1 :lado TO casilla7 :lado
casilla1 SETH 270 casilla8 SETH 270
FD :lado SETH 0 FD :lado SETH 0
PD PD
END END
TO casilla3 :lado TO casilla9 :lado
casilla1 SETH 90 casilla8 SETH 90
FD :lado SETH 0 FD :lado SETH 0
PD PD
END END
El juego se puede depurar muchísmo más, pero para el caso es más que suficiente. A
propósito, un poquito largo el ejemplo, ¿no?
Muy bonito todo eso, se preguntará el lector. Pero qué tiene que ver todo esto con las listas? A
qué horas vuelven a aparecer?
Bueno el asunto es que siempre estuvimos manipulando listas. Cada subproblema conducía a
elaborar un procedimiento que se convierte en módulo dentro de otro procedimiento. Esto es
una lista dentro de otra lista.
13. NOTA FINAL: Recuerde apreciado colega, que la didáctica es un asunto el maestro no del
alumno, así que lo visto en el presente artículo estaba dirigido exclusivamente al docente. No
se puede implementar éste trabajo directamente al alumno, sería un exabrupto. Como dice
Jimmy Neutrón: no lo intentes en casa! Hay que dosificarlo al nivel de los alumnos, cada
colegio tiene sus particularidades y sus propios niveles de crecimiento y desarrollo por tanto
sus alumnos poseen unas características diferenciales que deben ser tomadas en cuenta a la
hora de aplicar un trabajo como el presente.
14. Anexo 1
Todo el código completo.
To cuadrado :lado To objeto :lado
REPEAT 4[FD :lado RT 90] cuadrado :lado
End FD :lado RT 90 PE FD :lado PPT
PU REPEAT 2[RT 90 FD :lado ]
PD RT 180
END
TO tablero :lado TO mover.al.azar :veces
CS IF :veces < 0 [MESSAGEBOX [ CUIDADO!]
cuadrado :lado [Oye, no puedes usar un entero negativo!]
REPEAT 4[FD :lado objeto :lado] STOP ]
END IF :veces > 10 [MESSAGEBOX [ CUIDADO!]
[Oh, Oh! Muchas vueltas, pón un número
menor que 10] STOP ]
PU SETH (REMAINDER 360 :veces*21)
REPEAT RANDOM :veces [ RT RANDOM
:veces *10 FD RANDOM :veces *30 ]
PD
END
TO dibujar.triqui :veces :lado TO casilla1 :lado
mover.al.azar :veces casilla2 :lado SETH 270 FD :lado
tablero :lado SETH 0
END PD
END
TO casilla2 :lado TO casilla3 :lado
PU SETH 0 Casilla2 :lado SETH 90 FD :lado
FD :lado SETH 0 SETH 0
PD PD
END END
TO casilla4 :lado TO casilla6 :lado
PU SETH 270 PU SETH 90
FD :lado SETH 0 FD :lado SETH 0
PD PD
END END
TO casilla7 :lado TO casilla8 :lado
casilla8 :lado SETH 270 FD :lado PU SETH 180
SETH 0 FD :lado SETH 0
PD PD
END END
15. TO casilla9 :lado TO primer.tramo :lado
casilla8 :lado SETH 90 FD :lado SETH 315
SETH 0 FD (3/4)*SQRT ( 2*( :lado /2)* ( :lado /2))
PD BK (3/2)* SQRT ( 2*( :lado /2)* (:lado /2))
END FD (3/4)*SQRT ( 2*( :lado /2)* (:lado /2))
SETH 0
END
TO segundo.tramo :lado TO circulo :lado
SETH 45 centro.casilla :lado
FD (3/4)*SQRT ( 2*( :lado /2)* (:lado /2)) ARC 360 :lado /2
BK (3/2)* SQRT ( 2*( :lado /2)* (:lado /2)) END
FD (3/4)*SQRT ( 2*( :lado /2)* (:lado /2))
SETH 0
END
To centro.casilla :lado TO equis :lado
FD :lado SETH 90 FD :lado SETH 0 primer.tramo :lado
END segundo.tramo : :lado
END
TO dibujar.triqui :veces :lado
mover.al.azar :veces
tablero :lado
END
16. ANEXO 2
Haciéndolo más legible con un valor predeterminado:
To cuadrado
REPEAT 4[FD 40 RT 90]
End
To objeto
cuadrado
FD 40 RT 90 PE FD 40 PPT
PU REPEAT 2[RT 90 FD 40]
PD RT 180
END
TO tablero
SETPENCOLOR 220 10 10
SETH 0
cuadrado
REPEAT 4[FD 40 objeto ]
END
17. ANEXO 3
Pruebe este sencillo programa para ver cómo se mueve la tortuga al azar
TO mover.al.azar :veces
IF :veces < 0 [MESSAGEBOX [ CUIDADO!] [Oye, no puedes usar un entero negativo!] STOP ]
IF :veces > 10 [MESSAGEBOX [ CUIDADO!] [Oh, Oh! Muchas vueltas, pón un número menor
que 10] STOP ]
PU SETH (REMAINDER 360 :veces*21)
REPEAT RANDOM :veces [ RT RANDOM :veces *10 FD RANDOM :veces *30 ]
PD
SETPENCOLOR 225 10 10
SETTEXTSIZE 26 SETTEXTFONT [TAHOMA] LABEL [AQUI ESTOY!]
END
18. Anexo 4
Juego del Triqui
Observaciones generales
Logo ofrece un espacio bastante dúctil para el diseño y elaboración de juegos. Presentaremos
las ideas generales de cómo se desarrolló un proyecto para elaborar el juego del Triqui con
estudiantes de grado sexto.
Ya los estudiantes saben elaborar el procedimiento de un cuadrado y posicionar un cuadrado
en diferentes lugares (1), por tanto posicionar dos cuadrados consecutivos no es ningún
problema. Sin embargo un tablero de Triqui no es una secuencia de cuadrados propiamente
dicha; pues sólo el escaque del centro es cerrado, los demás son abiertos. Y esto es lo que se
les manifiesta a los estudiantes en forma de problema: “Dibujar el tablero de un Triqui.
Verifíquese en papel cuántas maneras hay, posibles de elaborarlo, partiendo de un cuadrado
base (2)”.
Entre los modos encontrados por los estudiantes tenemos:
a) Modo en el que se dibujan los nueve cuadrados y posteriormente se borra el borde
exterior del cuadrado grande formado por los nueve cuadrados base.
b) Modo en se dibuja el cuadrado central, luego a otro cuadrado base se le borra un lado;
posteriormente se posicionan cuatro de estos sobre los lados del cuadrado central.
c) Modo en que dibuja una escalera de dos escalones, con el cuadrado base en el centro;
se gira la estructura y se traslapan.
Otros modos que no tomaron el consideración la unidad base:
a) Trazar dos rectas paralelas y perpendiculares dos a dos
b) Trazar dos rectas paralelas, voltearlas en ángulo recto y traslaparlas (montarlas sobre
las anteriores)
Veamos con algún detalle, alguno de ellos: Modo b)
19. Se considera el croquis del cuadrado base y a continuación se establecen los segmentos que
definirían el tablero. En la imagen los segmentos se ven en líneas punteadas.
En otro croquis se considera el cuadrado base y el segmento a eliminar de dicho cuadrado. El
segmento a eliminar, según el croquis es el segmento superior.
Ahora el cuadrado sin un segmento se ubicará sobre el segmento superior del cuadrado
central. En logo, la idea ya no es tan intuitiva, pues se requiere posicionar primero la tortuga
en un vértice, por ejemplo, y a continuación ejecutar el procedimiento que dibuje el cuadrado
sin el lado superior; nótese además que no se elimina cualquier lado sino el superior.
20. Una vez posicionado el cuadrado sin segmento superior, se realiza una copia y posteriormente
se gira 90 grados a la derecha para que el lado abierto quede hacia la derecha. Luego se
coloca en lugar señalado en el croquis.
Nuevamente, la idea es muy atractiva desde el punto de vista del papel y posiblemente desde
un editor gráfico. Pero desde la perspectiva de la programación en Logo la idea se vuelve un
poco engorrosa: a)se debe establecer posición anterior de la tortuga y b) se debe posicionar la
tortuga nuevamente para c) dibujar cuadrado sin segmento superior, previamente girado (3).
21. El siguiente escaque sigue el proceso del anterior. El análisis global del proceso puede dar una
idea muy enriquecedora de cómo utilizar la recursión en lugar de la iteración (4). Finalmente
se tiene el tablero
Tablero terminado.
Después de analizar las distintas posibilidades, los estudiantes escogieron el método que más
les convino, según su parecer. El siguiente módulo es el trabajo resultante de un grupo de
trabajo:
22. El código se muestra tal como lo escribieron los estudiantes del grupo, con las observaciones
del docente:
Código Logo para el Juego del Triqui. (Grupo del estudiante Huérfano, M. 601)
TO BOLA
PD ST
SETH 90 REPEAT 4 [FD 20 RT 90] SETH 0
END
TO CASILLA1
PU SETH 0 SETXY -50 50
END
TO CASILLA2
PU SETH 0 SETXY -10 50
END
TO CASILLA3
PU SETH 0 SETXY 30 50
END
TO CASILLA4
PU SETH 0 SETXY -50 10
END
TO CASILLA5
PU SETH 0 SETXY -10 10
END
TO CASILLA6
PU SETH 0 SETXY -30 10
END
TO CASILLA7
;mejorar
PU SETH 0 SETXY -50 30
END
TO CASILLA8
;mejorar
23. PU SETH 0 SETXY -10 30
END
TO CASILLA9
PU SETH 0 SETXY 30 -30
END
TO CROQUIS
CS
PU SETXY -20 70 PD SETY -70
PU SETXY 20 70 PD SETY -70
PU SETXY -70 20 PD SETX 70
PU SETXY -70 -20 PD SETX 70
END
TO EQUIS
PD ST
SETH 135 FD SQRT (800)
SETH -90 PU FD 20 PD
SETH 45 FD SQRT (800)
PU HOME
END
TO JUGAR
PR [ESCOJA: EQUIS (X) O BOLITA (O)]
MAKE "TECLA READCHAR
IF :TECLA = "X [EQUIS STOP]
IF :TECLA = "O [BOLA STOP]
JUGAR
END
TO LEER
MAKE "TECLITA READCHAR
IF :TECLITA = "1 [CASILLA1 JUGAR]
IF :TECLITA = "2 [CASILLA2 JUGAR]
IF :TECLITA = "3 [CASILLA3 JUGAR]
IF :TECLITA = "4 [CASILLA4 JUGAR]
IF :TECLITA = "5 [CASILLA5 JUGAR]
IF :TECLITA = "6 [CASILLA6 JUGAR]
IF :TECLITA = "7 [CASILLA7 JUGAR]
IF :TECLITA = "8 [CASILLA8 JUGAR]
IF :TECLITA = "9 [CASILLA9 JUGAR]
LEER
;el posicionamiento en las casillas 6,7,8 y 9; falla
END
TO TRIQUI
;hay que mejorar el juego usando ventanas
;no es claro cuando se indica la casilla y la ficha
CT
CROQUIS
LEER
END
El presente trabajo se realizó con estudiantes de grado sexto del colegio John F. Kennedy, en el
año 2004. Enrique Araújoviedo.
24. (1) ver Trabajo y guías sobre posicionamiento de objetos en el sistema referencial.
(2) ver Trabajo y guías sobre construcción de figuras a partir de una unidad base.
(3) ver Trabajo y guías sobre operaciones sobre figuras y estructuras.
(4) ver Trabajo y guías sobre iteración y recursión.