Сложение и вычитание обыкновенных дробей - VB
Формулировка задачи:
Необходимо составить
программу обучения сложению и вычитанию обыкновенных дробей
. Числители и знаменатели дробей записывать вотдельные
TextBox. В этой же программе необходимо найти НОД и НОК полученноой при ответе дроби.Решение задачи: «Сложение и вычитание обыкновенных дробей»
textual
Листинг программы
Option Explicit
' Класс Rational
'Определяет новый тип данных - рациональные числа и основные
'операции над ними - сложение, вычитание, умножение и деление.
'Рациональное число задается парой целых чисел (m,n) и изображается,
'обычно, в виде дроби m/n. Число m называется числителем, а
'n - знаменателем. Для каждого рационального числа существует
'множество его представлений, например, - 1/2, 2/4, 3/6, 4/8, …
'задают одно и тоже рациональное число. Среди всех представителей
'можно выделить то, в котором числитель и знаменатель несократимы.
'Именно такие представители будут храниться в нашем классе.
'Операции над рациональными числами определяются естественным
'образом.Лучшим их описанием будут соответствующие им методы.
'Свойства класса Rational
Private m As Integer 'числитель
Private n As Integer 'знаменатель
'Конструкторы класса Rational
Private Sub Class_Initialize()
'Конструктор по умолчанию
'инициализирует рациональное число дробью 1/1
m = 1
n = 1
End Sub
Public Sub CreateRational(ByVal a As Integer, ByVal b As Integer) ' собственный конструктор
'Собственный конструктор
'Выполняет довольно сложные действия,
'прежде чем свойства получат значения
Dim d As Integer 'Наибольший общий делитель a и b
If b = 0 Then
MsgBox " Ошибка при создании рационального числа!" _
& Chr(13) & "Знаменатель не должен равняться 0."
Else
' приведение знака
If b < 0 Then
b = -b: a = -a
End If
' приведение к несократимой дроби
d = nod(a, b) ' d - НОД(a,b)
m = a \ d
n = b \ d
End If
End Sub
' Скрытая функция вычисления НОД(m,n)
Private Function nod(ByVal m As Integer, ByVal n As Integer) As Integer
Dim p As Integer
m = Abs(m): n = Abs(n)
If n > m Then
p = m: m = n: n = p
End If
Do
p = m Mod n: m = n: n = p
Loop Until n = 0
nod = m
End Function
Public Function Plus(a As Rational) As Rational
Dim d As Integer, u As Integer, v As Integer
Dim R As New Rational
u = m * a.Знаменатель + n * a.Числитель
v = n * a.Знаменатель
d = nod(u, v)
R.Числитель = u \ d
R.Знаменатель = v \ d
Set Plus = R
End Function
Public Function Minus(a As Rational) As Rational
Dim d As Integer, u As Integer, v As Integer
Dim R As New Rational
u = m * a.Знаменатель - n * a.Числитель
v = n * a.Знаменатель
d = nod(u, v)
R.Числитель = u \ d
R.Знаменатель = v \ d
Set Minus = R
End Function
Public Function Mult(a As Rational) As Rational
Dim d As Integer, u As Integer, v As Integer
Dim R As New Rational
u = m * a.Числитель
v = n * a.Знаменатель
d = nod(u, v)
R.Числитель = u \ d
R.Знаменатель = v \ d
Set Mult = R
End Function
Public Function Divide(a As Rational) As Rational
Dim d As Integer, u As Integer, v As Integer
Dim R As New Rational
u = m * a.Знаменатель
v = n * a.Числитель
If v = 0 Then
MsgBox ("деление на нуль невозможно")
Else
d = nod(u, v)
R.Числитель = u \ d
R.Знаменатель = v \ d
Set Divide = R
End If
End Function
Public Sub PrintRational()
Debug.Print (m & "/" & n)
End Sub
Public Property Get Числитель() As Integer
Числитель = m
End Property
Public Property Get Знаменатель() As Integer
Знаменатель = n
End Property
Public Property Let Числитель(ByVal NewValue As Integer)
CreateRational NewValue, n
End Property
Public Property Let Знаменатель(ByVal NewValue As Integer)
CreateRational m, NewValue
End Property