|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
Étudiant Inscription : avril 2012 Messages : 9 ![]() |
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! Code :
|
||
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() ![]() Inscription : août 2006 Messages : 3 413 ![]() |
Joa,
Quand tu fais ceci : Code :
choi_position(a,b,c,d);//boucle si le choix fait n'est au final pas valide
__________________
Il court en ce moment une espèce de grippe, mais elle ne court pas très vite, car on peut l'attraper sans courir. |
|
|
00
|
|
|
#3 |
|
Membre éclairé
![]() ![]() Inscription : août 2007 Messages : 174 ![]() |
Salut,
Après un coup d'oeil rapide : Pour ce qui est d'"optimiser (t)on code un maximum", je ne sais pas trop d'autant que la manière de faire me semble assez compliquée : "faire le tirage d'abord puis tester, en passant par les cases d'un tableau pas forcément indispensable, et éventuellement faire un appel récursif", essaye de voir si tu ne peux pas concevoir ton algo différement. En attendant, pour une "solution la plus simple possible" tu peux déjà sortir srand(time(NULL)); de la fonction et le mettre avant son premier appel ça devrait au moins éviter les boucles infines. |
|
|
00
|
|
|
#4 | |
Étudiant Inscription : avril 2012 Messages : 9 ![]() |
Citation:
|
|
|
|
00
|
|
|
#5 | |
Étudiant Inscription : avril 2012 Messages : 9 ![]() |
Citation:
je suis d'accord avec toi que mon algo est pas top c'est justement ça mon problème mais je ne trouve pas d'autres manières de le faire il faudrait premièrement ne garder que les choix valide puis faire un rand() seulement pour ces choix la ce qui m'éviterais de devoir utiliser l’appel récursif sauf que je n'ai aucune idée de comment le mettre en œuvre en c ou carrément utiliser une autre façon que le rand() mai je suis très loin d’être un expert ! help ! pour ce qui est de sortir le srand(time(NULL)); je l'ai fait et l'ai placer juste avant le premier appel a cette fonction mai aucun changement d’ailleurs je ne comprends pas pourquoi cela devrait changer quelque chose... |
|
|
|
00
|
|
|
#6 | ||
|
Membre éclairé
![]() ![]() Inscription : août 2007 Messages : 174 ![]() |
Désolé, je n'ai pas trop le temps de regarder plus avant, simplement si tu ré-initialises à la même seconde tu obtiendras le même résultat sur le rand suivant. Sortir le srand et le faire (une seule fois) avant permet au moins d'éviter ce problème.
Du coup je suis étonné que ça ne change rien chez toi et j'ai fais un test rapide en tapant simplement : Code :
PS : ce topic devrait t'apporter un éclairage plus intéressant sur rand : http://www.developpez.net/forums/d12...-aleatoires-c/ |
||
|
|
00
|
|
|
#7 |
![]() ![]() Cyrille Network programmer Inscription : juin 2010 Messages : 1 535 ![]() |
Bonjour,
le problème c'est que le srand pour initialiser le seed doit être fait une fois par programme. |
|
|
00
|
|
|
#8 | |||
Étudiant Inscription : avril 2012 Messages : 9 ![]() |
Citation:
et c'est effectivement mieux j'ai mit le srand() carrément au début du main() et plus de problème merci pour l'aide! |
|||
|
|
00
|
|
|
#9 |
Étudiant Inscription : avril 2012 Messages : 9 ![]() |
auriez-vous d'autre idée d'algo plus simple qui fasse la même chose ?
|
|
|
00
|
|
|
#10 | ||
![]() ![]() |
Tes possibilités sont présentes ou non, tu n'a donc besoin que d'un bit et non d'un int complet.
Code :
__________________
Recherche devs C++ motivés et sérieux pour Last Dungeon. Chaîne Youtube : Vidéos Ma page DVP : http://neckara.developpez.com/ |
||
|
|
10
|
|
|
#11 | ||
![]() ![]() Patrick GonordEnseignant Chercheur Inscription : juin 2005 Messages : 5 427 ![]() |
Peut être comme ceci :
Code :
__________________
Publication : Concepts en C Mon avatar : Glenn Gould -------------------------------------------------------------------------- Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !
|
||
|
|
20
|
|
|
#12 | |||
Étudiant Inscription : avril 2012 Messages : 9 ![]() |
Citation:
Parfait !!! j'aurais jamais penser au "t[n++]" merci !=) |
|||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com