Делалось с использованием http://itteach.ru/pascal/pascal-mnozhestvo-set-of

Множество (SET OF)

В Паскале *Множество* - совокупность неупорядоченных данных указанного (*базового*) типа. Базовый тип:

должен быть *упорядоченным* (порядковым);

должен иметь *не более 256* возможных значений;

*порядковые значения* (значения, возвращаемые функцией ord) *базового типа* не должны выходить из диапазона от *0 до 255*.

В силу этого базовый тип множества не может быть ShorInt, Integer, LongInt, Word.

Диапазон значений типа множество представляет собой мощность множества для определенного порядкового типа (базового типа). Каждое возможное значение типа множество является подмножеством возможных значений базового типа.

Переменная типа множество может принимать как все значения множества, так и ни одного.

Любой множественный тип может принимать значение [], которое называется пустым множеством.

Множество можно описать тремя способами:

1. В разделе описания переменных:

var <имя множества>:set of <базовый тип>;

2. В разделе описания типов:

type <имя типа>=set of <базовый тип>;
>var <имя множества>:<имя типа>;

3. В разделе описания констант:

type up =set of ‘A’..’Z’; low=set of ‘a’..’z’; const upcase:up=[’A’..’Z’] ; voc:low[’a’,’e’,’i’,’o’,’u’,’y’] ; delimeter: set of char=[’ ‘..’/’,’:’..’?’];

Значения переменных и константы множества задаются в разделе операторов с помощью конструктора. Конструктор-список элементов базового типа, заключенных в квадратные скобки.

Над множествами возможны операции:

Операция объединения (+): С:=А+В

Операция пересечения (*): С:=А*В

Операция разности (-): С:=А-В

Операция равенства(совпадения) множеств (: С=В

Операция неравенства (<>): C<>B

Операция проверки на вхождение множества в множество (>=,⇐): A⇐B - включено ли А в В;

Операция проверки на вхождение элемента в множество (IN): С IN B - входит ли элемент С в множество В