Реализовать классы Interval и IntervalSet, описывающие абстракции интервала и множества интервалов.
Классы должны включать в себя все необходимые операции, обеспечивающие следующие сценариии использования:
- IntervalSet s; // пустое множество
- s += Interval(0, 2.5); // добавляется интервал (0;2.5)
- s += Interval(-4, 1, true); // добавляется интервал [-4;1)
- s += Interval(3, 7, true, true); // добавляется интервал [3;7]
- s += -8.5; // добавляется точка -8.5
- cout << s; // выводит в поток вывода информацию о "нормализованных" (упорядоченных по возрастанию и неперекрывающихся) интервалах, составляющих множество , в данном примере: {[-8.5;-8.5],[-4.0;2.5),[3;7]}
- // Принадлежность точки множеству интервалов
- bool contains = s.contains(0);
- IntervalSet s1(Interval(5,6)); // множество, состоящее из одного интервала
- bool equal = s == s1; // сравнение множеств на равенство (сравниваем как два множества точек вещественной оси)
- // объединение
- IntervalSet s2 = IntervalSet(Interval(0,2)) + IntervalSet(Interval(3,8)); // результат - {(0;2),(3;8)}
- IntervalSet s3 = Interval(3,10) + Interval(6,11,false,true); // тоже самое, но с неявным преобразованием.
- //результат - {(3;11]}
- // разность
- IntervalSet s4 = Interval(1, 7, true, true) - Interval(3, 5, true); // результат {[1;3),[5;7]}
- // пересечение
- IntervalSet s5 = Interval(0, 5) ^ IntervalSet(Interval(3, 8)); // результат {(3;5)}
Реализация не должна использовать STL.
Исходный файл должен включать функцию int test() { ... } с вашими
тестами на реализованные операции (функция возвращает 0 в случае успеха
либо положительный номер первого провалившегося теста).
Последней строкой программы должна быть директива
- #include <check-h2.h>
для включения "внешних" тестов.
Функции main в программе быть не должно (свою можно заключить в комментарий).
Система оценивания аналогична прошлой задаче + оценка за тесты.