Блок задач

3. Структуры данных

Темы
Сложность 5

Задача «Рациональные числа»

Пусть рациональное число представлено в виде

class Rational:
    pass

Реализовать арифметику:

def add(a, b):
    ...

def sub(a, b):
    ...

def mul(a, b):
    ...

def div(a, b):
    ...

# Возведение в целочисленную степень. power может быть отрицательным!
def power(r, power):
    ...

После арифметических операций результат должен приводиться к каноническому виду (числитель и знаменатель сокращаются, т.е. делятся на их наибольший общий делитель, см. задачу «Наибольший общий делитель»).

Для реализации power можно использовать быстрое возведение в степень (см. задачу «Целая степень»).

Конструирование:

def create(numer, denom):
    ...

Сравнение:

# Возвращает -1 (a < b), 0 (a == b), 1 (a > b)
def compare(a, b):
    ...

Преобразование:

def to_int(r):
    ...

def to_float(r):
    ...

Вывод через строку:

def to_str(r):
    ...

Использование класса:

import rational as r

a = r.create(3, 2) # 3/2
b = r.create(1, 2) # 1/2
c = r.add(a, b) # 2

Примечание. Создать файлы:

  • rational.py, в котором будет содержаться класс Rational и все фукнции.
  • test_rational.py, который будет содержать тесты функций, импортированных из модуля rational.