CFraction Example

‘

‘Form code, One Button

‘

Option Explicit

 

Private Sub cmdTest_Click()

 

    Dim f1 As CFraction

    Dim f2 As CFraction

   

    Set f1 = New CFraction

    Set f2 = New CFraction

   

    f1.numerator = 2

    f1.denominator = 5

   

    f2.numerator = 3

    f2.denominator = 8

   

    'MsgBox f1.ToString()

   

    f1.numerator = 5

    f1.denominator = 6

   

    MsgBox f1.ToString()

   

    Dim reducedFraction As CFraction

   

    Set reducedFraction = f1.reduced

   

    'MsgBox reducedFraction.ToString

   

    Dim result As CFraction

   

    Set result = f1.mult(f2)

   

    MsgBox result.ToString

    MsgBox result.reduced.ToString

End Sub

 

‘

‘====================================

‘

Option Explicit

 

'

'   CFraction

'

 

Private mNumerator As Integer

Private mDenominator As Integer

 

Private numeratorSet As Boolean

Private denominatorSet As Boolean

 

Private Sub Class_Initialize()

    mDenominator = 1

    mNumerator = 0

    numeratorSet = False

    denominatorSet = False

End Sub

 

Public Function mult(ByVal otherFraction As CFraction) As CFraction

    Set mult = New CFraction

    mult.numerator = Me.numerator * otherFraction.numerator

    mult.denominator = Me.denominator * otherFraction.denominator

End Function

 

Public Property Get numerator() As Integer

    numerator = mNumerator

End Property

 

Public Property Let numerator(ByVal newValue As Integer)

    If Not numeratorSet Then

        numeratorSet = True

        mNumerator = newValue

    End If

End Property

 

Public Property Get denominator() As Integer

    denominator = mDenominator

End Property

 

Public Property Let denominator(ByVal newValue As Integer)

    If Not denominatorSet Then

        If newValue <> 0 Then

            denominatorSet = True

            mDenominator = newValue

        End If

    End If

End Property

 

Public Function ToString() As String

    ToString = CStr(mNumerator) & "/" & CStr(mDenominator)

End Function

 

Private Function gcd() As Integer

    Dim tempN As Integer

    Dim tempD As Integer

    Dim temp As Integer

   

    tempN = Me.numerator

    tempD = Me.denominator

   

    Do While Not (tempD = 0)

        temp = tempN Mod tempD

        tempN = tempD

        tempD = temp

    Loop

   

    gcd = tempN

End Function

 

Public Function reduced() As CFraction

    Dim temp As CFraction

    Set temp = New CFraction

   

    'reduce stuff

    Dim divisor As Integer

    divisor = gcd()

   

    temp.numerator = Me.numerator \ divisor

    temp.denominator = Me.denominator \ divisor

   

    'Set temp = Me 'hidden error

   

    Set reduced = temp

End Function