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

VB 6 et antérieur Discussion :

Visual basic: algo résolvant une équation du second degré


Sujet :

VB 6 et antérieur

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 47
    Points : 30
    Points
    30
    Par défaut Visual basic: algo résolvant une équation du second degré
    Bonsoir à tous!

    J'ai un petit exercice à faire: écrire un algo sous visual basic qui résout n'importe quelle équation du second dégré.
    J'ai déjà écri un algo mais il bug de temps en temps...

    Est ce que quelqu'un aurait la gentillesse de m'apporter son aide? Merci

    En ce qui concerne l'interface graphique, il y a juste un bouton qui lance la saisie des coefficient et la résolution de l'équation.

    Algo:

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    Option Explicit
    Dim a As Integer
    Dim b As Integer
    Dim c As Integer
    Dim delta As Integer
    Dim x As Integer
    Dim x1 As Integer
    Dim x2 As Integer
    'Déclaration des variables
     
     
     
     
    Private Sub Command1_Click()
    'Algorithme qui résout une équation du second degré
     
    a = InputBox("A=", "**SAISIE**")
    b = InputBox("B=", "**SAISIE**")
    c = InputBox("C=", "**SAISIE**")
     
    If a = 0 And b = 0 And c = 0 Then
       MsgBox ("Tout est solution")
     
       ElseIf a = 0 And b = 0 And c <> 0 Then
            MsgBox ("Impossible de résoudre cette équation")
     
              ElseIf a <> 0 Then
                     delta = (b * b) - 4 * a * c
     
    End If
     
       If delta < 0 Then
           MsgBox ("Pas de solution")
     
           ElseIf delta = 0 Then
                  x = (-b) / (2 * a)
                  MsgBox ("Il existe une unique solution qui est " & x)
     
              Else: x1 = ((-b) - (delta ^ (1 / 2))) / (2 * a)
                     x2 = ((-b) + (delta ^ (1 / 2))) / (2 * a)
                     MsgBox ("Il existe deux solutions qui sont " & x1 & " et " & x2)
     
     
     
    End If
     
    End Sub


  2. #2
    Membre à l'essai
    Inscrit en
    Novembre 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 17
    Points : 20
    Points
    20
    Par défaut
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    Option Explicit
    Dim a As Integer
    Dim b As Integer
    Dim c As Integer
    Dim delta As Integer
    Dim x As Integer
    Dim x1 As Integer
    Dim x2 As Integer
    'Déclaration des variables
     
     
     
     
    Private Sub Command1_Click()
    'Algorithme qui résout une équation du second degré
     
    a = InputBox("A=", "**SAISIE**")
    b = InputBox("B=", "**SAISIE**")
    c = InputBox("C=", "**SAISIE**")
     
    If a = 0 And b = 0 And c = 0 Then
       MsgBox ("Tout est solution")
     
       ElseIf a = 0 And b = 0 And c <> 0 Then
            MsgBox ("Impossible de résoudre cette équation")
     
              ElseIf a <> 0 Then
                     delta = (b * b) - 4 * a * c
     
     
     
       If delta < 0 Then
           MsgBox ("Pas de solution")
     
           ElseIf delta = 0 Then
                  x = (-b) / (2 * a)
                  MsgBox ("Il existe une unique solution qui est " & x)
     
              Else: x1 = ((-b) - (delta ^ (1 / 2))) / (2 * a)
                     x2 = ((-b) + (delta ^ (1 / 2))) / (2 * a)
                     MsgBox ("Il existe deux solutions qui sont " & x1 & " et " & x2)
     
     
    End If
    End If
     
    End Sub
    Je crois juste qu'il fallait déplacer le End if qui était sous le calcul de delta et le mettre à la fin comme ci-dessus. Essaie le je crois qu'il marche très bien

  3. #3
    Membre expérimenté Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Points : 1 405
    Points
    1 405
    Par défaut
    N'oublie pas le cas (trivial) a = 0, et b et c sont non-nuls. Il fait planter la division par 2a...

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 47
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par Megaxel
    N'oublie pas le cas (trivial) a = 0, et b et c sont non-nuls. Il fait planter la division par 2a...
    Justement, c'est ce cas la qui me pause problème. Avec le changement de place du "end if", la division ne plante pas mais, lors de ce cas la, l'ago ne s'execute pas.

    ...

  5. #5
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Salut

    L'incovénient avec les InputBox, c'est qu'ils rendent la validation de saisie un peu tordue:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    a = 0
    Do While (a <= 0) or (a = "")   ' et pour éviter un champ vide
        ' le 3e paramètre est la valeur par défaut
        ' ça évite de saisir n'importe quoi...
        a = InputBox ("A = ",  "**SAISIE**", "1")
    Loop
    De plus, il serait bon de vérifier si a est vide (or (a = "")) ou si tu veux si l'utilisateur n'a rien saisi ou effacé la valeur par défaut... car en transformant un string vide en entier on obtient fatalement zéro.

    Si je peux me permettre, n'y vois rien de malicieux, c'est juste une remarque, donc, si je peux me permettre, je trouve que tes indentations ne rendent pas le code plus lisible... surtout avec les if et elseif... faut être prudent et adopter des habitudes... heu... standard, disons.

  6. #6
    Membre confirmé
    Homme Profil pro
    Ingénieur réseau et sécurité / Consultant
    Inscrit en
    Août 2005
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur réseau et sécurité / Consultant
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 1 068
    Points : 493
    Points
    493
    Par défaut
    attention aussi a sa : si a = 0 => error... car 2*a = 0 donc division par 0 = nombre complex...

    et il faudrais pas faire sqrt(Delta) encore ???

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 290
    Points : 374
    Points
    374
    Par défaut
    Bonjour,
    Un modèle d'équation
    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
     
    Private Sub Command1_Click()
    Dim a As Double
    Dim b As Double
    Dim c As Double
    Dim delta As Double
    Dim premiereRacine As Double
    Dim secondeRacine As Double
    a = 0
    While a = 0
        a = InputBox("Entrez une valeur pour a")
    Wend
    b = InputBox("Entrez une valeur pour b")
    c = InputBox("Entrez une valeur pour c")
    delta = b * b - 4 * a * c
    If delta < 0 Then
        MsgBox "Pas de racine réelle."
    Else
        If delta = 0 Then
           MsgBox "Une racine double : " & (0 - b) / (2 * a)
        Else
            premiereRacine = (-b - Sqr(delta)) / (2 * a)
            secondeRacine = (-b + Sqr(delta)) / (2 * a)
            MsgBox "Les racines sont " & premiereRacine & " et " & secondeRacine
        End If
    End If
     
    End Sub
    jpleroisse

  8. #8
    Membre chevronné
    Avatar de sovo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 389
    Points : 1 788
    Points
    1 788
    Par défaut
    Citation Envoyé par mauriiice
    écrire un algo sous visual basic qui résout n'importe quelle équation du second dégré
    Citation Envoyé par Megaxel
    N'oublie pas le cas (trivial) a = 0, et b et c sont non-nuls
    Citation Envoyé par mauriiice
    Justement, c'est ce cas la qui me pause problème
    vu le probleme qui a ete pose je croit que tu ne va pas resoudre tous les probleme car tu doit aussi pense au cas ou delta (le discriminant) est inferieure a 0 (les solutions sont des complexes).

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 47
    Points : 30
    Points
    30
    Par défaut
    Voila mon algo final:

    ALGO:



    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    Option Explicit 
    Dim a As Single
    Dim b As Single 
    Dim c As Single 
    Dim delta As Single 
    Dim x As Single 
    Dim x1 As Single  
    'Déclaration des variables 
     
     
     
     
    Private Sub Command1_Click() 
    'Algorithme qui résout une équation du second degré 
     
    a = InputBox("A=", "**SAISIE**") 
    b = InputBox("B=", "**SAISIE**") 
    c = InputBox("C=", "**SAISIE**") 
     
    If a = 0 And b = 0 And c = 0 Then 
       MsgBox ("Tout est solution") 
     
       ElseIf a = 0 And b = 0 And c <> 0 Then 
            MsgBox ("Impossible de résoudre cette équation") 
     
              ElseIf a=0 And b<>0 Then
                     x = (-c)/b
                     MsgBox("Il existe une unique solution qui est " & x)
     
                     ElseIf a <> 0 Then 
                             delta = (b * b) - 4 * a * c 
     
     
     
       If delta < 0 Then 
           MsgBox ("Pas de solution") 
     
           ElseIf delta = 0 Then 
                  x = (-b) / (2 * a) 
                  MsgBox ("Il existe une unique solution qui est " & x) 
     
              Else: x = ((-b) - (delta ^ (1 / 2))) / (2 * a) 
                     x1 = ((-b) + (delta ^ (1 / 2))) / (2 * a) 
                     MsgBox ("Il existe deux solutions qui sont " & x & " et " & x1) 
     
     
    End If 
    End If 
     
    End Sub

    Il résoud tout les cas sauf le cas où on obtient une équation du type Ax² + C = 0

    Je suis parti du principe que l'utilisateur rentrera obligatoirement un nombre quelconque, c'est à dire qu'aucune des saisies ne sera égales à "".

    a++ :-)

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 290
    Points : 374
    Points
    374
    Par défaut
    Bonjour, Le code que je t'ai passé fait exactement la même chose.

    jpleroisse

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 47
    Points : 30
    Points
    30
    Par défaut

    Dim a As Double


    premiereRacine = (-b - Sqr(delta)) / (2 * a)
    secondeRacine = (-b + Sqr(delta)) / (2 * a)
    Salut!

    Merci mais je suis obligé de me référer à ce que j'ai vu en cour.
    A quoi correspond l'élément "double" ? Est ce la déclaration d'un réel?

    Ensuite, quelle est la fonction exacte de "sqr", je suppose que ça calcule la formule dite plus haut.

    Ca me sera utile pour mes propres connaisances!

    ++

  12. #12
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Ça marche ?
    Et pourtant, là -> tu as un pb...

    MgsBox("Il existe une unique qui est " & x)

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 47
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par ouskel'n'or
    Ça marche ?
    Et pourtant, là -> tu as un pb...

    MgsBox("Il existe une unique qui est " & x)
    Si tu fais allusion à l'oubli du mot "solution", j'ai édité mon message

  14. #14
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Non, je faisais allusion à MgsBox qui me semblait être un anagramme très savant de Msgbox... mais c'était juste pour taquiner...

    A+

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 47
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par ouskel'n'or
    Non, je faisais allusion à MgsBox qui me semblait être un anagramme très savant de Msgbox... mais c'était juste pour taquiner...

    A+
    J'avais parfaitement compri que tu cherchais à taquiner grace au smiley à la fin de ton message

    Cette fois, j'ai édité la bonne chose

    ++

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 290
    Points : 374
    Points
    374
    Par défaut
    Bonsoir, mauriiice

    Double = la valeur la plus élevée d'un type de données Double est 1,79769313486232D+308, soit environ 1,8 multiplié par 10 à la puissance 308. Quand D sépare la mantisse de l'exposant dans un littéral numérique, la valeur est traitée comme une valeur de type Double.

    La Function Sqr, Renvoie une valeur de type Double indiquant la racine carrée d'un nombre.

    jpleroisse

Discussions similaires

  1. Réponses: 6
    Dernier message: 21/01/2015, 21h30
  2. Résoudre une équation du second degré
    Par Emmanuel Delahaye dans le forum Télécharger
    Réponses: 3
    Dernier message: 04/12/2011, 02h59
  3. Résoudre une équation du 3ème degré
    Par princesse_nadou dans le forum MATLAB
    Réponses: 4
    Dernier message: 21/04/2010, 21h27
  4. Réponses: 5
    Dernier message: 22/01/2008, 21h58
  5. Réponses: 6
    Dernier message: 17/11/2007, 13h17

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