Vamos a utilizar el modo multitortuga, para así disponer de varias tortugas sobre la pantalla.
Se utiliza la primitiva pontortuga, seguida del número de tortuga que se quiere seleccionar.
Un buen esquema que vale más que mil explicaciones ...:
La separación horizontal entre las tortugas es de 30 pasos de tortuga, y se colocarán a las tortugas con ayuda de los datos.
pontortuga 2 ponpos [-150 0] pontortuga 3 ponpos [-120 0] pontortuga 4 ponpos [-90 0] pontortuga 5 ponpos [-60 0] pontortuga 6 ponpos [-30 0] ......En lugar de copiar 11 veces prácticamente la misma línea de órdenes, se puede automatizar utilizando la primitiva repitepara. Con ayuda de esta primitiva, se puede asignar a una variable una serie de valores distribuidos en un intervalo a espacios regulares. Aquí, queremos que la variable :i tome sucesivamente los valores . Su uso es:
repitepara [i 2 12] [lista de las instrucciones que deben realizarse]
Para colocar a las tortugas, se crea pues el procedimiento inicia
para inicia borrapantalla ocultatortuga repitepara [i 2 12] [ # coloca la tortuga pontortuga :i ponpos lista -150 + (:i - 2) * 30 0 # escribe el numero de la tortuga justo debajo subelapiz retrocede 15 rotula :i avanza 15 bajalapiz ] fin
Observa la expresión -150 + (:i - 2) * 30. Con ello hacemos que el
primer valor para la abscisa sea -150, y a cada nueva tortuga se
añaden 30 (probar con distintos valores de :i si no se ve bien).
Finalmente se obtiene el siguiente programa:
para lanzar devuelve 1 + azar 6 fin para inicia borrapantalla ocultatortuga repitepara [i 2 12] [ # coloca la tortuga pontortuga :i ponpos lista -150 + (:i - 2)*30 0 # escribe el numero de la tortuga justo debajo subelapiz retrocede 15 rotula :i avanza 15 bajalapiz ] fin para empezar inicia # Hacemos 1000 intentos repite 1000 [ haz "suma lanzar+lanzar pontortuga :suma avanza 1 ] # indicamos las frecuencias de tirada repitepara [i 2 12] [ pontortuga :i # la ordenada de la tortuga representa el numero de tiradas hazlocal "frecuencia ultimo pos subelapiz avanza 10 giraizquierda 90 avanza 10 giraderecha 90 bajalapiz rotula :frecuencia/1000*100 ] fin
Veamos ahora una generalización de este programa. Aquí, se pedirán al usuario el número de dados deseados así como el número de lanzamientos a efectuar.
para lanzar hazlocal "suma 0 repite :dados [ hazlocal "suma :suma + 1 + azar 6 ] devuelve :suma fin para inicia borrapantalla ocultatortuga ponmaximastortugas :max + 1 repitepara frase lista "i :min :max [ # coloca la tortuga pontortuga :i ponpos lista (:min - :max)/2*30 + (:i - :min)*30 0 # escribe el numero de la tortuga justo debajo subelapiz retrocede 15 rotula :i avanza 15 bajalapiz ] fin para empezar leeteclado [Numero de dados:] "dados si no numero? :dados [es [largoetiqueta El numero introducido no es valido!] alto] haz "min :dados haz "max 6*:dados leeteclado [Numero de lanzamientos a realizar] "tiradas si no numero? :tiradas [es [largoetiqueta El numero introducido no es valido!] alto] inicia # Hacemos un numero de intentos igual :tiradas repite :tiradas [ pontortuga lanzar avanza 1 ] # indicamos las frecuencias de tirada repitepara frase lista "i :min :max [ pontortuga :i # la ordenada de la tortuga representa el numero de tiradas hazlocal "frecuencia ultimo pos # normalizamos entre 0,1 subelapiz avanza 10 giraizquierda 90 avanza 10 giraderecha 90 bajalapiz rotula (redondea :frecuencia/:tiradas)*100 ] fin
Loïc 2007-10-30