Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Général VBA
Général VBA Forum général VBA . Pour les logiciels spécifiques (Access, Excel, Word, ...), postez dans les bons sous forums.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/05/2007, 23h18   #1
Invité de passage
 
Inscription : octobre 2006
Messages : 29
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 29
Points : 1
Points : 1
Par défaut Jeu du verger

Bonjour, voilà en faitje dois faire une étude statistique sur le jeudu verger

je rappelle le principe du jeu :
-4 arbres avec des 10 fruits
-corbeaux
-enfant
quand l enfant lance le dé :
au 6, le corbeau marque un point
au 5, l enfant ramasse deux fruits (voir deux identiques)
entre 1 et 4 l enfant recupere un fruit d un des arbres
le jeu se termine quand les enfants on tous les fruits =40, ou quand le corbeau marque 9 points

je dois tester sous l hypothese 1 que l enfant quand il fait 5 recupere les fruits dont il reste le plus.

Ma question est de savoir comment intégrer un dé?
J'utilise une fonction random?

enfin si quelqu 'un avait des idées car je ne vois pas comment établir la structrure du programme

merci
aoking est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/05/2007, 10h07   #2
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Dans tes règles, tu ne dis pas si l'enfant et le corbeau lancent le dé à tour de rôle.
Pour le jeu, j'ai ça mais pour les stats, tu devras comptabiliser les valeurs des lancés de dé dans une feuille de calculs et réaliser soit un semi de point, soit une courbe de gauss.
Reste à savoir le but de l'exercice : Réaliser le lancé du dé et gérer les arbres ou faire des stats.
Pour Randomize et pour le principe, voilà toujours
Code :
1
2
3
4
5
6
7
8
9
10
        Randomize
        Result = Int(Rnd * 6) + 1
        Select Case Result
            Case 1, 2, 3, 4 'l'enfant fait 1
                  'Ton code
            Case 5 ' L'enfant fait 2
                  'Ton code
            Case 6 'le corbeau fait 1
                  'Ton code
        End Select
Bon courage
A+
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/05/2007, 13h38   #3
Invité de passage
 
Inscription : octobre 2006
Messages : 29
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 29
Points : 1
Points : 1
Tout d'abord merci,

Non en fait le corbeau ne joue pas, c'est quand les enfants font un 6 qu'ils marquent des points
Bien en fait le but est d'évaluer la meilleure stratégie pour les enfants selon des hypothèses quand le dé=5 :
-prendre deux fruits identiques dans l'arbre ayant le moins de fruit
-prendre deux fruits identiques dans l'arbre ayant le max de fruit

Quand tu dis que tu as ça? tu parles du code?

Pour la partie statistique, il s'agit d'évaluer le pourcentage de victoire dans chaque stratégie, mais aussi de déterminer à partir un IC pour un risque de 5%..

merci de ton aide..
retiens moi au courant..
aoking est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/05/2007, 15h07   #4
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Ok. Donc, l'intéressant sont les stats. Alors je peux te refiler mon code (pas optimisé mais bon... Qu'importe le flacon...
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Sub JeuDuVerger()
Dim Arbre(4)
Dim enfant, corbeau, i, memo, msg, dé
Dim Continuer As Boolean
    For i = 1 To 4
        Arbre(i) = 10
    Next
    Continuer = True
    Do
        MsgBox "Lancer le dé"=+ 1
        Randomize
        Result = Int(Rnd * 6) + 1
        memo = 0
        Select Case Result
            Case 1, 2, 3, 4
                enfant = enfant + 1
                For i = 1 To 4 'l'arbre qui porte le moins de fruits
                    If Arbre(i) > memo Then
                        memo = i
                        Exit For
                    End If
                    If i = 4 Then Exit For
                Next
                Arbre(memo) = Arbre(memo) - 1
            Case 5
                enfant = enfant + 2
                For i = 1 To 4 ' l'arbre qui porte le plus de fruits
                    If Arbre(i) > memo And Arbre(i) >= 2 Then
                        memo = i
                    End If
                    If i = 4 Then Exit For
                Next
                Arbre(memo) = Arbre(memo) - 2
            Case 6
                corbeau = corbeau + 1
        End Select
        For i = 1 To 4
            Continuer = Arbre(i) > 0
            If Continuer Then Exit For
        Next
    Loop While Continuer And corbeau < 9 And enfant < 40
    msg = "L'enfant marque " & enfant & vbCr & "Le Corbeau marque " & corbeau
    For i = 1 To 4
        msg = msg & vbCr & "Arbre " & i & " = " & Arbre(i)
    Next
    msg = msg & vbCr & "Nombre de lancés : " & dé
    MsgBox msg
End Sub
Pour les stats, la meilleure stratégie est simple et est déjà intégrée au programme, je te laisse la découvrir. Tu vas avoir du boulot pour la démontrer...
Tu ne manques pas de nous tenir au courant
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/05/2007, 16h56   #5
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Bon, je te dois bien deux indices quant à la méthode...
De 1 à 4, je fais une razzia sur le premier arbre, puis sur le second, puis... etc.

Pour 5, je pars du pommier 4 en sens inverse. S'il est vide, je passe sur le 3... etc. Mais comme il peut ne me rester qu'une pomme sur le dernier arbre où il en reste, et que je veux en enlever deux, je passe mon tour jusqu'à ce qu'un 1 à 4 sorte.
Tu en es où ?
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2007, 12h10   #6
Invité de passage
 
Inscription : octobre 2006
Messages : 29
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 29
Points : 1
Points : 1
Ok merci je vois comment tu fonctionnes...

Bien le plus interessant pour moi est d ajouter une case de simulation qui fera tourner le programme en boucle afin d'avluer les différentes hypothèses..

Cependant, pour le 5 tu as mis dans le code l'hypothèse 1 si je ne m'abuse?
aoking est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2007, 12h32   #7
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Citation:
Envoyé par aoking
Cependant, pour le 5 tu as mis dans le code l'hypothèse 1 si je ne m'abuse?
Zut ! Crotte ! M... je t'ai mis la version avec Step 1 au lieu de Step - 1. Faut corriger
Code :
1
2
3
4
5
6
                For i = 4 To 1 step -1 ' l'arbre qui porte le plus de fruits
                    If Arbre(i) > memo And Arbre(i) >= 2 Then
                        memo = i
                    End If
                    If i = 1 Then Exit For
                Next
Quelle andouille !
A+
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2007, 13h10   #8
Invité de passage
 
Inscription : octobre 2006
Messages : 29
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 29
Points : 1
Points : 1
donc si je veux effectuer les différentes hypothèese je peux tout simplement faire deux fois ce code en modifiant juste les conditions?

Pour effetuer une simulation il suffit que je modifie la boucle?
par exemple for i=1 to n
next i

avec un imput pour le n demadant le nbre de simulation
aoking est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2007, 14h19   #9
Invité de passage
 
Inscription : octobre 2006
Messages : 29
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 29
Points : 1
Points : 1
Hum.. je voulais avoir un autre petit renseignement..

Bien en fait je regardais le code, et je voulais savoir si il était possible de lui empecher de nous faire cliquer toute le temps sur lancer le dé, et de récupérer les résultats afin que je puisse effectuer des simulations?
aoking est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2007, 14h32   #10
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Citation:
Envoyé par Tu
je voulais savoir si il était possible de lui empecher de nous faire cliquer toute le temps sur lancer le dé, et de récupérer les résultats afin que je puisse effectuer des simulations?
Ben tu mets
Code :
'        MsgBox "Lancer le dé" ' en remarque
Je l'ai juste ajouté pour le fun
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2007, 14h45   #11
Invité de passage
 
Inscription : octobre 2006
Messages : 29
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 29
Points : 1
Points : 1
ok un peu bête ma question j'ai vu après...

J'ai inséré une boucle while afin de simuler selon le nombre d'essai que l'on veut..
J'aimerais inséré à la fin un msg box comme tu as fait mais qui donne le pourcentage de victoire des enfants
J'ai pour cela insérer une variable qui rajoute 1 quand le enfant>corbeau, mais le probleme c'est qu elle ne s'ajoute pas (pas facvile pour simuler :p )
aoking est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2007, 14h58   #12
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Je ne suis pas sûr d'avoir compris ta question.
Si tu veux ajouter 1 à Hyp1, tu dois l'ajouter... à Hyp1. Et si tu veux compter le nombre de Hyp1, tu ne dois pas remettre Hyp1 à 0 quand c'est le corbeau qui gagne. Enfin, enfant est forcément > à corbeau à moins que corbeau gagne 9 fois pendant qu'enfant ne gagne même pas 9... J'essaie de mettre ce que j'ai compris. Je déduis que tu as mis une boucle sur l'ensemble de la boucle d'origine...
Code :
1
2
3
4
5
6
7
8
9
10
11
Début boucle
    do
        'le code
        '...
    Loop While Continuer And corbeau < 9 And enfant < 40
    If enfant = 40 Then
         hyp1e = hyp1e + 1
       Elseif corbeau = 9 and enfant < 40 then
         hyp1c = hyp1c + 1
    End If
Fin boucle
Mais précise ce que tu veux
A+
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2007, 15h04   #13
Invité de passage
 
Inscription : octobre 2006
Messages : 29
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 29
Points : 1
Points : 1
Je voulais juste savoir une précision

En fait je dispose de plusieurs hypothèses comme je l'avais precedemment expliquée et le but de la manoeuvre est de voir quelle hypothèese est la meilleure (pourcentage de victoire)

H1 : l'enfant qui fait 5 choisit les deux fruits dont il reste le plus
H2: l'enfant qui fait 5 choisit les deux fruits au hasard
H3:l'enfant qui fait 5 choisit les deux fruits dont il reste le moins

Cependant quand j'ai regardé le code, je voudrais savoir ou implémenter ces hypothèses. En effet, quand l'enfant fait de 1 à 4 il enlève un fruit sur l arbre correspondant à condition qu'il en reste, sinon c'est l'enfant suivant qui joue.

Or est ce que dans le code, il ne prend pas sur l'arbre qui en a le moins directement?
aoking est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2007, 15h08   #14
Invité de passage
 
Inscription : octobre 2006
Messages : 29
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 29
Points : 1
Points : 1
Oui désolé je m'exprime mal

Bien en fait malgrès mon explication pas très compréhensible, tu as vu juste, je voulais compter sur par exemple 10 lancers le nombre de victoire des enfants sur le corbeau afin d'établir des probabilités sur la victoire.

Donc voilà, j'ai précisé dans le poste au dessus les différentes hypothèses...
aoking est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2007, 15h31   #15
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Citation:
Envoyé par Tu
est ce que dans le code, il ne prend pas sur l'arbre qui en a le moins directement ?
En effet, c'était dès le départ ce qui me paraissait la meilleure hypothèse.
Je m'explique : Le nombre de chances que l'enfant sorte un 5 est statistiquement inférieur au nbre de chances de sortir l'une des 4 autres valeurs.
Comme avec 5, tu dois ôter 2, il est préférable de les enlever sur l'arbre auquel il reste le plus de cerises.
En commençant par le premier arbre pour enlever 1, je laisse toutes les chances aux deux cerises de pouvoir être ramassées sur le dernier arbre, puis éventuellement sur le précédent.
Par contre, ce n'est pas de chance si le dernier jeté de dé = 5, tombe sur un arbre dont il ne reste qu'une cerise... mais ce n'est pas nul.
Pour changer d'hypothèse, au lieu de choisir l'arbre, tu dois le faire au hasard en mettant un rnd sur le N° de l'arbre pour le ramassage et compter pour chaque série le nombre de jets de dé.
Je te laisse faire, c'est férié...
A+

Citation:
Envoyé par ouskel'n'or
Pour les stats, la meilleure stratégie est simple et est déjà intégrée au programme, je te laisse la découvrir. Tu vas avoir du boulot pour la démontrer...
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2007, 15h35   #16
Invité de passage
 
Inscription : octobre 2006
Messages : 29
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 29
Points : 1
Points : 1
Ok merci j'y vois plus clair...

Juste une dernière question concernant le fait que lorsque je simule par exmple 100 lancers, la case ou devrait s'afficher le nbre de victoire des enfants est en général très très faible (1 ou2)...

N'ai je pas mis une erreur dans le code?

Merci en tt cas pour le dérangement occasionné
aoking est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2007, 15h50   #17
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Je te donne déjà une piste
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Dim NoDeLarbre(4) as byte, NoArbre as byte
Dim ok as boolean, nb as byte
nb = 4
i=1
Do 
     NoArbre = Int(nb * rnd)+1
     for n = 1 to i
           ok = ok and NoDeLarbre(n) <> NoArbre
           if not ok then exit for
     next
     if ok then
           i = i + 1
           NoDeLarbre(i) = NoArbre
           nb = nb - 1 'moins tu as d'arbres moins tu as le choix pour rnd
     endif
loop Until i = 4
Pas testé (!) mais corrigé (!!!)
A+

Nouvelle correction : ici "ok = ok and NoDeLarbre(n) <> NoArbre"
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2007, 00h15   #18
Invité de passage
 
Inscription : octobre 2006
Messages : 29
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 29
Points : 1
Points : 1
Bien j'ai travaillé sur une patie de mon code mais j'ai quelques problèmes concernant les différentes hypothèses...

Voici ce que j'ai mis dans le cas H (on prend au hasard un arbre et on prend un fruit dans celui-ci, on reitère cette opération deux fois)


Je voulais savoir si dans le cas du minimum (on prend deux fruits sur l'arbre ayant le moins de fruit il faut bien mettre caci?



merci d'avance pour vos aides...
aoking est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2007, 11h06   #19
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Je réponds à ta deuxième question
Code :
1
2
3
4
5
6
7
8
enfant = enfant + 2
              memo = 0 'tu dois initialiser memo si tu ne le fais pas plus haut
              For i = 1 To 4 ' l'arbre qui porte le plus de fruits
                    If Arbre(i) > memo And Arbre(i) >= 2 Then
                        memo = i
                    End If
                Next
                if arbre(memo) > 2 then Arbre(memo) = Arbre(memo) - 2
Là, tu as l'arbre qui porte le plus de fruits avant le -2

Par contre, dans ton premier code, je ne comprends pas : Qu'appelles-tu le cas H ?
Ce que je comprends : Si l'enfant fait 5, il prend une cerise sur un arbre et une cerise sur le même arbre si l'arbre(j) > 1 ou une cerise sur un arbre pris au hasard et une cerise sur un autre arbre pris au hasard sans condition. Et si cet arbre est vide ? Que-se-passe-t-il ?
Pour vérifier les résultats, fais-toi une boucle à la fin de ta sub (si ce n'est pas fait)
Code :
1
2
3
For i = 1 to 4
     msgbox Arbre(i)
Next
Ou mieux, mets dans la boucle principale do While
Code :
1
2
3
For NoArbre = 1 to 4
     Debug print "Arbre " & NoArbre & " = " & Arbre(NoArbre)
Next
et affiche la fenêtre Exécution dans VB éditor -> Affichage -> Fenêtre Exécution
Tu verras l'évolution de chacun de tes arbres.
Tu dis
A+
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2007, 17h43   #20
Invité de passage
 
Inscription : octobre 2006
Messages : 29
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 29
Points : 1
Points : 1
Bien dans le cas de l'hypothèse H (qui est H2 en fait à cause d 'une faute de frappe), quand l'enfant fait 5 il choisit aléatoirement un arbre (cerisier, pommier...) en retire le fruit, puis reeffectue l'opération identique.

dans le cas justement où il n'y a plus q'un fruit (j'allais y venir), le problème est que l'enfant passera alors de 39 à 41 (ce qui n'est pas bon si je veux compter le nbre de fuits restants)..

Ma question concerne donc l'hypothèse H2, d'où mon code...
Pour le cas du 39, dois je mettre un if ou la boucle me protège de cette erreur..

merci..
aoking est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h44.


 
 
 
 
Partenaires

Hébergement Web