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
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