Nous allons utiliser le mode multi-tortues. Pour disposer ainsi de plusieurs tortues sur l’écran, on utilise la
primitive fixetortue suivi du numéro de la tortue que l’on veut sélectionner.
Un bon schéma valant mieux que mille explications....
Sur le principe, chaque tortue numérotée de 2 à 12 avancera d’un pas de tortue, lorsque le
tirage de la somme des deux dés sera identique à son numéro. Par exemple, si les dés ont pour
somme 8, la tortue numéro 8 avancera d’un pas. Toutes les tortues sont espacées de 30 pas de tortues
horizontalement.
On placera les tortues à l’aide des coordonnées.
⋮ |
fixetortue 2 fpos [-150 0] fixetortue 3 fpos [-120 0] fixetortue 4 fpos [-90 0] fixetortue 5 fpos [-60 0] fixetortue 6 fpos [-30 0] ..... |
Plutôt que de taper 11 fois quasiment la même ligne de commande, on peut automatiser cela en utilisant la
primitive repetepour. A l’aide de cette primitive, on peut affecter à une variable une succession de valeurs prises
dans un intervalle à espaces réguliers. Ici, on veut que la variable :i prenne successivement les valeurs 2, 3, 4, ...
, 12. On tapera :
repetepour [i 2 12] [ liste des instructions à exécuter ]
Pour placer les tortues, on crée donc la procédure initialise
pour initialise ve ct repetepour [i 2 12] [ # On place la tortue fixetortue :i fpos liste -150+(:i-2)*30 0 # On écrit le numéro de la tortue juste en dessous lc re 15 etiquette :i av 15 bc ] fin |
Bien comprendre la formule -150+( :i-2)*30. On part de -150, puis à chaque nouvelle tortue on rajoute 30.
(Tester avec les différentes valeurs de :i si vous n’êtes pas convaincu)
Au final on obtient le programme suivant :
pour lancer retourne 1+hasard 6 fin pour initialise ve ct repetepour [i 2 12] [ # On place la tortue fixetortue :i fpos liste -150+(:i-2)*30 0 # On écrit le numéro de la tortue juste en dessous lc re 15 etiquette :i av 15 bc ] fin pour demarrer initialise # On effectue 1000 tentatives repete 1000 [ donne "somme lancer+lancer fixetortue :somme av 1 ] # On affiche les fréquences de tirage repetepour [i 2 12] [ fixetortue :i # L’ordonnée de la tortue représente le nombre de tirages soit "effectif dernier pos lc av 10 tg 90 av 10 td 90 bc etiquette :effectif/1000*100 ] fin |
Voici une généralisation de ce programme. Ici, on demandera à l’utilisateur le nombre de dés souhaités ainsi que le nombre de lancers à effectuer.
pour lancer soit "somme 0 repete :des [ soit "somme :somme+1 +hasard 6 ] retourne :somme fin pour initialise ve ct fixemaxtortues :max+1 repetepour ph liste "i :min :max [ # On place la tortue fixetortue :i fpos liste (:min-:max)/2*30+(:i-:min)*30 0 # On écrit le numéro de la tortue juste en dessous lc re 15 etiquette :i av 15 bc ] fin pour demarrer lis [Nombre de dés:] "des si non nombre? :des [ec [Le nombre rentré n’est pas valide!] stop] donne "min :des donne "max 6*:des lis [Nombre de lancers à effectuer] "tirages si non nombre? :tirages [ec [Le nombre rentré n’est pas valide!] stop] initialise # On effectue 1000 tentatives repete :tirages [ fixetortue lancer av 1 ] # On affiche les fréquences de tirage repetepour ph liste "i :min :max [ fixetortue :i # L’ordonnée de la tortue représente le nombre de tirages soit "effectif dernier pos # On arrondit à 0,1 lc av 10 tg 90 av 10 td 90 bc etiquette (arrondi :effectif/:tirages*1000)/10 ] fin |