Pseudo-hasard
Il est quelquefois nécessaire d’avoir recours à l’utilisation de valeurs de variables (scalaire ou chaîne) qui soient le fruit du hasard. Mais l’ordinateur n’est pas capable de créer du vrai hasard. Il peut cependant fournir des données dites aléatoires, c’est-à-dire issues de calculs qui utilisent un grand nombre de paramètres eux-mêmes issus de l’horloge interne. On appelle cela un pseudo-hasard car il est très difficile de déceler de l’ordre et des cycles dans la génération de valeurs aléatoires. Ainsi, on admettra que Turbo Pascal 7.0 offre la possibilité de générer des nombres aléatoires.
Avant l’utilisation des fonctions qui vont suivre, il faut initialiser le générateur aléatoire (tout comme il faut initialiser la carte graphique pour faire des dessins) avec la procédure Randomize. Cette initialisation est indispensable pour être sûr d’obtenir un relativement « bon hasard » bien que ce ne soit pas obligatoire.
Syntaxe : Randomize ; On peut générer un nombre réel aléatoire compris entre 0 et 1 grâce à la fonction Random.
Syntaxe : X := Random ; On peut générer un nombre entier aléatoire compris entre 0 et Y-1 grâce à la fonction Random(Y).
Syntaxe : X := Random(Y) ; Program exemple22; Uses crt ; Const max = 100 ; Var test : Boolean ; x, y : Integer ; BEGIN ClrScr ; Randomize ; y := Random(max) ; Repeat Write(‘Entrez un nombre : ‘) ; ReadLn(x) ; test := (x=y) ; If test Then WriteLn(‘Ok, en plein dans le mille.’) Else If x>y Then WriteLn(‘Trop grand.’) Else writeln(‘Trop petit.’) ; Until test ; ReadLn ; END.
Dans ce programme exemple22 (programme Chance typique des calculettes), on a génération d’un nombre aléatoire compris entre 0 et une borne max définie comme constante dans la partie déclarative du programme, ici, on prendra la valeur 100. Le programme saisie un nombre entré par l’utilisateur, effectue un test et donne la valeur true à une variable boolean nommée test si le nombre du joueur est correct, sinon, affiche les messages d’erreurs correspondants. Le programme fonctionne à l’aide d’une boucle conditionnelle Repeat…Until.