miércoles, 11 de febrero de 2009

Ejercicio 13. Bucles while



En este ejercicio introduciremos la primitiva while. Esta primitiva sirve para repetir un conjunto de acciones mientras se cumpla una determinada condición. En el ejercicio 1 ya empleamos una primitiva que nos permitía repetir un número de comandos: la primitiva repeat. Sin embargo, con repeat, el número de veces que se repiten los comandos ha de ser un número fijo (no se evalúa ninguna condición para ejecutar el conjunto de comandos a repetir), mientras que con while sí que se evalúa una condición: si se cumple la condición se entra en el bucle si no se cumple se sale del bucle.

Su sintaxis es la que se muestra a continuación:

while condición
[
;; comandos
]

Compárala con la sintaxis de la primitiva repeat:

repeat n ;; n es el número de veces que queremos que se repita el conjunto de comandos
[
;; comandos
]

Para ilustrar el funcionamiento de los bucles while, vamos a construir un pequeño modelo. En él crearemos dos coches que, partiendo del lado izquierdo del “mundo” deberán alcanzar el lado derecho del “mundo” avanzando una distancia aleatoria en cada iteración.



El código se muestra a continuación (descargar código).
En primer lugar declaramos las variables globales que vamos a utilizar en el modelo con la palabra clave globals. A continuación definimos la raza “coches” con la palabra clave breed.

En este modelo tenemos dos procedimientos, el primero de ellos llamado setup y el segundo llamado go. Esto es muy común en los sistemas modelados en Netlogo. En general, el procedimiento setup inicializa las variables, los agentes, las gráficas, la interfaz, etc y prepara el terreno para que el procedimiento go ejecute la simulación del modelo.

En nuestro caso, el procedimiento setup define la forma por defecto de la raza “coches”, pinta el mundo de color blanco, crea dos coches, cada uno de un color y los coloca en la parte izquierda del mundo.

El procedimiento go se encarga de hacer avanzar los coches hasta que uno de ellos alcanza la parte derecha del mundo.

Observa que la condición para que el bucle while se siga ejecutando es que todos los coches tengan una coordenada x inferior a la coordenada x del patch situado más a la derecha del mundo (max-pxcor)

Observa también cómo funciona la primitiva all?, que sirve para evaluar las propiedades de todo un conjunto de agentes.

No olvides crear dos botones en la vista interfaz: uno que ejecute el procedimiento setup y otro que ejecute el procedimiento go:

Ejecuta el modelo, para ello pulsa primeramente el botón setup, para preparar el modelo. Finalmente pulsa el botón go, para iniciar la simulación. Es posible que tengas que bajar la velocidad de la simulación para poder ver cómo se desplazan los coches a lo largo del mundo.

1 comentario:

DP dijo...

Puedes descargarte el código este programa desde aquí: Ejercicio13