7.3. Тип «множество» (Set). Операции с множествами
Турбо Паскаль поддерживает все основные операции с множествами. Множество, если оно не является пустым, всегда содержит что-то, и говоря «множество», необходимо указывать — «чего?». В Паскале множества определяются как наборы значений из некоего скалярного (перечислимого) типа. Скалярные типы — Byte и Char вводятся языком, они — перечислимые (их элементы можно поштучно назвать) и могут служить основой для построения множеств. Если же их станет мало, то всегда можно ввести свой скалярный тип, например:
TYPE
VideoAdapterType = (MDA, Hercules, AGA, CGA, MCGA, EGA, VGA, Other, NotDetected);
и использовать переменную
VAR
VideoAdapter : VideoAdapterType;
которая может иметь только перечисленные в задании типа значения. А далее можно ввести переменную — множество из тех же значений.
В описании множества как типа используется конструкция Set of и следующее за ней указание базового типа, т.е. того скалярного типа, из элементов которого составлено множество. Способов задания множеств несколько:
TYPE
SetOfChar = Set of Char; { множество из символов }
SetOfByte = Set of Byte; { множество из чисел }
SetOfVideo = Set of VideoAdapterType;
{ множество из названий видеоадаптеров }
SetOfDigit = Set of 0..9;
{ множество из чисел от 0 до 9 }
SetOfDChar = Set of '0'..'9';
{ множество из символов '0','1',...,'9'}
SetOfVA = Set of CGA..VGA;
{ подмножество названий видеоадаптеров }
- 143 -
Как видно из примеров, можно в задании типа множества «урезать» базовый тип, задавая поддиапазон его значений. В итоге множество сможет состоять только из элементов, вошедших в диапазон.
Если перечислимый тип вводится только для подстановки его имени в Set of, то можно на нем сэкономить и перечислить значения сразу в конструкции Set of. Не забудьте круглые скобки!
TYPE
SetOfVideo = Set of (MDA, Hercules, AGA, CGA, MCGA,
EGA, VGA, Other, NоtDetected);
SetOfGlasn = Set of ('А', 'И', 'О', 'У', 'Э');
Можно опустить фазу описания типа в разделе TYPE и сразу задавать его в разделе описания переменных:
VAR
V1 : Set of ...
В Турбо Паскале разрешено определять множества, состоящие не более чем из 256 элементов. Столько же элементов содержат типы Byte и Char, и это же число является ограничением количества элементов в любом другом перечислимом базовом типе множества, задаваемом программистом. Каждый элемент множества имеет сопоставимый номер. Для типа Byte номер равен значению числа, в типе Char номером символа является его ASCII-код. Всегда нумерация идет от 0 до 255. По этой причине не являются базовыми для множеств типы ShortInt, Word, Integer, LongInt.