Сложение и вычитание обыкновенных дробей - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д