IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Programme qui devine le nombre auquel vous pensez (VBA)


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Autre

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 6
    Par défaut Programme qui devine le nombre auquel vous pensez (VBA)
    Bonjour à tous,
    alors voilà je suis nouvelle dans le monde de l'informatique et je m'adresse à vous parce que je dois créer ce programme sous Virtual Basic qui me pose problème :

    « Le programme qui lit dans vos pensées en 10 questions.
    Ecrire le programme qui vous demande de penser à un nombre entre 1 et 999,
    - propose une valeur (le milieu d’un certain intervalle [min, max[ contenant la solution),
    - attend que vous répondiez à l’aide des signes ">" et "<" si le nombre est « plus grand ou égal» ou
    « strictement plus petit »,
    - restreint l’intervalle des possibilités en fonction de la réponse,
    - relance le processus d’interrogation jusqu’à réduire l’intervalle [min, max[ à un seul élément : le
    nombre recherché. »


    J'ai essayé de faire quelques trucs mais je n'y arrives pas
    J'ai ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Sub COMPTER()
    Dim n As Integer
    Dim i As Integer
    Dim s As String
     
    MsgBox "Pensez à un chiffre entre 1 et 999." & vbCr & "Je  vais le deviner. "
    i = 500
    s = InputBox("Est-il supérieur à" & i & " (Tapez >), égal à " & i & " (Tapez =)  ou inférieur à " & i & " (Tapez <)")
     
    If s <> ">" Or s <> "<" Then
    MsgBox "Erreur de caractère. Tapez < ou >"
    Else
    End If
     
    While (s = "<")
    Max = i
    i = (Min + Max) / 2
    s = InputBox("Est-il supérieur ou égal à " & i & "(Tapez >) ou inférieur à " & i & "(Tapez <)")
    Wend
     
    While (s = ">")
    i = Min
    i = (Min + Max) / 2
    s = InputBox("Est-il supérieur ou égal à " & i & "(Tapez >) ou inférieur à " & i & "(Tapez <)")
    Wend
     
    MsgBox n
     
     
    End Sub
    Je sais qu'il faut que je fasse une boucle mais je ne maitrise pas assez ça ne doit pas être comme cela qu'il faut la faire, je suis perdue je sais plus quoi faire !

    Voilà, je vous remercie de votre aide.

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut
    bonjour

    moi j'ai plus simple je vais voir mme irma

    et pour être sérieux en combien de temps ton programme doit trouver

    ton premier chiffre est 500 donc 499 possibilités le tout réduit en fonction des réponse "< ou>"

    ça n'est pas deviner ça s'appelle une opération a 1 inconnu

    au plaisir

    je pourrais même ajouter que une seule boucle suffirait

    boucler sur le string"< ou>"
    et dans la boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if reponse ="<" then max=i
    if reponse=">" then min=i
    forcement ça te réduirait l’écart du bon résultat
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Autre

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 6
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    bonjour

    moi j'ai plus simple je vais voir mme irma

    et pour etre serieux en combien de tems ton programme doit trouver

    ton premier chiffre est 500 donc 499 possibilités le tout reduit en fonction des reponse"< ou>"

    c'a n'est pas deviner ca s'appelle une operation a 1 inconu

    au plaisir
    ^^ Ce n'est pas moi qui est fait cet énoncé, mais mes professeurs,
    D'accord je vais essayer cette boucle merci !

    @mercatog Merci beaucoup mais je ne connais pas la fonction "case" à quoi sert - elle ?

  4. #4
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Autre

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 6
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    je pourrais meme ajouter que une seule boucle suffirait

    boucler sur le string"< ou>"
    et dans la boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if reponse ="<" then max=i
    if reponse=">" then min=i
    forcement ca te reduirais l'ecart du bon resultat
    Euh je n'ai pas compris quelle serait alors la condition de la boucle ?

    Tant que s <> "=" ??

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    si la reponse est "="

    tu donne le resultat donc ca n'est pas un pseudo devinage tu donne la reponse

    en testant le max et min au moins pour le dernier tour c'est l'appli qui te donne le resultat

    et utiliser la fonction "rnd" peut te permettre l'acceleration du processuset d'ajouter un peu de suspense unpeu comme au juste prix a la fin quand le candidat doit trouver le prix de la vitrine plutot qu'utilise ine incrementaion de 1 a chaque fois

    a tu compris ?
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    @Ihaveadream
    Regarde l'aide sur Select Case, c'est plus approprié dans le cas de plusieurs conditions au lieu des If Then
    Tu pourras faire le même code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Sub COMPTER()
    Dim i As Integer, Max As Integer, Min As Integer
    Dim S As String
     
    MsgBox "Pensez à un chiffre entre 1 et 999." & vbCr & "Je vais le deviner. "
    i = 500
    Max = 1000
    Do
        S = InputBox("Est-il supérieur à " & i & " (Tapez >), égal à " & i & " (Tapez =) ou inférieur à " & i & " (Tapez <)")
        If S = "" Then
            Exit Sub
        ElseIf S = ">" Then
            Min = i
        ElseIf S = "<" Then
            Max = i
        ElseIf S = "=" Then
            Exit Do
        Else
            MsgBox "Erreur de caractère. Tapez < ou > ou ="
        End If
        i = (Max + Min) / 2
    Loop
    MsgBox "Bingo, le nombre deviné est " & i
    End Sub

  7. #7
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Autre

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 6
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    re
    si la reponse est "="

    tu donne le resultat donc ca n'est pas un pseudo devinage tu donne la reponse

    en testant le max et min au moins pour le dernier tour c'est l'appli qui te donne le resultat

    et utiliser la fonction "rnd" peut te permettre l'acceleration du processuset d'ajouter un peu de suspense unpeu comme au juste prix a la fin quand le candidat doit trouver le prix de la vitrine plutot qu'utilise ine incrementaion de 1 a chaque fois

    a tu compris ?
    Ok donc en gros je dois enlever le signe "=" , c'est vrai que c'est logique !
    Que veut dire "incrémenter" ? ^^

    Citation Envoyé par mercatog Voir le message
    @Ihaveadream
    Regarde l'aide sur Select Case, c'est plus approprié dans le cas de plusieurs conditions au lieu des If Then
    Tu pourras faire le même code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Sub COMPTER()
    Dim i As Integer, Max As Integer, Min As Integer
    Dim S As String
     
    MsgBox "Pensez à un chiffre entre 1 et 999." & vbCr & "Je vais le deviner. "
    i = 500
    Max = 1000
    Do
        S = InputBox("Est-il supérieur à " & i & " (Tapez >), égal à " & i & " (Tapez =) ou inférieur à " & i & " (Tapez <)")
        If S = "" Then
            Exit Sub
        ElseIf S = ">" Then
            Min = i
        ElseIf S = "<" Then
            Max = i
        ElseIf S = "=" Then
            Exit Do
        Else
            MsgBox "Erreur de caractère. Tapez < ou > ou ="
        End If
        i = (Max + Min) / 2
    Loop
    MsgBox "Bingo, le nombre deviné est " & i
    End Sub
    D'accord je pense avoir compris, mais n'y aurait t - il pas un moyen avec "while" parce qu'en fait on nous a donné cela en exercice d'application du cours sur les boucles ^^.

  8. #8
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Autre

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 6
    Par défaut
    En testant j'ai remarquer que quoi que je mette il s'affiche "erreur de caractère ... " même quand je mets ">" "<"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If s <> ">" Or s <> "<" Then
    MsgBox "Erreur de caractère. Tapez < ou >"
    Exit Sub
    End If

  9. #9
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 971
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 971
    Par défaut
    Qia,

    Il faut rendre le programme un peu moins stupide dans ses réponses, et le faire travailler comme un humain traitant ce problème : vive la dichotomie !

  10. #10
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Une variante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Sub COMPTER()
    Dim i As Integer, Max As Integer, Min As Integer
    Dim S As String
     
    MsgBox "Pensez à un chiffre entre 1 et 999." & vbCr & "Je vais le deviner. "
    i = 500
    Max = 1000
    Do
        S = InputBox("Est-il supérieur à " & i & " (Tapez >), égal à " & i & " (Tapez =) ou inférieur à " & i & " (Tapez <)")
        Select Case S
            Case "": Exit Sub
            Case ">": Min = i
            Case "<": Max = i
            Case "=": Exit Do
            Case Else: MsgBox "Erreur de caractère. Tapez < ou > ou ="
        End Select
        i = (Max + Min) / 2
    Loop
    MsgBox "Bingo, le nombre deviné est " & i
    End Sub

  11. #11
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    bonjour mercatog
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    Sub COMPTER()
    Dim i As Integer, Max As Integer, Min As Integer
    Dim S As String
     
    MsgBox "Pensez à un chiffre entre 1 et 999." & vbCr & "Je vais le deviner. "
    i = 500
    Max = 1000
    Do
        S = InputBox("Est-il supérieur à " & i & " (Tapez >), égal à " & i & " (Tapez =) ou inférieur à " & i & " (Tapez <)")
        Select Case S
            Case "": Exit Sub
            Case ">": Min = i
            Case "<": Max = i
            Case "=": Exit Do
            Case Else: MsgBox "Erreur de caractère. Tapez < ou > ou ="
        End Select
        i = (Max + Min) / 2
    Loop
    MsgBox "Bingo, le nombre deviné est " & i
    End Sub
    pour que ca soit du tonnerre il faudrais remplacer

    par un truc du genre dans la boucle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if min+1=max then exit do
    juste pour avoir l'ilusion qu'il a trouver tout seul

    et pour rendre un peu plus rapide incrementer i par un truc du genre
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 12/12/2010, 23h09
  2. un programme qui calcule le nombre des mots
    Par komat dans le forum Débuter
    Réponses: 3
    Dernier message: 06/12/2010, 22h46
  3. programme qui affiche le nombre entré
    Par levasseur62 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 29/10/2010, 18h45
  4. Réponses: 9
    Dernier message: 12/10/2006, 00h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo