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

1. Постановка задачи

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

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

2. Таблица данных

Класс Имя Смысл Тип Структура
Входные данные a, b, c Заданные множества множество символов составная переменная
Выходные данные r Полученное множество множество символов составная переменная

3. Аномалии

  1. Недостаточно параметров.
  2. Невозможно открыть файл для чтения.
  3. Невозможно открыть файл для записи.

4. Входная форма

5. Выходная форма

6. Тестовые примеры

№ теста Входные данные Ожидаемые результаты Смысл теста
1 a = ['a', 'b', 'c', 'd', 'e', 'f']
b = ['d', 'e', 'f', 'g', 'h', 'r']
c = ['a', 'f', 'm', 'n', 'o']
a ∪ b     = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'r']
a ∩ b     = ['d', 'e', 'f']
a \ b     = ['a', 'b', 'c']
a ∩ b ∪ c = ['a', 'd', 'e', 'f', 'm', 'n', 'o']
Проверка корректности результата операций над множествами
2 a = ['!', '$', '+', ':', '?']
b = ['1', '2', '5', '9']
c = [' ', '&', '*']
a ∪ b     = ['!', '$', '+', '1', '2', '5', '9', ':', '?']
a ∩ b     = []
a \ b     = ['!', '?', ':', '$', '+']
a ∩ b ∪ c = [' ', '*', '&']

7. Метод

Из каждой строки файла вводим символы и добавляем их в множество. Выполняем необходимые операции. Для вывода результата проверяем какие символы входят в полученное множество (при использовании стандартной реализации можно использовать цикл for…in) и выводим их в файл.

8. Пример программы

program Sets; uses UnitSetOnBooleanArray; var a, b, c, r: TCharSet; f: TextFile; ch: char; begin if ParamCount < 2 then begin writeln('Недостаточно параметров'); exit; end; try AssignFile(f, ParamStr(1)); Reset(f); except writeln('Невозможно открыть файл ''', Paramstr(1), ''' для чтения'); exit; end; Init(a); while not eoln(f) do begin read(f, ch); Add(a, ch); end; readln(f); Init(b); while not eoln(f) do begin read(f, ch); Add(b, ch); end; readln(f); Init(c); while not eoln(f) do begin read(f, ch); Add(c, ch); end; CloseFile(f); try AssignFile(f, ParamStr(2)); Rewrite(f); except writeln('Невозможно открыть файл ''', Paramstr(2), ''' для записи'); exit; end; write(f, 'Объединение: ['); r := Union(a, b); for ch := chr(0) to chr(255) do if IsInSet(r, ch) then write(f, ch); writeln(f, ']'); write(f, 'Пересечение: ['); r := Intersection(a, b); for ch := chr(0) to chr(255) do if IsInSet(r, ch) then write(f, ch); writeln(f, ']'); write(f, 'Разность: ['); r := Difference(a, b); for ch := chr(0) to chr(255) do if IsInSet(r, ch) then write(f, ch); writeln(f, ']'); write(f, 'Выражение: ['); r := Union(Intersection(a, b), c); for ch := chr(0) to chr(255) do if IsInSet(r, ch) then write(f, ch); writeln(f, ']'); CloseFile(f); end.