Prouver un Triangle Rectangle [Résolu]

CDEProgrammeur 23 Messages postés jeudi 7 octobre 2010Date d'inscription 20 juillet 2012 Dernière intervention - 7 oct. 2010 à 03:46 - Dernière réponse : CDEProgrammeur 23 Messages postés jeudi 7 octobre 2010Date d'inscription 20 juillet 2012 Dernière intervention
- 9 oct. 2010 à 06:59
Bonjour tout le monde je suis nouveau ici. Je suis étudiant comme programmeur-analyste depuis déjà un mois. J'ai un petit travail à faire sur les triangle. Je dois demander a l'usager du programme de rentrer 3 longeurs différentes dans 3 textbox. Je dois ensuite dire a l'usager si le triangle est Scalène, Équilateral, Isocèle, Rectangle ou Isocèle Rectangle. Je commencer ma parti pour le triangle rectangle et j'aimerais savoir si mon algorithm est bon pour prouver ce type de triangle.

        Dim longeur1 As Integer
        Dim longeur2 As Integer
        Dim longeur3 As Integer
        Dim rectangle1 As Integer
        Dim rectangle2 As Integer
        Dim grand As Integer
        Dim petit1 As Integer
        Dim petit2 As Integer

        longeur1 = CInt(txt1erCoté.Text)
        longeur2 = CInt(txt2ieCoté.Text)
        longeur3 = CInt(txt3ieCoté.Text)



        If longeur1 > longeur2 And longeur1 > longeur3 Then
            grand = longeur1
            petit1 = longeur2
            petit2 = longeur3
        ElseIf longeur2 > longeur3 And longeur2 > longeur1 Then
            grand = longeur2
            petit1 = longeur3
            petit2 = longeur1
        Else

            grand = longeur3
            petit1 = longeur2
            petit2 = longeur1

        End If

        rectangle1 = grand * grand
        rectangle2 = (petit1 * petit1) + (petit2 * petit2)

        If rectangle1 = rectangle2 Then
            MessageBox.Show("Triangle Rectangle")
        End If


Je l'ai tester et ça marche proprement mais j'aimerais avoir votre opinion. Suis-je correcte?
Afficher la suite 

Votre réponse

16 réponses

Meilleure réponse
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 7 oct. 2010 à 06:54
3
Merci
trop fort...
dans l'enonce, on entend parler de triangle "Scalène"...(irregulier)
et dans le code, c'est grand, petit1 et petit2...
pas d'emploi du mot "hypotenuse" ^^

bref.

le code est correct, meme si inelegant.

j'aime pas le manque de controle, iic:
CInt(txt1erCoté.Text)



Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp

Merci Renfield 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de Renfield
Meilleure réponse
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 8 oct. 2010 à 06:25
3
Merci
Int.TryParse ferait l'affaire.

Concernant le e.Cancel, j'ai ete trop vite en besogne...
ca interdit pas de regarder la doc:
KeyEventArgs

on y voit e.SuppressKeyPress

Perso, je suis assez pour laisser la saisie libre, et la valider ensuite...

en effet, on a toujours des cas ou on arrive a entrer des valeurs interdites, ou des cas non geres...

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp

Merci Renfield 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de Renfield
CDEProgrammeur 23 Messages postés jeudi 7 octobre 2010Date d'inscription 20 juillet 2012 Dernière intervention - 7 oct. 2010 à 06:59
0
Merci
Tu veu dire quoi par "manque de controle"?
Commenter la réponse de CDEProgrammeur
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 7 oct. 2010 à 08:53
0
Merci
si je saisi par exemple :

"erreur"

dans une des zones de saisie, un exception non gérée sera levée...

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Commenter la réponse de Renfield
pile_poil 682 Messages postés vendredi 6 avril 2007Date d'inscription 4 août 2012 Dernière intervention - 7 oct. 2010 à 09:04
0
Merci
bonjour
essaie de rentrer "toto" en guise de valeur pour une des textbox et tu verras ce que le "manque de contrôle" veut dire

si c'est la solution, penser : REPONSE ACCEPTEE
Commenter la réponse de pile_poil
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 7 oct. 2010 à 19:10
0
Merci
Bonsoir
voila une autre version
a b c sont des textboxes
labelresult un label
il faut tester
 Public Class Formtriangle

    Private Sub a_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles a.Click
        If Trim(a.Text).Length > 0 And Trim(b.Text).Length > 0 And Trim(c.Text).Length > 0 Then
            Button1.Enabled = True
        End If
    End Sub

    Private Sub a_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles a.KeyPress
        If a.Text.IndexOf(".") > 0 And e.KeyChar = "." Then
            a.ReadOnly = True
            Exit Sub
        End If
        If Char.IsDigit(e.KeyChar) Or e.KeyChar "." Or Asc(e.KeyChar) 8 Then
            a.ReadOnly = False
        Else
            a.ReadOnly = True
        End If
    End Sub

    Private Sub a_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles a.TextChanged

        If Trim(a.Text).Length > 0 And Trim(b.Text).Length > 0 And Trim(c.Text).Length > 0 Then
            Button1.Enabled = True
        End If
    End Sub

    Private Sub b_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles b.Click
        If Trim(a.Text).Length > 0 And Trim(b.Text).Length > 0 And Trim(c.Text).Length > 0 Then
            Button1.Enabled = True
        End If
    End Sub

    Private Sub b_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles b.KeyPress
        If b.Text.IndexOf(".") > 0 And e.KeyChar = "." Then
            b.ReadOnly = True
            Exit Sub
        End If
        If Char.IsDigit(e.KeyChar) Or e.KeyChar "." Or Asc(e.KeyChar) 8 Then
            b.ReadOnly = False
        Else
            b.ReadOnly = True
        End If
    End Sub

    Private Sub c_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles c.Click
        If Trim(a.Text).Length > 0 And Trim(b.Text).Length > 0 And Trim(c.Text).Length > 0 Then
            Button1.Enabled = True
        End If
    End Sub

    Private Sub c_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles c.KeyPress
        If c.Text.IndexOf(".") > 0 And e.KeyChar = "." Then
            c.ReadOnly = True
            Exit Sub
        End If
        If Char.IsDigit(e.KeyChar) Or e.KeyChar "." Or Asc(e.KeyChar) 8 Then
            c.ReadOnly = False
        Else
            c.ReadOnly = True
        End If
    End Sub

    Private Function Checktriangle() As String
        Dim side1 As Double
        Dim side2 As Double
        Dim side3 As Double
        Dim result As String
        Dim isisocele As Boolean
        Dim istriangle As Boolean
        Dim isrectangle As Boolean
        Dim isequilateral As Boolean
        side1 = CDbl(a.Text)
        side2 = CDbl(b.Text)
        side3 = CDbl(c.Text)
        result = ""
        istriangle = False
        If (side1 + side2) > side3 And (side1 + side3) > side2 And (side2 + side3) > side1 And side1 > 0 And side2 > 0 And side3 > 0 Then
            istriangle = True
        End If
        isequilateral = False
        If (side1 side2) And (side1 side3) And (side2 = side3) Then
            isequilateral = True
        End If
        isisocele = False
        isrectangle = False
        If side1 side2 Or side1 side3 Or side2 = side3 Then
            isisocele = True
        End If
        If (side1 ^ 2 + side2 ^ 2 side3 ^ 2) Or (side1 ^ 2 + side3 ^ 2 side2 ^ 2) Or (side2 ^ 2 + side3 ^ 2 = side1 ^ 2) Then
            isrectangle = True
        End If
        If istriangle = False Then
            result = "ne peut pas etre un triangle"
        End If
        If isisocele And isrectangle And istriangle Then
            result = "triange isocele rectangle"
        End If
        If isisocele And Not isrectangle And istriangle Then
            result = "triange isocele"
        End If
        If isrectangle And Not isisocele Then
            result = "triangle rectangle"
        End If
        If isequilateral And istriangle Then
            result = "triangle equilateral"
        End If
        If istriangle And Not isisocele And Not isrectangle And Not isequilateral Then
            result = "triangle Scalène"
        End If
        Return result
    End Function

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        labelresult.Text = ""
        labelresult.Text = Checktriangle()
    End Sub

    Private Sub c_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles c.TextChanged
        If Trim(a.Text).Length > 0 And Trim(b.Text).Length > 0 And Trim(c.Text).Length > 0 Then
            Button1.Enabled = True
        End If
    End Sub

    Private Sub b_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles b.TextChanged
        If Trim(a.Text).Length > 0 And Trim(b.Text).Length > 0 And Trim(c.Text).Length > 0 Then
            Button1.Enabled = True
        End If
    End Sub

    Private Sub Formtriangle_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Button1.Enabled = False
        labelresult.Text = ""
    End Sub
End Class



bonne programmation
Commenter la réponse de cs_ShayW
CDEProgrammeur 23 Messages postés jeudi 7 octobre 2010Date d'inscription 20 juillet 2012 Dernière intervention - 7 oct. 2010 à 19:21
0
Merci
Merci pour vos exemple mais le seul problème ici c'est que je n'ai pas le droit d'utiliser n'importe quel fonction vb.net pour faire ce travail. J'ai un problème maintenant et c'est de valider si tout les textbox contienne vraiment des chiffres. J'au le droit d'utiliser IsNumeric() et aussi les ASCII et dire au programme de regarder si les lettre dans les textbox son par exemple plus grand que 97 et 122 (A - Z). Mais, si j'ai envie de le faire avec IsNumeric() comment est-ce que je peut le faire proprement car comme certaine personne l'on mentionné plus haut j'ai un certain manque de controle. J'ai toujour un cast error si il rentre du text (Impossible de convertir string en integer). Je dois finir toute sa pour demain au plus tard.

Merci pour votre aide!
Commenter la réponse de CDEProgrammeur
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 7 oct. 2010 à 19:48
0
Merci
quelles fonctions tu n'as pas le droit ?
avec le code que j'ai envoyé tu peux introduire
seulement des chiffres ou un . pour le decimal
mais pas de lettre
Commenter la réponse de cs_ShayW
CDEProgrammeur 23 Messages postés jeudi 7 octobre 2010Date d'inscription 20 juillet 2012 Dernière intervention - 7 oct. 2010 à 19:52
0
Merci
Les fonctions suivante: "trim" et "e.keyChar"
Commenter la réponse de CDEProgrammeur
Sehnsucht 107 Messages postés samedi 25 novembre 2000Date d'inscription 4 mai 2013 Dernière intervention - 7 oct. 2010 à 20:58
0
Merci
Bonsoir,

Juste une information purement mathématique, tu n'as quasiment pas besoin d'essayer de vérifier si un triangle peut être isocèle rectangle car un triangle isocèle rectangle a la particularité d'avoir son côté de l'hypoténuse qui vaut a * sqrt(2) (avec a la longueur du côté isocèle).
Or programmatiquement parlant tu ne pourras jamais vérifier ceci en te servant de la longueur des côtés, un exemple simple si tu veux t'en convaincre est de vérifier que les lignes suivantes te renverront toujours False.
Dim test As Boolean Math.Sqrt(2) * Math.Sqrt(2) 1 * 1 + 1 * 1
Dim test2 As Boolean Math.Pow(Math.Sqrt(2), 2) 1 * 1 + 1 * 1

Le seul moyen, à la limite d'y arriver, serait de demander en saisie, non pas les côtés du triangle (dans mon exemple la saisie était donc 1 ; 1 et 1.4142135623730951 (sqrt(2))) mais directement leurs carrés (soit 1 ; 1 et 2)

Sur un autre plan, quand je lis d'une part
je n'ai pas le droit d'utiliser n'importe quel fonction vb.net pour faire ce travail
et d'un autre que tu dois utiliser IsNumeric je ne peux m'empêcher de rigoler, car IsNumeric n'est pas une fonction VB.Net ; c'est une fonction VB6 mise dans VB.Net uniquement pour assurer la compatibilité des programmes migrant du premier au second langage et par conséquent devrait être proscrite de toute utilisation pour un projet/exercice directement développé en VB.Net ; m'enfin c'est pas toi qui choisi, mais ça en dit long sur le prof...

C'est là que je suis bien content de pouvoir programmer comme je l'entends plutôt que de faire un pavé de code pour pas grand chose ^^


Cordialement !
Commenter la réponse de Sehnsucht
CDEProgrammeur 23 Messages postés jeudi 7 octobre 2010Date d'inscription 20 juillet 2012 Dernière intervention - 7 oct. 2010 à 21:06
0
Merci
Oui je crois que je m'avais tromper a propros du triangle rectangle-isocèle. Je parlais plutot d'un triangle rectangle-scalène ce qui est beaucoup plus logique a prouver. C'est qui est de la fonction et bien je ne savais pas vraiment que IsNumeric était une fonction de vb6. Je n'ai jamais fait de vb6 dans le passé mais on utilise IsNumeric car on vien tout juste de commencer vb.net, c'était notre 11ième cours de vb.net avant hier. Mon prof(qui est une femme) est très bonne et qualifié pour ce qu'elle fait, surement un des meilleurs prof que j'ai eu et de plus mon college est privé donc les prof connaisse très bien leur matière. J'imagine que les vrai fonction vont venir au fil du temps cette année.

Mais, merci pour ton aide.C'est très apprécié!
Commenter la réponse de CDEProgrammeur
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 7 oct. 2010 à 22:43
0
Merci
a.ReadOnly = True
Exit Sub


e.Cancel est la pour ca...

a b et c peuvent partager les meme gestionnaires d'evenements (voir mot cle Handles)

enfinm le presse papier est encore la, une belle faille.
je met un texte arbitraire dans le presse papier, je le colle dans a, b ou c
je lance le test et boum...


Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Commenter la réponse de Renfield
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 8 oct. 2010 à 02:16
0
Merci
Ah oui c'est vrai
j'ai écrit ça à la place

j'ai écrit e.cancel j'ai une erreur
e.cancel is not member of System.Windows.Forms.KeyEventArgs
 Private Sub a_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles a.KeyUp, b.KeyUp, c.KeyUp
        If sender.Text.IndexOf(".") > 0 And e.KeyValue = 52 Then

            sender.readonly = True
            Exit Sub
        End If
        If e.KeyValue 52 Or (e.KeyValue) 8 Or (e.KeyValue >= 48 And e.KeyValue <= 57) Then
            sender.ReadOnly = False
        Else
            sender.ReadOnly = True
        End If
        If IsNumeric(a.Text) And IsNumeric(b.Text) And IsNumeric(c.Text) Then
            Button1.Enabled = True
        Else
            Button1.Enabled = False
        End If
    End Sub
Commenter la réponse de cs_ShayW
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 8 oct. 2010 à 02:19
0
Merci
une erreur
 Private Sub a_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles a.KeyUp, b.KeyUp, c.KeyUp
        If sender.Text.IndexOf(".") > 0 And e.KeyValue = 190 Then
            sender.readonly = True
            Exit Sub
        End If
        If e.KeyValue 52 Or (e.KeyValue) 8 Or (e.KeyValue = 190) Or (e.KeyValue >= 48 And e.KeyValue <= 57) Then
            sender.ReadOnly = False
        Else
            sender.ReadOnly = True
        End If
        If IsNumeric(a.Text) And IsNumeric(b.Text) And IsNumeric(c.Text) Then
            Button1.Enabled = True
        Else
            Button1.Enabled = False
        End If
    End Sub
Commenter la réponse de cs_ShayW
Sehnsucht 107 Messages postés samedi 25 novembre 2000Date d'inscription 4 mai 2013 Dernière intervention - 8 oct. 2010 à 04:11
0
Merci
Enfin ça fait pas mal d'incohérences tout ça, tu as le droit d'utiliser les codes ascii des caractères pour vérifier leur validité mais pas le droit de se servir de KeyChar. D'un autre côté il existe le contrôle NumericUpDown qui permet de simplifier la saisie de nombres, cependant le but est peut-être de voir comment valider une saisie mais dans ce cas pourquoi faire utiliser IsNumeric qui n'est clairement pas le mieux adapté en terme d'apprentissage de bonnes pratiques VB.Net...
Commenter la réponse de Sehnsucht
CDEProgrammeur 23 Messages postés jeudi 7 octobre 2010Date d'inscription 20 juillet 2012 Dernière intervention - 9 oct. 2010 à 06:59
0
Merci
@Renfield

Oui aujourd'hui j'ai essayer cette fonction après me l'avoir fait rappeler par mon professeur! Tout est parfait maintenant et mon programme est fini et tout fonction propement. Je ne suis pas sur mon ordi personelle en ce moment mais je vais vous faire part de mon code source! Peut-être que ca pourra aider des débutants comme moi dans le future!

Merci pour votre aide tout le monde!
Commenter la réponse de CDEProgrammeur

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.