Este es un ejercicio de programación, que resulta útil para enseñar destrezas de planificación y estrategia en la resolución de problemas. La propuesta es dibujar 9 círculos dispuestos en forma de matriz y de colores alternados, como se ve en la figura de la izquierda.
Las primitivas necesarias son básicas: circulo :radio dibujará un círculo con su centro en la posición del trazador y la primitiva rellena lo rellenará con el color establecido de antemano con la instrucción poccr.
Pero lo que buscamos con este ejercicio es desarrollar estrategias de pensamiento, planificando el encadenamiento de efectos para alcanzar el resultado esperado. Hay muchos modos de hacerlo, pero lo que debemos estimular es la búsqueda del código compacto y eficiente, fácil de modificar y mantener para corregir errores.
Dibujar uno tras otro.
La respuesta inicial de los alumnos es obvia: resolver el problema en cadena, cambiando el color del círculo en cada paso. Este modo de actuar es el reflejo de la enorme dificultad que tiene para ellos abstraer en variables. También les resulta muy difícil imaginar un número pequeño de procedimientos que se repiten, dando distinto valor a las variables. Así que, piensan, lo mejor será dibujar los círculos uno por uno:
.png)
Pero esta estrategia, que prometía un modo sencillo de actuar, se tropieza con la primera piedra: ¿cuáles son las coordenadas del primer círculo que está, por ejemplo, en la esquina superior izquierda? Este problema también lo resuelven por el método más simple: pasito y giro después de situarse el centro de la pantalla:
gi 90
av :radio
gd 90
av :radio
gd 90
·
Después resuelven cada círculo con una sucesión de instrucciones como estas:
·
poncl (lista 220 180 120)
poccr (lista 220 180 120)
circulo :radio
rellena
sl av :radio bl
·
El encadenamiento de instrucciones para dibujar los nueve círculos produce un código muy largo, de lectura farragosa y sin estructura. Cuando buscan la causa del mal funcionamiento mientras lo están construyendo, se ven obligados a bucear en el código para encontrar la orden que hay que cambiar.
·
Procedimientos parciales
Un avance, que denota un intento de utilizar un estrategia sistemática, consiste en crear un procedimiento capaz de dibujar tres círculos, para repetirlo tres veces:
·
La disposición del dibujo, con el color de los círculos alternos, introduce una complicación que no permite utilizar sin más el mismo procedimiento tres veces. El código es algo más compacto, pero poco claro y difícil de mantener.
·
Una estrategia radial
Un enfoque posible, que permite construir un código más compacto, es considerar que hay dos grupos de cuatro círculos, alrededor del círculo central. Esto permite diseñar un único procedimiento, que dibuja cuatro círculos en cruz y repetirlo dos veces, cambiando el ángulo inicial y la distancia al círculo central:
·
·
.png)
·
para jolka :r ;Procedimiento principal
bp bl ot ;Inicializa la pantalla
declara ;Declara las variables del programa
poncl :cg poccr :cg ;Elige el color claro para rellenar el primer círculo
circulo :r rellena ;Dibuja el circulo central
dibuja ;Dibuja el resto de los círculos
fin
·
para declara ;Declara los valores de las variables
haz “alfa 0 ;Define el ángulo inicial del dibujo en cero grados
haz “cn (lista 0 0 44) ;Define el color oscuro
haz “cg (lista 250 200 100) ;Define el color claro
fin
·
para dibuja ;Dibuja el resto de los círculos
poncl :cn poccr :cn ;Elige el color oscuro
haz “salto :r * 2 ;Calcula la distancia entre los círculos ortogonales
repite 4 [pinta :salto] ;Dibuja cuatro círculos oscuros en cruz
haz “alfa 45 ;Cambia el ángulo inicial
poncl :cg poccr :cg ;Cambia de color
haz “salto :r * 2 * raizcuadrada 2 ;Distancia al centro de los círculos diagonales
repite 4 [pinta :salto] ;Dibuja cuatro círculos claros en cruz
fin
·
para pinta :salto ;Dibuja cada uno de los círculos restantes
ponrumbo :alfa ;Se orienta en la dirección establecida
sl av :salto bl ;Se desplaza hasta el centro del nuevo círculo
circulo :r rellena ;Traza el círculo y lo rellena
sl centro ;Regresa al centro del dibujo sin trazar
haz “alfa :alfa + 90 ;Incrementa el ángulo para el siguiente círculo
fin
Advertisement
Me gusta:
Sé el primero en decir que te gusta esta post.