fontion rand en c++ - C++ - Programmation
Marsh Posté le 23-10-2001 à 21:38:27
int nb;
nb=random();
while ((nb<1) || (nb>valeur))
{
nb=random();
}
[edtdd]--Message édité par corvincent--[/edtdd]
Marsh Posté le 23-10-2001 à 21:39:24
corvincent a écrit a écrit : int nb; nb=random(); while ((nb<1) || (nb>valeur)) { nb=random(); } |
Marsh Posté le 23-10-2001 à 22:04:20
j'ai plus court
nb=(random()%valeur)+1;
le compte est bon....
Marsh Posté le 06-03-2002 à 00:50:01
Je pense avoir mieux...
int nb;
nb = ((rand()/RAND_MAX) * (valeur_dans_ta_variable-1)) +1;
Explication:
rand() te fourni un nombre aléatoire avec comme borne supérieure RAND_MAX (définie je ne sais où, soit).
Bref, le principe est de diviser un nombre aléatoire par RAND_MAX afin d'obtenir un nombre compries entre 0 et 1 (compris => intervalle [0,1]).
Ensuite, il ne te reste plus qu'à multiplier cette valeur par le nombre aléatoire maximum désiré (ici valeur_dans_ta_variable).
L'intérête d'utiliser cette méthode est que le côté pseudo aléatoire est un peu atténué...
euh... je ne sais pas si je me fais comprendre...
Pour faire cours, c'est mieux .
Si tu as régulièrement besoin de nombres aléatoire dans ton code, fais ceci:
#define RAND_NUM (rand()/RAND_MAX)
Puis, pour un nombre aléatoire compris entre 0 et x, faire: nb = RAND_NUM * x;
Marsh Posté le 05-01-2003 à 18:39:45
Majca Jalasu a écrit : LOL |
et bien je suis très content que tu sois qd meme donné cette peine, ça me sert !
merci bcp
Marsh Posté le 05-01-2003 à 18:54:18
la méthode de Majca Jalasu est presque bonne mais ne fonctionnera jamais car elle mets en oeuvre la division entier. comme rand() renvoie un entier entre 0 et RAND_MAX, rand()/RAND_MAX vaudra toujours 0
voilà un bonne usage de rand() pour de meilleur nombres pseudo aléatoire: ces 2 implémentatiosn présentent 2 fonctions my_bad_rand qui est communément utilisée à tort, et my_better_rand qui est meilleur et moins limitée)
[C++] http://dejean.benoit.free.fr/rand.cpp.html
(peut etre un peu plus compliquée, si vous ne la comprenez pas, jetez un oeil à la version C)
[C] http://dejean.benoit.free.fr/rand.c.html
Marsh Posté le 05-01-2003 à 19:57:57
ces fonctions sont ds le domaine public ?
Marsh Posté le 05-01-2003 à 20:27:19
sseb22 a écrit : ces fonctions sont ds le domaine public ? |
leur code oui, pas elles memes: personne ne peut se les approprier
Marsh Posté le 05-01-2003 à 20:33:23
Citation : la méthode de Majca Jalasu est presque bonne mais ne fonctionnera jamais car elle mets en oeuvre la division entier. comme rand() renvoie un entier entre 0 et RAND_MAX, rand()/RAND_MAX vaudra toujours 0 |
tu as raison mais si on veut tout de meme utiliser cette fonction il suffit de faire un cast sur RAND_MAX (qui est un entier apparemment)
Code :
|
là, c bon
Marsh Posté le 06-01-2003 à 01:18:10
Majca Jalasu a écrit : LOL |
je comprends qd tuy as û repondre a ce poste
tu remontes de tps en tps jusqu'a la page 15 lol
non en fait je pense ke t'a fait une recherche sur quelque chose et tu es tomber dessus
Marsh Posté le 11-10-2003 à 14:03:52
Je ne parviens pas à utiliser rand() comme il faut...
Pouvez-vous m'expliquer ce que je n'ai pas capté please ?
Code :
|
Dans ce cas ca me sort 0 à chaque fois que je lance le prog.
Code :
|
Et dans ce cas, il me sort logiquement 1 à tous les coups.
Pour mon exo de génération aléatoire des opérandes, on me dit de faire:
Code :
|
Ca me sort encore des 0.
Je ne comprend pas car j'ai pris le code complet d'un pote (exo de calcul mental avec menu et génération aléatoire d'opérandes): ca compile et marche bien.
Si je prend seulement le bout du dessus ca ne marche pas. Et je ne vois pas dans le code complet ce qui peut faire fonctionner.
Marsh Posté le 11-10-2003 à 14:07:56
deja faut faire un srand(toto), avec toto une variable changeant a chaque execution (au hasard : l'heure)
ensuite si j'etais toi, je ferais plus ca :
Code :
|
ca evitera de possible overflows
Marsh Posté le 11-10-2003 à 14:14:15
Lol ce topic a 3 ans ca m'etonnerait que son auteur soit encore la ...
Marsh Posté le 11-10-2003 à 14:32:07
Oui chrisbk, je vais tester, je suis vraiment débutant en C++ en tp ils ne détaillent pas toujours les détails
En tout cas ce topik m'a évité d'en refaire un sur le même sujet, et m'a fait comprendre quelques trucs déjà
Que l'auteur soit la ou pas ou est le pb ?
Marsh Posté le 11-10-2003 à 14:39:35
aucun pb, VisualC_n3T n'est de toute facon pas digne d'interet
Marsh Posté le 11-10-2003 à 15:00:45
Code :
|
Ca me donne pas vraiment un aléatoire... il me renvoie toujours le même entier après 15 essais
Normalement c'est censé fonctionner sans srand.
Marsh Posté le 11-10-2003 à 15:05:25
nope !!!
le srand tu le fais UNE FOIS en debut de programme et c tout
Marsh Posté le 11-10-2003 à 15:42:13
chrisbk a écrit : nope !!! |
Désolé mais je ne comprend pas, en 4 semaines de cours, autant dire qu'on a pas fait grand chose hein. Ca fait quoi un srand() ?
Sinon dans le tp on me disait simplement d'utiliser l'instruction
Code :
|
Marsh Posté le 11-10-2003 à 15:48:23
initialise la graine servant au pseudo aleatoire, cf msdn, google & cie (pas le tps (ni l'envie) de developer)
Marsh Posté le 11-10-2003 à 15:59:41
comme dans mes exemples ... sinon utilisez double toujours sauf si l'espace mémoire vous est précieux (je parle de plusiseurs centaines de Mo)
Marsh Posté le 11-10-2003 à 19:54:37
chrisbk a écrit : aucun pb, VisualC_n3T n'est de toute facon pas digne d'interet |
Merci
Est-ce que par hasard tu te sentirais plus digne d'interet que les autres ?
Marsh Posté le 13-10-2003 à 08:49:15
J'ai pas lu tout le topic (désolé), mais si ça peut aider, on peut trouver un générateur de nombre aléatoire en c++ assez bien fait ici: http://perso.club-internet.fr/ktd/index.html
Marsh Posté le 24-01-2004 à 17:49:36
VisualC_n3t a écrit : Lol ce topic a 3 ans ca m'etonnerait que son auteur soit encore la ... |
c pas grave, ça sert tjs
Marsh Posté le 24-01-2004 à 22:43:41
boost.random
www.boost.org
un petit exemple :
Code :
|
Marsh Posté le 25-01-2004 à 00:45:17
sseb22 a écrit : c pas grave, ça sert tjs |
C'est quoi ces déterrages successifs ?
Marsh Posté le 26-01-2004 à 11:17:43
plains toi à joce
g un drapeau, j'y rentre
Marsh Posté le 26-01-2004 à 11:20:22
Si t'avais un drapeau pour un si vieux topic, c'est que tu ne postes pas assez
Marsh Posté le 26-01-2004 à 17:05:54
c clair que HFR n'est plus mon forum principal depuis lgtps
Marsh Posté le 28-01-2004 à 16:46:05
ReplyMarsh Posté le 05-09-2004 à 19:42:13
Merci ! Ca sert (encore) et toujours !
(maintenant, plus qu'à trouver pkoi ce c** reconnais pas cout ^^)
Wiiip - je creuse, tu creuses ...
Marsh Posté le 10-04-2005 à 13:02:06
Redeterrage !
Bon voila, jsuis tombé sur ce topic grace a Google...mais cest bien, comme ça au moins on accumule des informations...
et jai un probleme. Je narrive pas a trouver un nombre aleatoire sous forme de float compris entre -1 et 1...avez vous une piste, comment pourrais je faire ?
En fait ce que je fais en ce moment : boule[i].posx = (float)rand()/ 35000;
fonctionne mais (je fais de la 2D) mes boules ne se situent que dans la partie haut-droite de mon ecran. Normal donc.
Commet obtenir un float dans lintervale [-1; 1] ?
Merci !
Marsh Posté le 10-04-2005 à 13:27:46
ouais alors là, c'est un peu plus serré.
Prendre un [0; 2] et décalé de -1 serait une erreur à cause du format des float. Je serais plus pour tirer un float sur [0; 1] et refaire un tirage pour le signe. Le mieux serait quand même d'utiliser un générateur capable de fournir une plus grande quantité de bits.
et les trucs genre read(... &mon_float, sizeof mon_float ...) où on serait tenté de remplir brutalement un float, ça ne marche pas car on pourrait obtenir une représentation non valide.
Marsh Posté le 10-04-2005 à 13:40:14
Code :
|
tiré des sources du module random de python. Cette algorithme à l'air très intéressant. Je pense que tu peux le reprendre tel quel. La graine est un triplet. Reste le problème du signe.
Marsh Posté le 23-10-2001 à 08:15:42
je cherche a faire une fontion random entre 1 et la valeur dans une variable
faut que je fasse quoi comme code ?
---------------
COMPTE LOD HC : hfr_belgarion2