Структуры - введение в объектно-ориентированное программирование

Упражнения на проектирование структуры “Point”

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

A: Самая дальняя точка

Программа получает на вход число N, далее координаты N точек. Выведите координаты точки, наиболее удаленной от начала координат.

Для решения этой задачи напишите метод dist, который возвращает расстояние от точки до начала координат.

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

B: Центр масс

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Упражнения на проектирование структуры “Fraction”

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

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

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

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

G: Метод reduce и вывод дроби

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

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

Методика тестирования следующая. Проект должен содержать два файла: fraction.h, содержащий описание и реализацию структуры и fraction.cpp, подключающий fraction.h и содержающий функцию main. На проверку сдается только файл fraction.h, после чего проводится его тестирование на соответствие спецификации.

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

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

I: Сравнения

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

J: Сложение

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

K: Вычитание

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

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

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

M: Операторы присваивания

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

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

Fraction & operator+= (Fraction &, Fraction)