Clsfraction, une classe vb.net gérant les fractions.

0/5 (1 avis)

Vue 5 251 fois - Téléchargée 244 fois

Description

Ce programme n'aurait pas vu le jour sans un demande de programme par MP. Je le poste ici car je le juge utile pour comprendre l'utilité de la surcharge d'opérateurs en VB.NET et l'utilisation des exceptions. Il n'utilise aucune fonction de VB6 et est par conséquent en "pur" dotnet.

Source / Exemple :


Option Explicit On

Public Class clsFraction
    Protected V_Numerator As Integer
    Protected V_Denominator As Integer

    Public Property Numerator() As Integer
        Get
            Return V_Numerator
        End Get
        Set(ByVal value As Integer)
            V_Numerator = value
        End Set
    End Property

    Public Property Denominator() As Integer
        Get
            Return V_Denominator
        End Get
        Set(ByVal value As Integer)
            If value = 0 Then Throw New Exception("Le dénominateur d'une fraction ne peut pas être nul !")
            V_Denominator = value
        End Set
    End Property

    Protected Function GCD(ByVal a As Integer, ByVal b As Integer) As Integer
        If a = 0 Then Return b
        While b <> 0
            If a > b Then
                a = a - b
            Else
                b = b - a
            End If
        End While
        Return a
    End Function

    Public Sub Reduce()
        Dim p As Integer
        p = GCD(V_Numerator, V_Denominator)
        V_Numerator \= p
        V_Denominator \= p
    End Sub

    Public Sub New(Optional ByVal num As Integer = 0, Optional ByVal den As Integer = 1)
        Numerator = num
        Denominator = den
        Reduce()
    End Sub

    Public Overrides Function ToString() As String
        Return (V_Numerator.ToString() & "/" & V_Denominator.ToString())
    End Function

    Public Shared Operator +(ByVal F1 As clsFraction, ByVal F2 As clsFraction) As clsFraction
        Return New clsFraction(F1.Numerator * F2.Denominator + F2.Numerator * F1.Denominator, F1.Denominator * F2.Denominator)
    End Operator
    Public Shared Operator -(ByVal F1 As clsFraction, ByVal F2 As clsFraction) As clsFraction
        Return New clsFraction(F1.Numerator * F2.Denominator - F2.Numerator * F1.Denominator, F1.Denominator * F2.Denominator)
    End Operator
    Public Shared Operator *(ByVal F1 As clsFraction, ByVal F2 As clsFraction) As clsFraction
        Return New clsFraction(F1.Numerator * F2.Numerator, F1.Denominator * F2.Denominator)
    End Operator
    Public Shared Operator /(ByVal F1 As clsFraction, ByVal F2 As clsFraction) As clsFraction
        Return New clsFraction(F1.Numerator * F2.Denominator, F1.Denominator * F2.Numerator)
    End Operator
End Class

Codes Sources

A voir également

Ajouter un commentaire

Commentaire

kbalist
Messages postés
36
Date d'inscription
jeudi 28 janvier 2010
Statut
Membre
Dernière intervention
6 février 2011
-
Interessant, juste une remarque : pour réduire une fraction il serait plus rapide de calculer le PGCD des 2 termes (ce qui donnera directement le nombre par lequel on peut simplifier), surtout si ce sont des grands nombres.

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.