*Разработать структуру для хранения множеств произвольного размера (от 1 элемента до high(dword) элементов).
Обязательное требование к структуре:
элементы множества должны быть расположены максимально плотно в оперативной памяти (по 1 биту на элемент, по 8 элементов на байт).
Разработать функции обработки таких множеств.
{ тип для множества - указатель на разработанную структуру }
type SuperSet=pointer;
{ создает множество, выделяя для него оперативную память в соотвествии с переданным
максимально возможным количеством элементов maxCount }
function createSet(maxCount:dword):SuperSet;
{ уничтожает множество, освобождая выделенную для него оперативную память }
procedure destroySet(sset:SuperSet);
{ возвращает копию переданного множества }
function copySet(sset:SuperSet):SuperSet;
{ аналог операции in }
function inSet(e:dword; sset:SuperSet):boolean;
{ объединяет множества s1set и s2set
Если iscopy=true, то для хранения результата создается
новое множество в оперативной памяти и функция возвращает новое множество
Если iscopy=false, то результат размещается в s1set и функция возвращает s1set}
function addSet(s1set,s2set:SuperSet; iscopy:boolean=false):SuperSet;
{ вычитает из множества s1set множество s2set
Если iscopy=true, то для хранения результата создается
новое множество в оперативной памяти и функция возвращает новое множество
Если iscopy=false, то результат размещается в s1set и функция возвращает s1set}
function subSet(s1set,s2set:SuperSet; iscopy:boolean=false):SuperSet;
{ вычисляет пересечение множеств s1set и s2set
Если iscopy=true, то для хранения результата создается
новое множество в оперативной памяти и функция возвращает новое множество
Если iscopy=false, то результат размещается в s1set и функция возвращает s1set}
function mulSet(s1set,s2set:SuperSet; iscopy:boolean=false):SuperSet;
{ включает e в sset
Если iscopy=true, то для хранения результата создается
новое множество в оперативной памяти и функция возвращает новое множество
Если iscopy=false, то результат размещается в sset и функция возвращает sset}
function includeSet(e:dword; sset:SuperSet; iscopy:boolean=false):SuperSet;
{ исключает e из sset
Если iscopy=true, то для хранения результата создается
новое множество в оперативной памяти и функция возвращает новое множество
Если iscopy=false, то результат размещается в sset и функция возвращает sset}
function excludeSet(e:dword; sset:SuperSet; iscopy:boolean=false):SuperSet;
Если операции выполняются над множествами различного размера, то результат зависит
от значения iscopy. Если iscopy=true, то новое множество будет равно по размеру множеству
с большим количеством элементов. Если iscopy=false и размер s1set меньше размера s2set, то
лишние элементы s2set игнорируются.
Проверить работу функций.