Salut à tous,
j'ai une petite question sur la fonction random :
est-il possible de demander à Pascal de créer un nombre aléatoire compris entre 1 et 100 par exemple, au lieu de 0 et 100 ??
Si oui, comment ?
Merci
Salut à tous,
j'ai une petite question sur la fonction random :
est-il possible de demander à Pascal de créer un nombre aléatoire compris entre 1 et 100 par exemple, au lieu de 0 et 100 ??
Si oui, comment ?
Merci
gao,
- Tu génères une valeur de 0 à 99
- tu ajoutes 1
![]()
ou bien tu mets random dans une boucle repeat until avec la condition que random(101)<>0
![]()
c'est cool ce que tu proposes sauf c'est pas du tout optimal parce que c'est du temps(je parle en des milliemes de seconde) en plus à l'ordinateur pendant l'execution à cause du test sur le repeat/until(on est tous d'accord qu'avec une instruction pareille c'est instantannée mais c'est moins rapide que ce que propose droggo) donc je te conseille plutot la methode de droggoEnvoyé par mah00
@+
Hio,
Comme te l'a dit krachik, ce n'est pas optimal d'une part, et d'autre part manque de généralité.Envoyé par mah00
Poussons un peu à l'extrême : tu veux générer une valeur 10000 <= n <= 10005.
Tu vas refaire le coup de la boucle repeat ?
Avec l'inconvénient supplémantaire que random(v) ne renvoyant que des valeurs de 0 à v, comment obtiendras-tu des valeurs négatives ?
Une saine habitude en programmation est d'essayer de faire du code le plus général (ou généralisable) possible, ce qui n'est pas toujours évident, bien entendu.
Ainsi, la méthode que j'ai proposée se généralise immédiatement pour définir une fonction renvoyant un entier compris entre 2 bornes:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 function RamdomRange(min, max : integer) : integer; var range : integer; begin { on prend la peine de vérifier que min < max, histoire de prévoir une étourderie du programmeur. si ce n'est pas le cas, on les inverse } if min > max then begin min := min xor max; max := max xor min; min := min xor max; end; { la gamme à générer, de 0 à range } range := max - min + 1; { et le résultat } RamdomRange := min + Random(range); end;
Et le plus important :
avec une boucle repeat ... until tu ne peux pas prouver que ton algorithme termine !
Bien sûr il a de fortes chances de terminer, mais rien ne peut le prouver. Si par exemple la fonction random est bugguée et que pour x ou y raisons elle renvoie toujours la même valeur : 0 sur ta machine, ton code bouclera à l'infini.![]()
Bonjour,
Soit a, une variable qui doit avoir une valeur aléatoire comprise entre 1 et 100;Envoyé par droggo
En pascal on écrirait :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 program algorithme_de_droggo // tout à fait correct begin randomize ; a := random(100)+1 ; writeln(a) ; end.je ne suis pas d’accords:Envoyé par droggo
En effet, contrairement à ce dit droggo (sans doute un p’tit oubli), random(v) retourne une valeur comprise entre 0 et v-1;
Si cela nous arrive un jour,on peut dire qu'on a la poisse!!Envoyé par Loceka
Autre chose,pour le temps d'execution,il est vrai que meme ces millieme de secondes ralentissent considerablement le programme,mais si c'est pour un algorithme simple,je crois qu'on peut y penser...
Parce que a force de chercher des instructions generalisable (je cite) on risque de faire de l'inutile!
Mais il est vrai qu'a un certain niveau,on ne peut pas y échapper.![]()
Partager