Вход в систему
РФЭИ/ИТ
Арифметические операции Практика: обыкновенные дроби Язык программирования Scala
Неправильные дроби Сравнение

Арифметические операции

Арифметические операции +, -, * и / выполняются по правилам алгебры и возвращают результат в виде несократимой дроби.

Унарные операции

Для удобства добавим унарные методы, позволяющие изменить знак дроби:

def unary_+ = new Fraction(numerator, denominator)

def unary_- = new Fraction(-numerator, denominator)

Сложение

Сложение дробей производится по формуле:

$$\frac{a}{b} + \frac{c}{d} = \frac{a \cdot d + c \cdot b}{b \cdot d}$$

Добавим метод +, выполняющий сложение дробей:

def +(that: Fraction) =
  new Fraction(
    this.numerator * that.denominator +
        this.denominator * that.numerator,
    this.denominator * that.denominator)
      .reduced

Обратите внимание на использование ключевого слова this.

Вычитание

Для реализации метода - воспользуемся методом сложения в сочетании с унарным методом -:

def -(that: Fraction) = this + (-that)

Умножение

Умножение дробей производится по следующей формуле:

$$\frac{a}{b} \cdot \frac{c}{d} = \frac{a \cdot c}{b \cdot d}$$

Добавим метод *:

def *(that: Fraction) =
  new Fraction(
    this.numerator * that.numerator,
    this.denominator * that.denominator)
      .reduced

Деление

Для реализации операции деления воспользуемся уже имеющимся умножением на обратную дробь (inversed):

def /(that: Fraction) = this * that.inversed

Проверка

val f1 = new Fraction(8,-6)
f1: Fraction = -8/6
val f2 = new Fraction(-1,6)
f2: sandbox.Fraction = -1/6
f1 + f2
res4: sandbox.Fraction = -3/2
f1 - f2
res5: sandbox.Fraction = -7/6
f1 * f2
res6: sandbox.Fraction = 2/9
f1 / f2
res7: sandbox.Fraction = 8
Неправильные дроби Сравнение
2012 © ООО «Территория Образования»
Сделано с помощью Circumflex