Множество – это особый тип данный, который строится на основе некоторого базового типа. Имея переменную типа "множество", можно получить ответ на вопрос: "присутствует ли во множестве искомое значение". Например, представьте себе последовательность чисел 1,12,43,55 (кстати, одинаковых элементов в множестве быть не может). Можно узнать, входит ли число 43 в множество или нет, можно добавить новое число в множество, удалить число из множества, узнать, какие числа входят в два множества сразу. Но само число 43 в множестве не содержится. Множество – это не массив! Нельзя обратиться к конкретному элементу множества, можно только узнать, присутствует ли данное значение в множестве или нет.
В Delphi множество описывается примерно так:
TYPE TS=SET OF CHAR;
Здесь CHAR – базовый тип множества. Что это значит? Дело в том, что в памяти компьютера каждый элемент множества кодируется одним битом. Если бит равен единице, то элемент, равный порядковому номеру этого бита, присутствует в множестве, если же нулю – отсутствует. Работать с длинными последовательностями нулей и единиц долго. Поэтому в Паскале введено ограничение – число элементов в множестве не должно превышать 256. Соответственно и базовым типом можно выбирать только такой, который принимает не более 256 различных значений. К ним относятся BYTE и CHAR, перечислимые типы и типы-диапазоны с числом элементов, не превышающим 256. При попытке создать множество на базе, к примеру, типа INTEGER (2 байта, 65535 различных значений) возникнет сообщение об ошибке "Set base type out of range":
TYPE TS=SET OF INTEGER;
Set base type out of range
|
Переменную типа "множество" нельзя непосредственно вывести на экран или ввести с клавиатуры. Как же тогда создать множество?
Рассмотрим следующий фрагмент программы:
TYPE ts=SET OF CHAR;
VAR s:ts;
…
s:=[’A’,’B’,’C’,’D’..’H’];
Здесь создается множество с базовым типом CHAR и в него заносятся элементы 'A', 'B','C',D','E','F','G','H'. Как такое множество хранится в памяти, видно из Рис. 2.1
Рис. 5.1. Представление множества в памяти
(в нижнем ряду представлены коды символов).