Лабораторная работа № 1.
Множества

Написать программу для обработки множеств, которая позволяет ввести три множества символов a, b и c и вычислить множество, являющееся:

  1. объединением множеств a и b;
  2. пересечением множеств a и b;
  3. разностью множеств a и b;
  4. множеством, полученным из множеств a, b и c по формуле, заданной в таблице.

Описание
Формула Формула Формула
1. (a ∪ b) ∪ (c ∩ a) 11. (a ∪ b) ∪ (c \ a) 21. (a ∩ b) ∪ (c ∩ a)
2. (a ∪ b) ∩ (c ∪ b) 12. (a ∪ b) ∩ (c \ b) 22. (a ∪ b) ∩ (c ∩ b)
3. (a ∪ c) \ (b ∪ c) 13. (a ∪ c) \ (b \ c) 23. (a ∪ c) \ (b ∩ c)
4. (a ∩ b) ∪ (c ∪ a) 14. (a ∩ b) ∪ (c \ a) 24. (a ∩ b) ∪ (c ∩ a)
5. (a ∩ b) ∩ (c ∪ b) 15. (a ∩ b) ∩ (c \ b) 25. (a ∩ b) ∪ (c ∩ b)
6. (a ∩ c) \ (b ∪ c) 16. (a ∩ c) \ (b \ c) 26. (a ∩ c) \ (b ∩ c)
7. (a \ b) ∪ (c ∪ a) 17. (a \ b) ∪ (c \ a) 27. (a \ b) ∪ (c ∩ a)
8. (a \ b) ∩ (c ∪ b) 18. (a \ b) ∩ (c \ b) 28. (a \ b) ∩ (c ∩ b)
9. (a \ c) \ (b ∪ c) 19. (a \ c) ∪ (b \ c) 29. (a \ c) \ (b ∩ c)
10. (a ∩ b) \ (b ∩ c) 20. (a ∩ b) \ (b \ c) 30. (a ∪ b) \ (b ∪ c)

Множество должно быть реализовано тремя способами – через стандартный тип языка Паскаль, через массив элементов типа char и через массив логических элементов. Для собственных реализаций множества должны быть реализованы операции инициализации множества (должно создаваться пустое множество), добавления элемента в множество, проверки вхождения элемента в множество, объединения множеств, пересечения множеств и разности множеств. Также желательно реализовать операции проверки на равенство/неравенство, подмножество и надмножество (строгое и нестрогое).

Во всех трёх случаях полагаем, что множество может содержать набор символов ASCII, которые имеют коды от 0 до 255.

Необходимо реализовать две программы. Одна должна использовать стандартную реализацию множества (оболочку для стандартной реализации не писать!), а к другой будет подключаться модуль с одной из собственных реализаций множества. Для того, чтобы можно было поочередно использовать два модуля в одной программе, они должны быть реализованы схожим образом, т.е. использовать одинаковые имена и одинаковые по типам процедуры и функции. При подключении другого модуля сама программа не должна меняться ни на один символ.

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