Entier aléatoire en C
Résolu
Cthul
-
Cthul -
Cthul -
Bonjour,
j'ai un petit problème de timing en C, je m'explique.
Voilà le bout code important de ma fonction main :
for(i=0;i<32;i++){
r = hasard();
t = r;
while(r==t){ r = hasard(); printf("%d\n",r);}
if(r>t) ech(pak,t,r);
else ech(pak,r,t);
}
En gros, je veux tirer deux nombres aléatoires differents
au moyen de ma fonction hasard().
La voici :
int hasard(){
int r, i;
srand (time (NULL));
r = 1+(int)((double)rand()*(32)/(RAND_MAX+1));
return r;
}
C'est une fonction de génération d'un entier aléatoire entre 1 et 32
tout ce qu'il y a de plus classique.
Le problème vient, je pense, de srand qui se base sur l'horloge.
Ainsi, quand je rentre dans ma boucle, le nombre aléatoire
reste le même pendant 1 seconde ce ralenti mon programme.
Que dois-je faire ?
j'ai un petit problème de timing en C, je m'explique.
Voilà le bout code important de ma fonction main :
for(i=0;i<32;i++){
r = hasard();
t = r;
while(r==t){ r = hasard(); printf("%d\n",r);}
if(r>t) ech(pak,t,r);
else ech(pak,r,t);
}
En gros, je veux tirer deux nombres aléatoires differents
au moyen de ma fonction hasard().
La voici :
int hasard(){
int r, i;
srand (time (NULL));
r = 1+(int)((double)rand()*(32)/(RAND_MAX+1));
return r;
}
C'est une fonction de génération d'un entier aléatoire entre 1 et 32
tout ce qu'il y a de plus classique.
Le problème vient, je pense, de srand qui se base sur l'horloge.
Ainsi, quand je rentre dans ma boucle, le nombre aléatoire
reste le même pendant 1 seconde ce ralenti mon programme.
Que dois-je faire ?
A voir également:
- Entier aléatoire en C
- Tirage au sort excel aléatoire sans doublon - Forum LibreOffice / OpenOffice
- Comment imprimer un tableau excel en entier - Guide
- Tirage aléatoire sans doublon : de plus en plus fort ... ! ✓ - Forum Excel
- Vlc lecture aléatoire - Forum Téléphones & tablettes Android
- Afficher un tableau d'entier en c - Forum C
2 réponses
Salut,
J'ai eu le même problème que toi il y a quelques temps.
Dis moi ce que tu penses de cette solution:
http://www.commentcamarche.net/faq/sujet 7070 generer des nombres aleatoires efficacement
J'ai eu le même problème que toi il y a quelques temps.
Dis moi ce que tu penses de cette solution:
http://www.commentcamarche.net/faq/sujet 7070 generer des nombres aleatoires efficacement
Ca pourrait marcher mais je n'ai franchement pas envie de trouver
autre que time pour faire la seed ^^
J'ai trouver une solution pas très esthétique mais qui fonctionne.
J'ai supprimer ma fonction hasard et ai rajouter le code directement dans le main.
Ca donne ça :
for(i=0;i<32;i++){
r = 1+(int)((double)rand()*(32)/(RAND_MAX+1));
t = r;
while(r==t){r = 1+(int)((double)rand()*(32)/(RAND_MAX+1)); printf("%d\n",r);}
if(r>t) pak = ech(pak,t,r);
else pak = ech(pak,r,t);
}
Je pense que faire appel à rand() directement donne de meilleur résultat...
Merci quand même, cette page ma inspiré ^^
autre que time pour faire la seed ^^
J'ai trouver une solution pas très esthétique mais qui fonctionne.
J'ai supprimer ma fonction hasard et ai rajouter le code directement dans le main.
Ca donne ça :
for(i=0;i<32;i++){
r = 1+(int)((double)rand()*(32)/(RAND_MAX+1));
t = r;
while(r==t){r = 1+(int)((double)rand()*(32)/(RAND_MAX+1)); printf("%d\n",r);}
if(r>t) pak = ech(pak,t,r);
else pak = ech(pak,r,t);
}
Je pense que faire appel à rand() directement donne de meilleur résultat...
Merci quand même, cette page ma inspiré ^^