Probleme fonction aleatoire en C
kvin1
Messages postés
4
Date d'inscription
Statut
Membre
Dernière intervention
-
kvin1 Messages postés 4 Date d'inscription Statut Membre Dernière intervention -
kvin1 Messages postés 4 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
j'aimerais un peu d'aide sur une fonction en c que j'essaie de coder,
en gros :
j'ai 4 choix possibles et chaque choix peut être a "0" ou "1"
je dois faire une fonction qui choisit aléatoirement(enfin le plus possible bien-sur) un des choix parmi ceux qui sont a 1
mon idée était de faire un rand() basé sur le time() pour générer un chiffre entre 1 et 4 puis tester si le choix est bien a la valeur "1"
mai problème ! ça ne marche pas!
je pense que la cause est que le rand marche sur la base des seconde et donc que la fonction boucle des centaines de fois(pour une même seconde) avant que le rand() génère un nouveau chiffre
ma solution a été de mettre un délai sleep(1000) et cela marche mai mon programme met parfois plus 30 a utiliser cette fonction lol
j'ai donc besoin d'une autre solution la plus simple possible pour pouvoir optimiser mon code un maximum
merci a vous!
int choi_position(int a, int b, int c, int d)
{
int t[4];
int i;
t[0]=a;t[1]=b;t[2]=c;t[3]=d;
srand(time(NULL));
i=rand()%4;
Sleep(1000);//pause obligatoire pour ne pas boucler sur la meme seconde
if(t[i]==1)
return i+1;//retourne le choix qui est fait ex: 1,2,3,4
else
choi_position(a,b,c,d);//boucle si le choix fait n'est au final pas valide
}
j'aimerais un peu d'aide sur une fonction en c que j'essaie de coder,
en gros :
j'ai 4 choix possibles et chaque choix peut être a "0" ou "1"
je dois faire une fonction qui choisit aléatoirement(enfin le plus possible bien-sur) un des choix parmi ceux qui sont a 1
mon idée était de faire un rand() basé sur le time() pour générer un chiffre entre 1 et 4 puis tester si le choix est bien a la valeur "1"
mai problème ! ça ne marche pas!
je pense que la cause est que le rand marche sur la base des seconde et donc que la fonction boucle des centaines de fois(pour une même seconde) avant que le rand() génère un nouveau chiffre
ma solution a été de mettre un délai sleep(1000) et cela marche mai mon programme met parfois plus 30 a utiliser cette fonction lol
j'ai donc besoin d'une autre solution la plus simple possible pour pouvoir optimiser mon code un maximum
merci a vous!
int choi_position(int a, int b, int c, int d)
{
int t[4];
int i;
t[0]=a;t[1]=b;t[2]=c;t[3]=d;
srand(time(NULL));
i=rand()%4;
Sleep(1000);//pause obligatoire pour ne pas boucler sur la meme seconde
if(t[i]==1)
return i+1;//retourne le choix qui est fait ex: 1,2,3,4
else
choi_position(a,b,c,d);//boucle si le choix fait n'est au final pas valide
}
A voir également:
- Probleme fonction aleatoire en C
- Fonction si et - Guide
- Fonction miroir - Guide
- Fonction moyenne excel - Guide
- Fonction remplacer sur word - Guide
- Tirage au sort excel aléatoire sans doublon ✓ - Forum Excel
2 réponses
petite info supplémentaire
A la base mon programme est une bataille navalle et cette fonction me permet de choisir la position de mon bateau (haut,bas,droite,gauche) par rapport a une coordonné initial choisi.
peut être il y a une toute autre solution...je suis preneur (=
A la base mon programme est une bataille navalle et cette fonction me permet de choisir la position de mon bateau (haut,bas,droite,gauche) par rapport a une coordonné initial choisi.
peut être il y a une toute autre solution...je suis preneur (=
pour une bonne utilisation de rand, voir cet exemple :
http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man3/rand.3.html
la fonction srand ne s'utilise qu'une seule fois par programme pour introduire un comportement différent à chaque exécution du programme. En respectant ces deux choses, il n'y a pas besoin de sleep et autre.
http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man3/rand.3.html
la fonction srand ne s'utilise qu'une seule fois par programme pour introduire un comportement différent à chaque exécution du programme. En respectant ces deux choses, il n'y a pas besoin de sleep et autre.
oui c'est ce que j'ai fai maintenant grâce a ton lien merci ! cela va beaucoup mieu !
j'aimerais seulement trouver une façon de faire un peu plus logique car je fais mon rand() sur mes choix et seulement après je test si mon choix choisi est valide..
la logique voudrait que je fasse le contraire; un rand() final seulement entre les choix possibles (=
j'aimerais seulement trouver une façon de faire un peu plus logique car je fais mon rand() sur mes choix et seulement après je test si mon choix choisi est valide..
la logique voudrait que je fasse le contraire; un rand() final seulement entre les choix possibles (=