- •Задание № 2 Абстрактный тип данных
- •1) Список строк (string list)
- •2) Стек строк (string stack)
- •3) Множество строк (string set)
- •4) Вещественная матрица (matrix)
- •5) Кусочно-постоянная функция (step function)
- •6) Многочлен (polynomial)
- •7) Граф (graph)
- •8) Дата и время (datetime)
- •Задание № 3 Реализация абстрактных классов
5) Кусочно-постоянная функция (step function)
Вещественная функция (double) определенная на всей числовой прямой. Область определения делится на N промежутков (первый и последний -- полуинтервалы), внутри каждого из которых функция принимает некоторое постоянное для этого промежутка значение. На границах всех промежутков непрерывна либо слева, либо справа (выбрать). Обязательно придумайте лаконичное строковое представление (наподобие того, что для матриц), сделайте конструктор из него и приведение к нему.
Обязательные возможности:
+, -, *, /,
() // значение в точке
Необязательные возможности:
численное интегрирование на отрезке
6) Многочлен (polynomial)
Понятие алгебры. Многочлен степени n от одной вещественной (double) переменной x. О текстовом представлении даже не говорю :) "4x^2 + 3x - 2", пробелы игнорируем. Преобразование к строке выдает многочлен упорядоченным по степеням x, конструктор воспринимает любой их порядок.
Обязательные возможности:
() // значение в точке
+, -, * // возвращают многочлены
Дополнительные возможности:
/ (деление многочленов с отбрасыванием остатка)
% (остаток от деления многочленов)
упрощение (приведение подобных) либо при преобразовании к строке, либо
поддерживать всегда в приведенном виде
символьное интегрирование (с построением нового многочлена)
символьное дифференциирование (с построением нового многочлена)
определенный интеграл в заданных пределах (возвращает число)
7) Граф (graph)
Понятие дискретной математики. Выбрать: 1) ориентированный (с дугами) или неориентированный (с ребрами) 2) допускаются ли петли 3) допускаются ли мультиребра (мультидуги) 4) допускаются ли пометки (веса) ребер (дуг) (потомки от базового класса "пометка ребра")
Текстовое представление. Например: "( (1,2,3,4), ((1,'a', 2),(2,'abc', 3)) )" задает граф с вершинами 1, 2, 3 и двумя ребрами: с пометкой "a" из 1 в 2 и с пометкой "abc" из 2 в 3, вершина 4 изолирована. Придумайте вспомогательные классы "вершина", "ребро (дуга)", которые бы незаметно для пользователя конструировались из строк, превращались в строки, и т.д.
Обязательные возможности:
добавление вершины, ребра, дуги, удаление их, список дуг, исходящих из вершины;
оператор + (объединение графов, добавление вершины, добавление ребра на те же
вершины или вместе с одной новой вершиной или с двумя новыми вершинами,
если их еще нет в графе);
проверка достижимости одной вершины из другой.
Дополнительные возможности.
поиск путей из вершины в вершину (придумать класс + текстовое
представление пути);
поиск циклов;
поиск сильно связных компонент;
построение остовного дерева [минимальной стоимости];
вершинная/реберная раскраска.
8) Дата и время (datetime)
Реализовать классы для работы с моментами времени и интервалами времени. Выбрать: точность представления (до секунды, до миллисекунды).
Обязательные операции:
конструкторы и преобразования для текстового представления
(момент: "2008-03-06 23:40:01.334" -- сейчас,
интервал: "2-1-15 00:05:00.000" -- два года, полтора месяца
(для интервалов считать их по 30 дней) и 5 минут)
получить текущий момент времени
moment - moment = interval,
moment + interval = moment,
moment - interval = moment,
interval + interval = interval,
interval - interval = interval.
Необязательные операции:
интервал * double
интервал / double
конструктор/преобразование для типа unix timestamp
([milli]seconds since Epoch, google it)
