Je cherche une fonction random en C/C++

Résolu/Fermé
TexTwil Messages postés 298 Date d'inscription jeudi 25 octobre 2001 Statut Membre Dernière intervention 8 juin 2009 - 21 mars 2002 à 14:37
 Giento - 21 mars 2017 à 23:15
Salut,
je cherche une fonction random sous C/C++: le fonction random() du C++ renvoie une valeur entre 0 et X mais j'aurais besoin d'une fonction du type:
random(4,5,7,9) qui renverrait soit 4 soit 5 soit 7 soit 9. Je sais pas si ca existe et c pour ca que je demande.
merci
A voir également:

18 réponses

En C, tu peut faire ainsi

Au début du programme, tu initialises le générateur de nombre aléatoire.

srand(time(null)); // Une fois suffit

ensuite, pour générer un nombre aléatoire, tu n'as plus qu'à taper :

int nb_aleatoire = Rand();

Si tu veut un nombre compris dans un interval, tu te sert de l'opérateur modulo.
exemple; tu veut un nombre entre 1 et 100.

int nb_alea;
nb_alea = (Rand() % 100) + 1;

Il te faudra aussi inclure les bibliothèques :
- stdlib.h
- time.h

J'espere que ca pourra t'aider
63
TexTwil Messages postés 298 Date d'inscription jeudi 25 octobre 2001 Statut Membre Dernière intervention 8 juin 2009 20
22 mars 2002 à 07:21
Merci, mais vous n'avez pas du comprendre ce que je voulais. Je sais bien comment marche la fonction random( ), mais ce dont j'ai besoin n'est pas un nombre aleatoire entre 0 et x mais un nombre aléatoire choisi dans un ensemble précisé. Par ex, imaginez que je désire que cette fonction me renvoie un nombre appartenant à {1,5,7,6,9}. Je veux donc qu'elle renvoie soit 1 soit 5 soit 7 soit soit 6 soit 9 , et pas autre chose.
ok, merci
0
chmanu > TexTwil Messages postés 298 Date d'inscription jeudi 25 octobre 2001 Statut Membre Dernière intervention 8 juin 2009
22 mars 2002 à 08:14
voila ce que je te propose :
tout depend en fait de ton intervalle. est il constant, grand, a t il une grande amplitude,...

donc tu fais ton random (voir + haut) puis tu testes si le nbre renvoyé est dans ton intervalle avec :
typedef mon_intervalle {1,5,6,9,8};
Si c est le cas, tu le garde, sinon t en prend un autre (while).
0
Marden Messages postés 1072 Date d'inscription dimanche 11 février 2001 Statut Membre Dernière intervention 29 janvier 2006 209 > TexTwil Messages postés 298 Date d'inscription jeudi 25 octobre 2001 Statut Membre Dernière intervention 8 juin 2009
22 mars 2002 à 15:35
Tu ranges tes nombres (1,5,6,9,8) dans une table, et ta fonction random()*5 te donne un index permettant d'accéder à la cette table. C'est ce qu'on appelle une indirection.
Si tu veux que le tirage suivant donne une autre valeur, tu fais une permutation avec la dernière valeur de la table, et tu décrémentes le facteur (5). Und so weiter ...
0
weblook > Marden Messages postés 1072 Date d'inscription dimanche 11 février 2001 Statut Membre Dernière intervention 29 janvier 2006
22 mars 2002 à 20:48
houla!! oublie tout ce que l'on vient de te dire, utilise plutôt ça:

srand(unsigned time(NULL)) //initialise le generateur de nbre aleatoire

int x=rand()%11 -> génére un nbre aléatoire entre 0 et 10
int x=rand()%61 - 20 -> " " " " " " " " " " " " " "entre -20 et 40
etc..
0
Marden Messages postés 1072 Date d'inscription dimanche 11 février 2001 Statut Membre Dernière intervention 29 janvier 2006 209 > weblook
23 mars 2002 à 01:30
D'accord pour la manière [%(n+1)] de produire un entier de 0 à n .
Je raisonnais à partir d'une fonction retournant un flottant compris entre 0 et 1 exclu.
Il faut compléter par le choix de la valeur à retourner, qui est du type argv[resultat], fonction à nombre d'arguments variable, dont j'ai oublié le mécanisme (arg.h ? utilisé une fois), d'implémentation variable selon machine.
0