Buscar este blog

sábado, 10 de agosto de 2013

¡Y más repeticiones!

El hecho de haber avanzado hasta abarcar decisión y repetición nos permite hacer programas cada vez más complicados.

El ejemplo esta vez consistirá en dibujar polígonos regulares de cualquier número de lados. En realidad, es muy sencillo si pensamos en que la circunferencia tiene 360º, y que tenemos que dividir esos grados por el número de lados para saber qué ángulo debemos escoger para cada conjunción de aristas... ¡un polígono regular se circunscribe en una circunferencia!

Así el algoritmo sería, en pseudocódigo:

i <- 0
Lados <- 4
Distancia <- 25

mientras i < Lados:
    gira( 360 / Lados )
    dibuja( Distancia )
    i <- i + 1

El pseudocódigo permite diseñar una aplicación, en un lenguaje natural. Se trata de una notación muy libre, que simplemente nos permita esbozar qué es lo que es necesario hacer para completar el problema.

¡Es el momento de empezar a programar! Lanza jC desde el menú de programas y pulsa en nuevo... escoge un directorio y un nombre para el programa. Escribe, o copia y pega lo que viene a continuación, y... ¡ya está!

/** @name   Poly
  * @brief  Dibuja polígonos
  * @author jbgarcia@uvigo.es
  * @date   2013-8-10
  */

import media.gw;
import media.turtle;

final def Lados = 4;
final def Distancia = 35;

def angulo = 360 / Lados;

gw.setTitle( "Poly" );
for(def i = 0; i < Lados; ++i) {
 turtle.turnRight( angulo );
 turtle.forward( Distancia );
}

jueves, 8 de agosto de 2013

Más repeticiones

En las últimas entradas hemos visto while() y for() como estructuras de repetición, sobre ejemplos con la consola estándar, la entrada y salida por texto.

Volvamos al módulo de la tortuga. Por ejemplo, dibujar una estrella, en la que varias líneas se entrecruzan otras tantas veces, sería muy trabajoso de no conocer, o no poder emplear, la posibilidad de bucles.

Buscando el programa en logo que dibuja una estrella, es posible adaptar ese programa fácilmente a jC y su módulo de la tortuga:

/**
 @name Star
 @brief Crea una estrella utilizando la tortuga
  en un bucle.
 @author jbgarcia@uvigo.es
*/

import media.gw;
import media.turtle;

final def Distancia = 100;
final def Angulo = 160;
final def Aristas = 9;

for(def i = 0; i < Aristas; ++i) {
 turtle.forward( Distancia );
 turtle.turnRight( Angulo );
}

¡Es el momento de experimentar! Diferentes aristas, diferentes ángulos y diferentes distancias (el tamaño de cada arista) nos proporcionarán una estrella un poco diferente de cada vez (si se cambia mucho el ángulo, lo que saldrá no será una estrella: de hecho se puede obtener un cuadrado o un triángulo fácilmente.)

A continuación, se muestra un ejemplo variando un tanto las constantes dadas: