Создайте структуру Point
, определите для нее конструктор,
необходимые арифметические операции, операции ввода-вывода, операцию сравнения “меньше”.
У структуры Point
два поля: x
и y
.
Программа получает на вход число N, далее координаты N точек. Выведите координаты точки, наиболее удаленной от начала координат.
Для решения этой задачи напишите метод dist
,
который возвращает расстояние от точки до начала координат.
Решение предполагается примерно таким:
int main() { int n; cin >> n; Point ans; for (int i = 0; i < n; i++) { Point p; cin >> p; if (p.dist() > ans.dist()) ans = p; } cout << ans << endl; }
Ввод | Вывод |
---|---|
2 |
2 3 |
Выведите координаты центра масс данного множества точек (учтите, что это —два действительных числа).
Определите операции сложения точек, умножения точки на число, деления точки на число.
Ввод | Вывод |
---|---|
2 |
1.5 2.5 |
Выведите диаметр данного множества – максимальное расстояние между двумя данными точками.
Для этого удобно определить операцию разности двух точек, возвращающую разность двух радиус-векторов, затем вызвать метод, вычисляющий длину данного радиус-вектора.
Ввод | Вывод |
---|---|
3 |
1.4142135623731 |
Определите для точек оператор сравнения “<”, сравнивающую
точки по значению расстояния от начала координат. Отсортируйте данные
точки в порядке возрастания расстояния от начала координат используя
функцию sort
из файла algorithm
.
Ввод | Вывод |
---|---|
3 |
0 0 |
Среди данных точек найдите три точки, образующие треугольник с наибольшим периметром. Выведите данный периметр.
Для нахождения периметра треугольника напишите отдельную функцию double Perimeter(Point A, Point B, Point C)
.
Ввод | Вывод |
---|---|
4 |
3.41421356237309 |
Среди данных точек найдите три точки, образующие треугольник с наибольшей площадью. Выведите данную площадь.
Для нахождения площади треугольника напишите отдельную функцию double Area(Point A, Point B, Point C)
.
Ввод | Вывод |
---|---|
4 |
0.5 |
Структура Fraction
должна иметь два поля: числитель a
и
знаменатель b
. Оба поля должны быть типа int
.
Для структуры Fraction
определите конструкторы, которые могут принимать
следующие виды параметров:
Fraction
.
int
.
int
.
string
, содержащий два целых числа, записанных
либо через пробел, либо через дробную черту или одно целое число.
У каждой дроби существует единственное каноническое представление.
Каноническое представление: это такое представление \(\frac{a}{b}\), что
\(b>0\), \( (a, b) = 1\). Структура должен иметь метод reduce
,
который приводит дробь к каноническому представлению. После каждой операции
с дробями (в том числе и в конструкторе) необходимо вызывать метод reduce
для сокращения дроби.
Необходимо определить вывод дроби в формате a/b
в каноническом представлении, если же дробь является целым
числом, то просто значение этого числа.
Необходимо реализовать следующую функциональность структуры:
reduce
.
Fraction()
, Fraction(int)
, Fraction(int, int)
.
Конструктор должен вызывать метод reduce
.
На проверку необходимо сдать только реализацию класса, то есть решение не должно содержать функцию
main
. Если что-то непонятно — смотрите протокол проверки.
Реализовать считывание дроби из потока istream
,
перегрузив оператор считывания >>
. При считывании
дробь имеет один из двух форматов: либо целое число, либо два
целых числа через дробную черту без пробелов, при этом только числитель
может иметь знак “-”.
Определите операторы
<
, <=
, >
, >=
,
==
, !=
. Сравнения необходимо реализовать
для типов int
, double
, Fraction
,
при этом значение типа Fraction
может быть как правым,
так и левым операндом.
Определите оператор сложения +
так, чтобы можно
было складывать:
Fraction
).
int
в любом порядке (результатом является Fraction
).
double
в любом порядке (результатом является double
).
Определите оператор вычитания.
Определите операторы умножения и деления.
Определите операторы +=
, -=
,
*=
, /=
для случая, когда правый
операнд имеет тип Fraction
или int
.
Пример определения оператора:
Fraction & operator+= (Fraction &, Fraction)