Неправильные дроби
У неправильной дроби модуль числителя больше или равен модулю знаменателя.
Добавим метод isImproper
:
def isImproper = math.abs(numerator) >= math.abs(denominator)
Класс должен поддерживать вычисление целой части и остатка неправильной дроби.
Добавим метод integer
, возвращающий целую часть дроби (результат целочисленного деления числителя на знаменатель):
def integer: Int = numerator / denominator
Также добавим метод remainder
, возвращающий остаток от деления в виде дроби:
def remainder: Fraction = new Fraction(numerator % denominator, denominator)
Представление неправильной дроби: алгебраическая запись в виде суммы или разности целой части и остатка.
Добавим метод toImproperString
, который реализует этот пункт спецификации:
def toImproperString =
if (!isImproper) toString
else {
var result = ""
val i = integer
val r = remainder
result += i
if (r.numerator != 0) {
if (i > 0)
result += " + "
else result += " - "
result += r.abs.toString
}
result
}
Изучите принцип его действия самостоятельно. Попробуйте упростить его.
Проверка
val f1 = new Fraction(8,-6)
f1: Fraction = -8/6
f1.isImproper
res0: Boolean = true
f1.integer
res0: Int = -1
f1.remainder
res0: sandbox.Fraction = -2/6
f1.toImproperString
res0: String = -1 - 2/6