Énigmatique Xunor
http://xunor.free.fr/forum/

La porte
http://xunor.free.fr/forum/viewtopic.php?f=10&t=9
Page 4 sur 4

Auteur:  Xunor [ Dim Jan 17, 2010 13:08 ]
Sujet du message: 

raph04 a écrit:
Bonjour,
...
Merci d'avance parce que là ça va m'empêcher de dormir :P

Salut,
aucune erreur de compréhension mais 2 grosses erreurs de programmation
1) Ton troisième test devrait porter sur les portes 0 et 1 (et pas 0 et 2)
Ceci n'est pas l'erreur qui a le plus de conséquence ...
2) Tu as enchainé les conditionnelles sans faire de "else" du coup le résultat ne correspond pas à ce que tu veux car tu réaffecte la variable porteJoueur
donc il y a 2 solutions : soit tu utilise une autre variable genre "porteJoueurFinale" soit tu utilise des "else"

solution 1 :

Code:
Private Sub CommandButton1_Click()

    Dim nbessai, essaigagnant As Integer
    Dim porteJoueur, porteGagnante, portePresentateur, porteJoueurFinale As Integer
   
    'On initialise les variable
    'Le nombre d'essaie est choisi par l'utilisateur
    nbessai = Range("B1").Value
    'Le nombre d'essaie gagnant est a 0 au début
    essaigagnant = 0
   
    'boucle sur le nombre d'essaie souhaité
    For I = 1 To nbessai
   
        'La porte gagnante est defini à la base (entre 0,1 et 2)
        porteGagnante = Int(3 * Rnd)
        'Le joueur choisi une porte au début (entre 0,1 et 2)
        porteJoueur = Int(3 * Rnd)
       
        'Tant que la porte du présentateur est celle du candidat ou la gagnant, on en prend une autre
        Do
            portePresentateur = Int(3 * Rnd)
        Loop While (portePresentateur = porteGagnante) Or (portePresentateur = porteJoueur)
       
        'On fait changer au joueur de porte
        'Si la porte 0 est la porte ni choisi ni montré, on l'affecte au joueur
        If ((portePresentateur = 2) And (porteJoueur = 1)) Or ((portePresentateur = 1) And (porteJoueur = 2)) Then
            porteJoueurFinale = 0
        End If
        'Si la porte 1 est la porte ni choisi ni montré, on l'affecte au joueur
        If ((portePresentateur = 0) And (porteJoueur = 2)) Or ((portePresentateur = 2) And (porteJoueur = 0)) Then
            porteJoueurFinale = 1
        End If
        'Si la porte 2 est la porte ni choisi ni montré, on l'affecte au joueur
        If ((portePresentateur = 0) And (porteJoueur = 1)) Or ((portePresentateur = 1) And (porteJoueur = 0)) Then
            porteJoueurFinale = 2
        End If
        'Si la porte du joueur est la porte gagnante on ajoute 1 au essaie gagnant
        If porteJoueurFinale = porteGagnante Then
            essaigagnant = essaigagnant + 1
        End If
       
    Next I
   
    Range("B3").Value = essaigagnant
   
End Sub



solution 2 :
Code:
Private Sub CommandButton1_Click()

    Dim nbessai, essaigagnant As Integer
    Dim porteJoueur, porteGagnante, portePresentateur As Integer
   
    'On initialise les variable
    'Le nombre d'essaie est choisi par l'utilisateur
    nbessai = Range("B1").Value
    'Le nombre d'essaie gagnant est a 0 au début
    essaigagnant = 0
   
    'boucle sur le nombre d'essaie souhaité
    For I = 1 To nbessai
   
        'La porte gagnante est defini à la base (entre 0,1 et 2)
        porteGagnante = Int(3 * Rnd)
        'Le joueur choisi une porte au début (entre 0,1 et 2)
        porteJoueur = Int(3 * Rnd)
       
        'Tant que la porte du présentateur est celle du candidat ou la gagnant, on en prend une autre
        Do
            portePresentateur = Int(3 * Rnd)
        Loop While (portePresentateur = porteGagnante) Or (portePresentateur = porteJoueur)
       
        'On fait changer au joueur de porte
        'Si la porte 0 est la porte ni choisi ni montré, on l'affecte au joueur
        If ((portePresentateur = 2) And (porteJoueur = 1)) Or ((portePresentateur = 1) And (porteJoueur = 2)) Then
            porteJoueur = 0
        'Si la porte 1 est la porte ni choisi ni montré, on l'affecte au joueur
        ElseIf ((portePresentateur = 0) And (porteJoueur = 2)) Or ((portePresentateur = 2) And (porteJoueur = 0)) Then
            porteJoueur = 1
        'Si la porte 2 est la porte ni choisi ni montré, on l'affecte au joueur
        ElseIf ((portePresentateur = 0) And (porteJoueur = 1)) Or ((portePresentateur = 1) And (porteJoueur = 0)) Then
            porteJoueur = 2
        End If
        'Si la porte du joueur est la porte gagnante on ajoute 1 au essaie gagnant
        If porteJoueur = porteGagnante Then
            essaigagnant = essaigagnant + 1
        End If
       
    Next I
   
    Range("B3").Value = essaigagnant
   
End Sub


J'espère avoir résolu tes problèmes de sommeil

Page 4 sur 4 Heures au format UTC + 2 heures
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/