Создайте класс Point
, определите для него конструктор,
метод __str__
, необходимые арифметические операции.
У класса Point
два поля: x
и y
.
Программа получает на вход число N, далее координаты N точек. Выведите координаты точки, наиболее удаленной от начала координат.
Реализация класса должна содержать конструктор,
метод __str__
для вывода точки,
метод dist
, который возвращает расстояние от начала координат до точки.
Ввод | Вывод |
---|---|
2 |
2 3 |
Выведите координаты центра масс данного множества точек (учтите, что это —два действительных числа).
Для создания точки определите конструктор, который мог бы
принимать на вход как два числа, так и строку. Таким образом,
точку можно будет создавать как вызовом Point(x, y)
,
так и Point(input())
.
Определите операции сложения точек, умножения точки на число, деления точки на число.
Ввод | Вывод |
---|---|
2 |
1.5 2.5 |
Выведите диаметр данного множества – максимальное расстояние между двумя данными точками.
Для этого удобно определить операцию разности двух точек, возвращающую разность двух радиус-векторов, затем вызывать метод, вычисляющий длину данного радиус-вектора.
Ввод | Вывод |
---|---|
3 |
1.4142135623731 |
Определите для точек операцию сравнения __lt__
, сравнивающую
точки по значению расстояния от начала координат. Отсортируйте данные
точки в порядке возрастания расстояния от начала координат.
Точки с одинаковым расстоянием должны идти в том порядке, в котором они были даны.
Ввод | Вывод |
---|---|
3 |
0 0 |
Среди данных точек найдите три точки, образующие треугольник с наибольшим периметром. Выведите данный периметр.
Для нахождения периметра треугольника напишите отдельную функцию Perimeter(A, B, C)
.
Ввод | Вывод |
---|---|
4 |
3.41421356237309 |
Среди данных точек найдите три точки, образующие треугольник с наибольшей площадью. Выведите данную площадь.
Для нахождения площади треугольника напишите отдельную функцию Area(A, B, C)
.
Ввод | Вывод |
---|---|
4 |
0.5 |
Класс Fraction
должен иметь два поля: числитель a
и
знаменатель b
. Оба поля должны быть типа int
.
Для класса Fraction
определите конструктор, который может
принимать следующие виды параметров:
Fraction
.
int
.
int
.
str
, содержащий два целых числа, записанных
либо через пробел, либо через дробную черту или одно целое число.
У каждой дроби существует единственное каноническое представление.
Каноническое представление: это такое представление \(\frac{a}{b}\), что
\(b>0\), \( (a, b) = 1\). Класс должен иметь метод reduce
,
который приводит дробь к каноническому представлению. После каждой операции
с дробями (в том числе и в конструкторе) необходимо вызывать метод reduce
для сокращения дроби.
Необходимо определить метод __str__
, который выводит
a/b
в каноническом представлении, если же дробь является целым
числом, то просто значение этого числа.
Каждая строка входного файла содержит либо два числа, записанных через пробел или
дробную черту, либо одно число. Необходимо считать это число в строку и вызвать
конструктор для считанной строки, получив объект класса Fraction
.
После этого нужно вывести данный объект функцией print
Ввод | Вывод |
---|---|
1 2 |
1/2 |
Напомним, что от вас требовалось реализовать конструктор класса Fraction
, который принимает на вход
разные варанты параметров. В этой задаче проверяется реализация всех этих четырех форм конструктора.
В этой и следующих задачах на проверку нужно сдать только реализацию класса Fraction
.
Ввод | Вывод |
---|---|
a = Fraction() |
0 |
Определите методы __lt__
, __le__
, __gt__
, __ge__
,
__eq__
, __ne__
. В качестве параметра other
может выступать объект
одного из трех типов: int
, float
, Fraction
.
Тестирование проводится, как в предыдущей задаче.
Определите методы умножения __mul__
, __rmul__
, __imul__
так, чтобы
можно было:
int
(результатом является дробь), а также int
и дроби.
float
(результатом является float
), а также
float
и дроби.
Fraction
на Fraction
или int
.
Методы типа __imul__
, то есть переопределяющие
операторы присваивания (*=
) должны возвращать self
.
Определите методы деления __truediv__
,
__rtruediv__
, __itruediv__
.
Определите операции возведения в степень __pow__
, __rpow__
так, чтобы можно было
возводить дроби в степень типа int
, float
,
Fraction
, числа типа int
и float
в степень Fraction
. Операция возведения Fraction ** int
возвращает Fraction
, во всех остальных случаях возвращается
float
.
Определите операцию __ipow__
для возведения дроби в целочисленную степень.
Определите операции __add__
, __iadd__
, __radd__
.
Определите операции __sub__
, __isub__
, __rsub__
.
Определите операции __pos__
, __neg__
, __abs__
.
Определите операции __int__
(должна округлять вниз до ближайшего целого),
__float__
, __round__
(должна возвращать значение типа float
,
можно использовать функцию round
для величины типа float
).
По данной дроби, не превосходящей 1, найдите максимальную дробь с числителем, равным 1, не превосходящей данную.
На вход программе подаётся строка вида A/B
, где A
и B
—
натуральные числа, десятичная запись которых содержит не более 100 знаков.
Требуется вывести дробь вида 1/С
, где \(\frac{1}{C}\) —
максимальная дробь с числителем, равным 1, такая что \(\frac{1}{C}\leqslant\frac{A}{B}\).
Ввод | Вывод |
---|---|
2/5 |
1/3 |
1/4 |
1/4 |
23/101 |
1/5 |
45/46 |
1/2 |
Разложением дроби на сумму египетских дробей называется представление данной дроби в ввиде суммы дробей с числителем равным 1 и разными знаменателями (дроби с числителем равным 1 ещё называют аликвотными дробями).
Дана дробь, не превосходящая 1. Найти разложение данной дроби на сумму египетских дробей и вывести это разложение (см. примеры). Если разложений существует несколько, вывести любое.
На вход программе подаётся строка в формате, описанном в предыдущей задаче. <з>Программа должна вывести выражение — сумму различных аликвотных дробей или одну дробь, если заданная дробь является аликвотной. Значение выведенного выражения должна быть равно данной дроби.
Ввод | Вывод |
---|---|
2/5 |
1/3+1/15 |
3/7 |
1/3+1/11+1/231 |
1/13 |
1/13 |
5/121 |
1/25+1/757+1/763309+1/873960180913+1/1527612795642093418846225 |