Rechercher : dans
Par :

Je cherche une fonction random en C/C++

Dernière réponse le 21 déc 2008 à 17:03:31 TexTwil, le 21 mar 2002 à 14:37:13 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « je cherche une fonction random en C/C++ » dans :
Les fonctions en C++ : surcharge et paramètres par défaut. VoirLes fonctions en C++ : surcharge et paramètres par défaut. 1. La surcharge de fonctions et méthodes de classes, dont le constructeur 2. Utilisation des paramètres par défaut En C++, une même fonction ou méthode de classe peut être...
Langage C - Les fonctions VoirLa notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs parties du...
Langage C++ - Les fonctions VoirLa notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs parties du...

1

Peguinette, le 21 mar 2002 à 15:57:14
  • +2

La plus part des fonctions random fonctionne de la meme maniere :

elle renvoie une variable de type int (souvent), le contenu est compris entre 0 et le nombre maximum qui peut etre codé dans un int.

Si tu veux un random plus precis, il faut que tu utilise ce meme random et ensuite, que tu réduise l'intervalle d'etude.

exemple :
Le random te renvoi une valeur entre 0 et 199. Tu veux 4 valeurs.

(random *4)/200 = ton random compris entre 0 et 3

au niveau du code, je te laisse faire car ca fait longtemps que je n'ai plus fait de C, mais pense à caster ton résultat.


---------
Peguinette

Répondre à Peguinette

2

Hilikus, le 21 mar 2002 à 16:10:28
  • +3

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

Répondre à Hilikus

3

TexTwil, le 22 mar 2002 à 07:21:13
  • +1

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

Répondre à TexTwil

4

chmanu, le 22 mar 2002 à 08:14:43
  • +3

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).

Répondre à chmanu

5

Marden, le 22 mar 2002 à 15:35:24
  • +4

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 ...

Répondre à Marden

6

weblook, le 22 mar 2002 à 20:48:44

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..

Répondre à weblook

7

Marden, le 23 mar 2002 à 01:30:37
  • +2

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.

Répondre à Marden

8

Laaris, le 16 oct 2007 à 16:54:05
  • +1

Bonjour,

J'ai un peu le même genre de problème sauf que l'intervalle n'est pas constant.

En fait je veux tirer k fois un nombre entre 1 et 10, mais je ne dois pas tirer deux fois le même nombre. Comment faire, sans avoir à tester à chaque fois si le nombre obtenu est déjà sorti auparavant?

Merci d'avance.

Répondre à Laaris

9

Gorgo13, le 17 oct 2007 à 05:36:20
  • +7

//Tu fais une table de pointeurs vers un tableau contenant les nombres possibles du tirage, par exemple
int k;
int Nmax = 10;
int *tab = (int*)calloc(sizeof(int),Nmax);
for (k=0;k<Nmax;k++) tab[k] = k; // ou bien n'importe quelle autre valeur et dans l'ordre ou tu veux

//Ensuite tu definis un tableau de pointeurs vers chacun de ces elements int **ptr,
int **ptr = (int**)calloc(sizeof(int*),Nmax);
for (k=0;k<Nmax;k++) ptr[k] = &tab[k];

//tu definis un indice temporaire NN qui va te servir a generer un nombre aleatoire dans l'intervalle
//[0,NN]
int NN = Nmax-1;

int *tmp_ptr;
int random_index;

for (k=0;k<Nmax;k++)
{
//Tu generes un nombre aleatoire entre 0 et NN,
random_index = (int)(rand()/(float)RAND_MAX * (NN));

//Cela definit le premier nombre aleatoire tire,
printf("%d\n",*ptr[random_index]);

//Ensuite, tu fais une permutation entre le pointeur tire et le dernier element de ton tableau de pointeurs
tmp_ptr = ptr[Nmax-1-k];
ptr[Nmax-1-k] = ptr[random_index];
ptr[random_index] = tmp_ptr;

//Tu decremente N--, de sorte que le dernier element du tableau de pointeur
//(qui est maintenant celui qui vient d'etre tire) ne puisse pas etre a nouveau selectionne.
NN--;
}

et voila... il y a surement plus astucieux, mais au moins ca te garantit que ton code s'execute avec un nombre determine d'iterations, sans etre oblige de tester a chaque nouveau tirage si le nombre a deja ete tire...

PS: j'ai ecrit ca en 5 minutes, alors il est possible que les indices ne soient pas tout a fait corrects (e.g. NN ou NN-1)

Répondre à Gorgo13

10

Laaris, le 23 oct 2007 à 16:46:22

J'ai compris le principe, je vais essayer de le refaire par moi même.

Merci beaucoup.

Répondre à Laaris

11

souf, le 31 oct 2007 à 20:55:49

Bonjour, SVP j'ai besoin d'un aide !!!

je dois remplir un tableaux d'entiers exp: T[10] et je dois donner la taille maximale et des nombres aléatoires pr remplir le tableau !!!

AIDEZ-MOI SVP

Répondre à souf

12

Gorgo13, le 1 nov 2007 à 00:33:22
  • +2

Salut,

j'ai pas compris ta question, ce n'est pas clair. En plus, ca ressemble a un exo de derniere minute a faire, n'est-ce pas?

Répondre à Gorgo13

13

ahnung, le 17 nov 2007 à 19:26:30
  • +2

Salut
mon probleme ressemble beaucoup a celui de TexTwil j ai un tableau bidimensionnel (4 *4) premierement je dois initialiser toutes les cases (elements) avec des 0 ensuite je dois a l aide de la fonction random [srand()] remplir 8 cases avec des 1 ! je planche sur cet exercice depuis trois semaines avec tous les manuels possibles et j en suis venu a me demander si ce ne serait pas moi moi qui manquerai d intelligence lol
ok toute aide sera la bienvenue merci d avance

Répondre à ahnung

14

mype, le 17 nov 2007 à 19:38:04

Tu utilise rand pour prendre un nombre entre 1 et 16 pou choisir 8 case au hasard puis tu les rempli avec des 1

Répondre à mype

15

Anjinho49, le 22 nov 2007 à 17:49:35
  • +1

Bonjour,
j'ai une tite question par rapport à l'utilisation de random (et randomize)..! Je dois réaliser un cheminement aléatoire et je dois les utiliser mais je sais pas trop comment étant donné que je "débute".

Donc ce que je veux faire, compter le nombre de fois que je passe par des cases jusqu'à passer par toutes les cases.
donc en fait, elles sont toutes à zéro au début, puis je vais demander à l'utilisateur de rentrer des coordonnées au clavier pour initialiser puis le prog va calculer le nbre de fois qu'il a fallu pour passer par toutes ses cases.

je sais pas si je suis claire... :D

j'aimerais juste avoir une idée de comment procéder

merci par avance d'une réponse! :)

Répondre à Anjinho49

16

jippy, le 5 jan 2008 à 20:36:42
  • +1

Bonjour
malgrè les explication sur cette fonction je ne comprend toujours pas comment ça fonctione, il me faudrait un exemple avec un tableau a deux dimension avec un choix de 3 valeurs
merci de bien vouloir me répondre
à+

Répondre à jippy

17

telecom, le 21 jan 2008 à 12:49:50
  • +1

Salut, je veut savoir comment, à partir d'un fichier contenant une séquence aléatoire d'entiers, avoir une séquence aléatoire d'entiers mais de longueur inférieur. Merci

Répondre à telecom

18

HOMA, le 18 avr 2008 à 09:40:55
  • +1

Salut
je cherche une fonction random qui va choisir un nombre aleatoire de cette liste {-1,0,1}

Répondre à HOMA

20

vacancier, le 27 oct 2008 à 01:46:26
  • +1

Max = 1
min = -1
//c'est dans cette interval que la fonction random va choisi le nombre aléatoire
x = rand() % (max-min) + min;

Répondre à vacancier

19

oussama.za, le 6 mai 2008 à 18:21:37

Commmen la fonction radom travail

Répondre à oussama.za

21

 Noussa, le 21 déc 2008 à 17:03:31
  • +2

Bonjour, je cherche comment utiliser et écrire le code de la fonction random en C++ pour choisir des nombres aléatoires sur l'intervalle [0,1].
Meerci d'avance pour votre aide

Répondre à Noussa