2026/27, 10-профиль, C++: Структуры

A: Наиболее удаленная точка

Создайте структуру 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
1 2
2 3
2 3

B: Центр масс

Создайте структуру Point, определите для нее конструктор, необходимые арифметические операции, операции ввода-вывода, операцию сравнения «меньше». У структуры Point два поля: x и y.

Выведите координаты центра масс данного множества точек (учтите, что это — два действительных числа).

Определите операции сложения точек, умножения точки на число, деления точки на число.

Пример

ВводВывод
2
1 2
2 3
1.5 2.5

C: Диаметр множества

Создайте структуру Point, определите для нее конструктор, необходимые арифметические операции, операции ввода-вывода, операцию сравнения «меньше». У структуры Point два поля: x и y.

Выведите диаметр данного множества — максимальное расстояние между двумя данными точками.

Для этого удобно определить операцию разности двух точек, возвращающую разность двух радиус-векторов, затем вызвать метод, вычисляющий длину данного радиус-вектора.

Пример

ВводВывод
3
1 1
1 0
0 0
1.4142135623731

D: Сортировка точек

Создайте структуру Point, определите для нее конструктор, необходимые арифметические операции, операции ввода-вывода, операцию сравнения «меньше». У структуры Point два поля: x и y.

Определите для точек оператор сравнения «<», сравнивающий точки по значению расстояния от начала координат. Отсортируйте данные точки в порядке возрастания расстояния от начала координат, используя функцию sort из файла algorithm.

Пример

ВводВывод
3
1 0
-1 -1
0 0
0 0
1 0
-1 -1

E: Максимальный периметр

Создайте структуру Point, определите для нее конструктор, необходимые арифметические операции, операции ввода-вывода, операцию сравнения «меньше». У структуры Point два поля: x и y.

Среди данных точек найдите три точки, образующие треугольник с наибольшим периметром. Выведите данный периметр.

Для нахождения периметра треугольника напишите отдельную функцию double Perimeter(Point A, Point B, Point C).

Пример

ВводВывод
4
0 0
0 1
1 0
1 1
3.41421356237309

F: Максимальная площадь

Создайте структуру Point, определите для нее конструктор, необходимые арифметические операции, операции ввода-вывода, операцию сравнения «меньше». У структуры Point два поля: x и y.

Среди данных точек найдите три точки, образующие треугольник с наибольшей площадью. Выведите данную площадь.

Для нахождения площади треугольника напишите отдельную функцию double Area(Point A, Point B, Point C).

Пример

ВводВывод
4
0 0
0 1
1 0
1 1
0.5

G: Reduce и вывод дроби

Структура Fraction должна иметь два поля: числитель a и знаменатель b. Оба поля должны быть типа int.

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

У каждой дроби существует единственное каноническое представление. Каноническое представление: это такое представление \(\frac{a}{b}\), что \(b>0\), \((a, b) = 1\). Структура должна иметь метод reduce, который приводит дробь к каноническому представлению. После каждой операции с дробями (в том числе и в конструкторе) необходимо вызывать метод reduce для сокращения дроби.

Необходимо определить вывод дроби в формате a/b в каноническом представлении, если же дробь является целым числом, то просто значение этого числа.

Необходимо реализовать следующую функциональность структуры:

  1. Метод reduce.
  2. Конструкторы Fraction(), Fraction(int), Fraction(int, int). Конструктор должен вызывать метод reduce.
  3. Вывод дроби.

На проверку необходимо сдать только реализацию класса, то есть решение не должно содержать функцию main. Если что-то непонятно — смотрите протокол проверки.


H: Считывание дроби

Структура Fraction должна иметь два поля: числитель a и знаменатель b. Оба поля должны быть типа int.

У каждой дроби существует единственное каноническое представление. Каноническое представление: это такое представление \(\frac{a}{b}\), что \(b>0\), \((a, b) = 1\). Структура должна иметь метод reduce, который приводит дробь к каноническому представлению. После каждой операции с дробями (в том числе и в конструкторе) необходимо вызывать метод reduce для сокращения дроби.

Необходимо определить вывод дроби в формате a/b в каноническом представлении, если же дробь является целым числом, то просто значение этого числа.

Реализовать считывание дроби из потока istream, перегрузив оператор считывания >>. При считывании дробь имеет один из двух форматов: либо целое число, либо два целых числа через дробную черту без пробелов, при этом только числитель может иметь знак «-».

На проверку необходимо сдать только реализацию класса, то есть решение не должно содержать функцию main. Если что-то непонятно — смотрите протокол проверки.


I: Сравнение

Структура Fraction должна иметь два поля: числитель a и знаменатель b. Оба поля должны быть типа int.

У каждой дроби существует единственное каноническое представление. Каноническое представление: это такое представление \(\frac{a}{b}\), что \(b>0\), \((a, b) = 1\). Структура должна иметь метод reduce, который приводит дробь к каноническому представлению. После каждой операции с дробями (в том числе и в конструкторе) необходимо вызывать метод reduce для сокращения дроби.

Необходимо определить вывод дроби в формате a/b в каноническом представлении, если же дробь является целым числом, то просто значение этого числа.

Определите операторы <, <=, >, >=, ==, !=. Сравнения необходимо реализовать для типов int, double, Fraction, при этом значение типа Fraction может быть как правым, так и левым операндом.

На проверку необходимо сдать только реализацию класса, то есть решение не должно содержать функцию main. Если что-то непонятно — смотрите протокол проверки.


J: Сложение

Структура Fraction должна иметь два поля: числитель a и знаменатель b. Оба поля должны быть типа int.

У каждой дроби существует единственное каноническое представление. Каноническое представление: это такое представление \(\frac{a}{b}\), что \(b>0\), \((a, b) = 1\). Структура должна иметь метод reduce, который приводит дробь к каноническому представлению. После каждой операции с дробями (в том числе и в конструкторе) необходимо вызывать метод reduce для сокращения дроби.

Необходимо определить вывод дроби в формате a/b в каноническом представлении, если же дробь является целым числом, то просто значение этого числа.

Определите оператор сложения + так, чтобы можно было складывать:

На проверку необходимо сдать только реализацию класса, то есть решение не должно содержать функцию main. Если что-то непонятно — смотрите протокол проверки.


K: Вычитание

Структура Fraction должна иметь два поля: числитель a и знаменатель b. Оба поля должны быть типа int.

У каждой дроби существует единственное каноническое представление. Каноническое представление: это такое представление \(\frac{a}{b}\), что \(b>0\), \((a, b) = 1\). Структура должна иметь метод reduce, который приводит дробь к каноническому представлению. После каждой операции с дробями (в том числе и в конструкторе) необходимо вызывать метод reduce для сокращения дроби.

Необходимо определить вывод дроби в формате a/b в каноническом представлении, если же дробь является целым числом, то просто значение этого числа.

Определите оператор вычитания.

На проверку необходимо сдать только реализацию класса, то есть решение не должно содержать функцию main. Если что-то непонятно — смотрите протокол проверки.


L: Умножение и деление

Структура Fraction должна иметь два поля: числитель a и знаменатель b. Оба поля должны быть типа int.

У каждой дроби существует единственное каноническое представление. Каноническое представление: это такое представление \(\frac{a}{b}\), что \(b>0\), \((a, b) = 1\). Структура должна иметь метод reduce, который приводит дробь к каноническому представлению. После каждой операции с дробями (в том числе и в конструкторе) необходимо вызывать метод reduce для сокращения дроби.

Необходимо определить вывод дроби в формате a/b в каноническом представлении, если же дробь является целым числом, то просто значение этого числа.

Определите операторы умножения и деления.

На проверку необходимо сдать только реализацию класса, то есть решение не должно содержать функцию main. Если что-то непонятно — смотрите протокол проверки.


M: Присваивания

Структура Fraction должна иметь два поля: числитель a и знаменатель b. Оба поля должны быть типа int.

У каждой дроби существует единственное каноническое представление. Каноническое представление: это такое представление \(\frac{a}{b}\), что \(b>0\), \((a, b) = 1\). Структура должна иметь метод reduce, который приводит дробь к каноническому представлению. После каждой операции с дробями (в том числе и в конструкторе) необходимо вызывать метод reduce для сокращения дроби.

Необходимо определить вывод дроби в формате a/b в каноническом представлении, если же дробь является целым числом, то просто значение этого числа.

Определите операторы +=, -=, *=, /= для случая, когда правый операнд имеет тип Fraction или int.

Пример определения оператора:

Fraction & operator+= (Fraction &, Fraction)

На проверку необходимо сдать только реализацию класса, то есть решение не должно содержать функцию main. Если что-то непонятно — смотрите протокол проверки.


N: Ближайшая аликвотная дробь

Аликвотной (единичной) дробью называется дробь с числителем, равным 1.

По данной дроби \(\frac{A}{B}\), не превосходящей 1, найдите максимальную аликвотную дробь \(\frac{1}{C}\), не превосходящую данную.

На вход программе подаётся строка вида A/B, где \(A\) и \(B\) — натуральные числа, не превосходящие \(10^{18}\).

Требуется вывести дробь вида 1/C, где \(\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

O: Египетские дроби

Разложением дроби на сумму египетских дробей называется представление данной дроби в виде суммы дробей с числителем, равным 1, и разными знаменателями (дроби с числителем, равным 1, ещё называют аликвотными дробями).

Дана дробь, не превосходящая 1. Найдите разложение данной дроби на сумму египетских дробей и выведите это разложение (см. примеры). Если разложений существует несколько, выведите любое.

На вход программе подаётся строка вида A/B, где \(A\) и \(B\) — натуральные числа, не превосходящие \(10^{18}\).

Программа должна вывести выражение — сумму различных аликвотных дробей, разделённых знаком +, или одну дробь, если заданная дробь является аликвотной. Значение выведенного выражения должно быть равно данной дроби.

Примеры

ВводВывод
2/5
1/3+1/15
3/7
1/3+1/11+1/231
1/13
1/13
78/94
1/2+1/4+1/13+1/350+1/142567+1/60975905900