Section courante

A propos

Section administrative du site

Nombres aléatoires

Cette page traite de la fonction RND et du mot clef RANDOMIZE. Ils sont tous deux utilisés en relation avec des nombres aléatoires, vous devez donc faire attention à ne pas les confondre. Ils sont tous les deux sur la même touche T ; RANDOMIZE a dû être abrégé en RAND.

À certains égards, RND est comme une fonction : il effectue des calculs et produit un résultat. Il est inhabituel en ce qu'il n'a pas besoin de paramètre.

Chaque fois que vous l'utilisez, son résultat est un nouveau nombre aléatoire entre 0 et 1. (Parfois, il peut prendre la valeur 0, mais jamais 1.)

Essayer :

  1. 10 PRINT RND
  2. 20 GO TO 10

pour voir comment la réponse varie. Pouvez-vous détecter n'importe quel modèle ? Vous ne devriez pas pouvoir ; "aléatoire" signifie qu'il n'y a pas de modèle.

En fait, RND n'est pas vraiment aléatoire, car il suit une séquence fixe de 65536 nombres. Cependant, ceux-ci sont si complètement mélangés qu'il n'y a au moins pas de modèles évidents et nous disons que RND est pseudo-aléatoire.

RND donne un nombre aléatoire entre 0 et 1, mais vous pouvez facilement obtenir des nombres aléatoires dans d'autres intervalles. Par exemple, 5*RND est compris entre 0 et 5, et 1,3+0,7*RND est compris entre 1,3 et 2. Pour obtenir des nombres entiers, utilisez INT (en vous rappelant que INT arrondit toujours à l'inférieur) comme dans 1+INT(RND*6), que nous utiliserons dans un programme pour simuler des dés. RND*6 est compris entre 0 et 6, mais comme il n'atteint jamais 6, INT(RND*6) vaut 0, 1, 2, 3, 4 ou 5.

Voici le programme :

  1. 10 REM Programme pour lancer de dés
  2. 20 CLS
  3. 30 FOR n=1 TO 2
  4. 40 PRINT 1+INT(RND*6);" ",
  5. 50 NEXT n
  6. 60 INPUT a$: GO TO 20

Appuyez sur ENTER chaque fois que vous voulez lancer les dés.

L'instruction RANDOMIZE est utilisée pour faire démarrer RND à un endroit précis dans sa séquence de nombres, comme vous pouvez le voir avec ce programme :

  1. 10 RANDOMIZE 1
  2. 20 FOR n=1 TO 5: PRINT RND: NEXT n
  3. 30 PRINT : GO TO 10

Après chaque exécution de RANDOMIZE 1, la séquence RND repart à 0.0022735596. Vous pouvez utiliser d'autres nombres entre 1 et 65535 dans l'instruction RANDOMIZE pour démarrer la séquence RND à différents endroits.

Si vous aviez un programme avec RND et qu'il contenait également des erreurs que vous n'aviez pas trouvées, il serait utile d'utiliser RANDOMIZE comme ceci pour que le programme se comporte de la même manière à chaque fois que vous l'exécutez.

RANDOMIZE seul (et RANDOMIZE 0 a le même effet) est différent, car il randomise vraiment RND - vous pouvez le voir dans le programme suivant :

  1. 10 RANDOMIZE
  2. 20 PRINT RND : GO TO 10

La séquence que vous obtenez ici n'est pas très aléatoire, car RANDOMIZE utilise le temps depuis que l'ordinateur a été allumé. Comme cela a augmenté du même montant à chaque fois que RANDOMIZE est exécuté, le prochain RND fait plus ou moins la même chose. Vous obtiendrez un meilleur aléa en remplaçant GO TO 10 par GO TO 20.

Remarque : La plupart des dialectes de BASIC utilisent RND et RANDOMIZE pour produire des nombres aléatoires, mais tous ne les utilisent pas de la même manière.

Voici un programme pour lancer des pièces et compter le nombre de pile et face :

  1. 10 LET heads=0: LET tails=0
  2. 20 LET coin=INT(RND*2)
  3. 30 IF coin=0 THEN LET heads=heads+1
  4. 40 IF coin=1 THEN LET tails=tails+1
  5. 50 PRINT heads;",";tails,
  6. 60 IF tails<>0 THEN PRINT heads/tails;
  7. 70 PRINT : GO TO 20

Le rapport pile/face devrait devenir environ 1 si vous continuez assez longtemps, car à long terme, vous vous attendez à un nombre approximativement égal de pile et face.



Dernière mise à jour : Mercredi, le 19 avril 2023