11.2 Le programme

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

pict

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