Convertir un nombre décimal en fraction

Soyez le premier à donner votre avis sur cette source.

Vue 8 068 fois - Téléchargée 463 fois

Description

Voici mon premier programme. Ce dernier est basé sur un algorithme que j'ai trouvé et modifier. Il prend en charge les nombres infinis comme par exemple 1,3333333333.

Source / Exemple :


Public Class Form1

    'On remplace le point du clavier numérique par une virgule
    Private Sub Text1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Text1.KeyPress
        If e.KeyChar = "."c Then e.KeyChar = ","c
    End Sub

    'On vérifie que l'utilisateur a rentrer un nombre
    Function Verification() As Boolean
        Dim Bon As Boolean = True

        If Me.Text1.Text Is Nothing Or Not IsNumeric(Me.Text1.Text) Then
            Bon = False
        End If
        Return Bon
    End Function

    Private Sub Text1_TextChanged(ByVal sender As System.Object, ByVal i As System.EventArgs) Handles Text1.TextChanged
        If Verification() Then
            Dim a As String
            Dim b As String
            Dim c As String
            Dim d As String
            Dim e As String
            Dim f As String
            Dim g As String
            Dim h As String

            Me.Text1.BackColor = Color.GreenYellow 'Si la saisie est correcte le fond est vert claire

            f = Text1.Text : b = 1 : c = 1 : d = 0 : g = f : e = Int(g) : a = e

            If f = 0 Then Text2.Text = f : Exit Sub

            If Math.Abs(f - a / b) < 10 ^ -7 And b = 1 Then Text2.Text = a : Exit Sub

            Do
                If Math.Abs(f - a / b) < 10 ^ -6 Then Text2.Text = a & " / " & b : Exit Sub 'Ici on met une condition pour les nombres infinis, par exemple 1,3333333333
                g = 1 / (g - e) : e = Int(g) : h = a * e + c : c = a : a = h
                h = b * e + d : d = b : b = h
            Loop
        Else
            Me.Text1.BackColor = Color.Red 'Si la saisie est incorrecte le fond est rouge
        End If
    End Sub

    'Si l'utilisateur clique sur l'image, cela ferme le programme
    Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click
        End
    End Sub

    'Quand l'utilisateur passe la souris sur l'image une infobulle apparait.
    Private Sub PictureBox1_MouseHover(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.MouseHover
        Me.ToolTip1.SetToolTip(Me.PictureBox1, "Fermer")
    End Sub
End Class

Conclusion :


Je suis ouvert à toute critique

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
6
Date d'inscription
mercredi 6 août 2008
Statut
Membre
Dernière intervention
26 avril 2012

Bravo, l'appli a trouvé 355/113 pour PI

J'ai remplacé la variable e par ee car l’évènement Text1_TextChanged possède un paramètre e As System.EventArgs

Pourquoi ne pas proposer à l'utilisateur le nombre de chiffres significatif (à priori 7)
Messages postés
14725
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
22 septembre 2020
144
Bonsoir,

Pour faire encore mieux, à la place de IsNumeric qui est une fonction héritée de VB6, tu peux aussi utiliser : Double.TryParse(...) c'est plus .NET :)

@ghuysmans99, certes, j'ai fais un raccourcis rapide. Sur mes machines (Perso et bureau), j'ai mis le . comme séparateur à la place de la ,
Messages postés
133
Date d'inscription
dimanche 23 juin 2002
Statut
Membre
Dernière intervention
3 janvier 2015
3
hello,
Et bien quel effort par rapport à cette source ci
http://www.vbfrance.com/codes/FONCTION-MATHEMATIQUE-DECIMAL-FRACTION-IRREDUCTIBLE_22638.aspx
Pas mal continu
Salutation
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
27
Pour connaitre si on utiise le point ou la virgule
il faut se baser sur la Culture currente du thread current.

http://msdn.microsoft.com/en-us/library/system.globalization.numberformatinfo.numberdecimalseparator.aspx
Messages postés
47
Date d'inscription
dimanche 11 mai 2008
Statut
Membre
Dernière intervention
23 avril 2020

Merci pour les infos. Je n'y avais pas penser pour le remplacement du point. Vous me conseillez de mettre quoi à la place
Afficher les 7 commentaires

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.