Skip to content

Множество интервалов

Реализовать классы Interval и IntervalSet, описывающие абстракции интервала и множества интервалов.

Классы должны включать в себя все необходимые операции, обеспечивающие следующие сценариии использования:

  1. IntervalSet s; // пустое множество  
  2. s += Interval(0, 2.5); // добавляется интервал (0;2.5)  
  3. s += Interval(-4, 1, true); // добавляется интервал [-4;1)  
  4. s += Interval(3, 7, truetrue); // добавляется интервал [3;7]  
  5. s += -8.5; // добавляется точка -8.5  
  6.   
  7. cout << s; // выводит в поток вывода информацию о "нормализованных" (упорядоченных по возрастанию и неперекрывающихся) интервалах, составляющих множество , в данном примере: {[-8.5;-8.5],[-4.0;2.5),[3;7]}  
  8.   
  9. // Принадлежность точки множеству интервалов  
  10. bool contains = s.contains(0);  
  11.   
  12. IntervalSet s1(Interval(5,6)); // множество, состоящее из одного интервала  
  13.   
  14. bool equal = s == s1; // сравнение множеств на равенство (сравниваем как два множества точек вещественной оси)  
  15.   
  16. // объединение  
  17. IntervalSet s2 = IntervalSet(Interval(0,2)) + IntervalSet(Interval(3,8)); // результат - {(0;2),(3;8)}  
  18. IntervalSet s3 = Interval(3,10) + Interval(6,11,false,true); // тоже самое, но с неявным преобразованием.  
  19. //результат - {(3;11]}  
  20.   
  21. // разность  
  22. IntervalSet s4 = Interval(1, 7, truetrue) - Interval(3, 5, true); // результат {[1;3),[5;7]}  
  23.   
  24. // пересечение  
  25. IntervalSet s5 = Interval(0, 5) ^ IntervalSet(Interval(3, 8)); // результат {(3;5)}  

Реализация не должна использовать STL.
Исходный файл должен включать функцию int test() { ... } с вашими тестами на реализованные операции (функция возвращает 0 в случае успеха либо положительный номер первого провалившегося теста).
Последней строкой программы должна быть директива

  1. #include <check-h2.h>  

для включения "внешних" тестов.

Функции main в программе быть не должно (свою можно заключить в комментарий).

Система оценивания аналогична прошлой задаче + оценка за тесты.

Categories: 205, C++, ejudge, ДЗ.

Comment Feed

No Responses (yet)



Some HTML is OK

or, reply to this post via trackback.