Probleme fonction aleatoire en C

Fermé
kvin1 Messages postés 4 Date d'inscription samedi 31 mars 2012 Statut Membre Dernière intervention 5 mai 2012 - 4 mai 2012 à 15:03
kvin1 Messages postés 4 Date d'inscription samedi 31 mars 2012 Statut Membre Dernière intervention 5 mai 2012 - 5 mai 2012 à 12:42
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
}






2 réponses

kvin1 Messages postés 4 Date d'inscription samedi 31 mars 2012 Statut Membre Dernière intervention 5 mai 2012
Modifié par kvin1 le 4/05/2012 à 15:10
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 (=
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
4 mai 2012 à 15:35
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.
0
kvin1 Messages postés 4 Date d'inscription samedi 31 mars 2012 Statut Membre Dernière intervention 5 mai 2012
4 mai 2012 à 16:15
salut, merci d'avoir répondu!

Effectivement mon rand() n'est pas bien utiliser, mon problème est plus un problème d'algo mais je ne vois pas d'autre solution pour faire un choix aléatoire ! help =)
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
4 mai 2012 à 16:28
?? qu'est-ce que tu veux de plus ? Tu utilises ton srand dans le main, et tu modifies le modulo par la division qui est dans le lien.
0
kvin1 Messages postés 4 Date d'inscription samedi 31 mars 2012 Statut Membre Dernière intervention 5 mai 2012
5 mai 2012 à 12:42
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 (=
0