Pileou face en C
Fermé
cracasbur
-
19 févr. 2008 à 20:02
Mahmah Messages postés 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 - 19 févr. 2008 à 22:41
Mahmah Messages postés 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 - 19 févr. 2008 à 22:41
A voir également:
- Pileou face en C
- Face time - Guide
- Face book conection - Guide
- Face time gratuit - Télécharger - Messagerie
- Conection - Forum Facebook
- Navigateur incompatible face book - Forum Windows
5 réponses
Mahmah
Messages postés
496
Date d'inscription
lundi 17 septembre 2007
Statut
Membre
Dernière intervention
22 juin 2010
125
19 févr. 2008 à 20:16
19 févr. 2008 à 20:16
Bonjour,
Le srand, pourquoi pas, mais il se peut que tu es exactement le même hasard à chaque lancement du programme. En général on l'initialise avec la fonction time() qui récupère l'heure en millisecondes. (inclure time.h)
Le vrai problème vient du fait que tu récupères le résultat d'un lancer dans x, mais tu ne t'en sers jamais.
Voilou,
M.
EDIT.:
Si a est incrémenté dans les deux cas, a++; il n'est finalement pas soumis à une condition et peut être augmenté à chaque tour.
Petite question, M Riche et M Pauvre ne changent jamais de choix ?
Le srand, pourquoi pas, mais il se peut que tu es exactement le même hasard à chaque lancement du programme. En général on l'initialise avec la fonction time() qui récupère l'heure en millisecondes. (inclure time.h)
Le vrai problème vient du fait que tu récupères le résultat d'un lancer dans x, mais tu ne t'en sers jamais.
Voilou,
M.
EDIT.:
Si a est incrémenté dans les deux cas, a++; il n'est finalement pas soumis à une condition et peut être augmenté à chaque tour.
Petite question, M Riche et M Pauvre ne changent jamais de choix ?
oui en effet, on me demande le mm hasard a chaque lancement.
quant a x dont je ne me sers pas, il faut bien que ce sot qq chose qui prenne la valeur 0 ou 1, non ???
quant a x dont je ne me sers pas, il faut bien que ce sot qq chose qui prenne la valeur 0 ou 1, non ???
Mahmah
Messages postés
496
Date d'inscription
lundi 17 septembre 2007
Statut
Membre
Dernière intervention
22 juin 2010
125
19 févr. 2008 à 21:17
19 févr. 2008 à 21:17
Non, en fait quand je parlais du même hasard ce n'est pas une chance sur deux.
Il est possible en choisissant ce paramètre pour srand que tu ais toujours la même séquence quand tu lances ton programme.
Si sur une partie tu obtiens les lancers Pile, Pile, Face, Pile, Face. Tu as de grandes chances de retomber exactement sur les mêmes à la partie suivante.
Pour ce qui est du x, oui tu récupères la valeur du lancer, mais tu ne va jamais voir le résultat par la suite. Cela peut être génant pour savoir qui a gagné.
M.
Il est possible en choisissant ce paramètre pour srand que tu ais toujours la même séquence quand tu lances ton programme.
Si sur une partie tu obtiens les lancers Pile, Pile, Face, Pile, Face. Tu as de grandes chances de retomber exactement sur les mêmes à la partie suivante.
Pour ce qui est du x, oui tu récupères la valeur du lancer, mais tu ne va jamais voir le résultat par la suite. Cela peut être génant pour savoir qui a gagné.
M.
Mahmah
Messages postés
496
Date d'inscription
lundi 17 septembre 2007
Statut
Membre
Dernière intervention
22 juin 2010
125
19 févr. 2008 à 21:12
19 févr. 2008 à 21:12
Ce que je ferais, mais peut-être que ce n'est pas dans l'énoncé du problème c'est que M Riche et M Pauvre choisissent à chaque tour leur pari.
Ainsi, pour garder un peu ton programme:
De cette manière on compte aussi les tours où ils font une égalité. Je ne comprends pas trop les tests effectués dans ta boucle. Si 1000 = 1 alors qu'on décrémente 1000 par 10 à la fois, la variable ne vaudra jamais 1. Idem pour l'autre.
Une autre approche du programme : (Je ne sais pas la quelle tu préfères)
D'un point de vu moins joueur et plus statistique...
Ils peuvent choisir :
Pile et Pile
Pile et Face
Face et Pile
Face et Face
Ce qui fait 2 chances sur 4 d'être à égalité, 1 chance sur 4 chacun de gagner.
Je ferais pour cette version statistique un tirage avec 4 possibilités et non 2. C'est à toi de voir si tu préfères simuler une partie ou tirer parmi les résultats possibles d'une partie.
M.
Ainsi, pour garder un peu ton programme:
tant que M Riche ET M Pauvre (Attention tu as mis un OU, ce qui fait aussi que cela ne sera jamais faux) M Riche choisi une face M Pauvre choisi une face On lance la pièce Si la face de la pièce est celle choisie par M Riche M Riche prends 10 sous à M Pauvre Si la face de la pièce est celle choisie par M Pauvre M Pauvre prends 10 sous à M Riche On comptabilise le lancer. On recommence la boucle.
De cette manière on compte aussi les tours où ils font une égalité. Je ne comprends pas trop les tests effectués dans ta boucle. Si 1000 = 1 alors qu'on décrémente 1000 par 10 à la fois, la variable ne vaudra jamais 1. Idem pour l'autre.
Une autre approche du programme : (Je ne sais pas la quelle tu préfères)
D'un point de vu moins joueur et plus statistique...
Ils peuvent choisir :
Pile et Pile
Pile et Face
Face et Pile
Face et Face
Ce qui fait 2 chances sur 4 d'être à égalité, 1 chance sur 4 chacun de gagner.
Je ferais pour cette version statistique un tirage avec 4 possibilités et non 2. C'est à toi de voir si tu préfères simuler une partie ou tirer parmi les résultats possibles d'une partie.
M.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
19 févr. 2008 à 21:17
19 févr. 2008 à 21:17
Salut,
Pour commencer, tu effectues int x, et tu l'utilises dans srand(). Ok mais faut initialiser x à une certaine valeur avant de l'utiliser. Ensuite, l'utilisation de valeurs aléatoires entre deux nombres n'est pas conseillée avec du modulo. La répartition ne sera pas équiprobable. Vaut mieux diviser par RAND_MAX et multiplié par 2.
Enfin, si c'est pile, alors l'un gagne, si c'est face alors c'est l'autre. Faudrait que tu traduises cette condition ( if(x==0) ...)
En espérant t'avoir aidé.
Cordialement
Pour commencer, tu effectues int x, et tu l'utilises dans srand(). Ok mais faut initialiser x à une certaine valeur avant de l'utiliser. Ensuite, l'utilisation de valeurs aléatoires entre deux nombres n'est pas conseillée avec du modulo. La répartition ne sera pas équiprobable. Vaut mieux diviser par RAND_MAX et multiplié par 2.
Enfin, si c'est pile, alors l'un gagne, si c'est face alors c'est l'autre. Faudrait que tu traduises cette condition ( if(x==0) ...)
En espérant t'avoir aidé.
Cordialement
Mahmah
Messages postés
496
Date d'inscription
lundi 17 septembre 2007
Statut
Membre
Dernière intervention
22 juin 2010
125
19 févr. 2008 à 21:25
19 févr. 2008 à 21:25
Rebonjour monsieur Fiddy,
En fait je pense que l'idée initiale est justement d'obtenir une valeur non initialisée afin de l'utiliser comme une valeur pseudo aléatoire pour le srand. Je pense que c'est risqué car dépendant de l'OS. Je préfère time() ou sinon le pid.
Quel est le problème du modulo exactement ?
M.
En fait je pense que l'idée initiale est justement d'obtenir une valeur non initialisée afin de l'utiliser comme une valeur pseudo aléatoire pour le srand. Je pense que c'est risqué car dépendant de l'OS. Je préfère time() ou sinon le pid.
Quel est le problème du modulo exactement ?
M.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
>
Mahmah
Messages postés
496
Date d'inscription
lundi 17 septembre 2007
Statut
Membre
Dernière intervention
22 juin 2010
19 févr. 2008 à 21:35
19 févr. 2008 à 21:35
Non, je pense pas que tu as compris ce qu'il voulait dire. Il veut que ça soit toujours la même suite aléatoire. D'où srand(int), donc tu peux faire srand(x), mais faut que x soit définie. Sinon en effet, si on veut vraiment faire de l'aléatoire srand(time(NULL)) est à utiliser. Mais tout dépend de ce que l'on veut : même suite aléatoire, ou suite vraiment aléatoire.
Pour le problème du modulo : rand() génère un nombre aléatoire entre 0 et RAND_MAX, si on effectue un modulo dessus, les probabilités de chaque nombre ne seront pas les même. Grosso modo, tu n'effectues par une translation pour ramener un domaine à un autre plus petit, tu effectues une homothétie.
Cordialement
Pour le problème du modulo : rand() génère un nombre aléatoire entre 0 et RAND_MAX, si on effectue un modulo dessus, les probabilités de chaque nombre ne seront pas les même. Grosso modo, tu n'effectues par une translation pour ramener un domaine à un autre plus petit, tu effectues une homothétie.
Cordialement
Mahmah
Messages postés
496
Date d'inscription
lundi 17 septembre 2007
Statut
Membre
Dernière intervention
22 juin 2010
125
>
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
19 févr. 2008 à 22:41
19 févr. 2008 à 22:41
Doublement d'accord.
Merci,
M.
Merci,
M.