| 6.5.      МножествоВ языке Паскаль типом-множеством называется множество-степень исходного множества объектов порядкового типа, т. е. множество всевозможных сочетаний объектов исходного множества. Число элементов исходного множества в Turbo Pascal не может быть больше 256, а порядковые номера элементов (т. е. значение функции Ord) должны находиться в пределах от 0 до 255. Для задания типа-множества следует использовать зарезервированные слова set и of, а затем указать элементы этого множества, как правило, в виде перечисления или диапазона, например: typeAlfa = set  of   'A'..'Z';
 Count = set  of   (Plus,   Minus,   Mult,   Divid);
 Ten = set  of 0..9;
 Number = set  of   '0'..'9';
 Введя тип-множество, можно задать переменные или типизированные константы этого типа-множества. При задании значений константе-множеству ее элементы перечисляются через запятую (допустимо указывать диапазоны) и помещаются в квадратные скобки. Например, для введенных выше типов можно задать такие переменные и типизированные константы:  varCharval: Alfa;
 Operation: Count;
 const
 Index:   Ten =  [0,   2,   4,   6,   8];
 Digit:   Number =   ['0'..'9'];
 Примечание.        Так же как и для других структурированных типов, тип-множество можно тести непосредственно при задании переменных или типизированных констант: varCharVal:   set  of   'A'..'Z';
 Operation:   set  of   (Plus,   Minus,   Mult,   Divid);
 const
 Index:   set  of  0..9=[0,   2,   4,   6,   8];
 Digit:   set of   '0'..'9'=['0'..'9'];
 Множеству можно в программе присвоить то или иное значение. Обычно значение задается с помощью конструктора множества. Конструктор задает множество элементов с помощью перечисления в квадратных скобках выражений, значения которых дают элементы этого множества. Допустимо использовать диапазоны элементов. Пример.  Следующие структуры являются конструкторами множеств: [Plus, Minus][1..К mod 12, 15]
 [Chr(0)..Chr(31), 'А', 'В']
 В каждое множество включается и т. н. пустое множество [ ], не содержащее никаких элементов. Конструктор множества можно использовать и непосредственно в операциях над множествами. Для множеств определены следующие операции:  
   | + | -  объединение множеств; |  
   | - | -  разность множеств; |  
   | * | -  пересечение множеств; |  
   | = | -  проверка эквивалентности двух множеств; |  
   | <> | -  проверка неэквивалентности двух множеств; |  
   | <= | -     проверка,  является  ли  левое  множество  подмножеством правого множества; |  
   | >= | -     проверка,  является  ли  правое  множество  подмножеством  левого множества; |  
   | in | -     проверка,   входит   ли   элемент,   указанный   слева,   в   множество, указанное справа. |  Результатом операции объединения, разности или пересечения является соответствующее множество, остальные операции дают результат логического типа.  Пример. Ввести строку символов, состоящую из латинских букв, цифр и пробелов. Осуществить проверку правильности введенных символов. 
    | program EXAMPLE13; |  |  
    | var |  |  
    | Str: string; |  |  
    | L: Byte; |  |  
    | Tru: Boolean; |  |  
    | begin |  |  
    | WriteLn('Введите строку'); |  |  
    | ReadLn(Str); |  |  
    | L := Length(Str); | {число введенных символов} |  
    | Tru := L > 0; | {true, если не пустая строка} |  
    | while Tru and (L > 0) do | {проверка с конца строки} |  
    | begin |  |  
    | Tru:=Str[L] in ['0'..'9, 'A'..'Z, 'a'..'z, ' ']; | {проверка допустимости символа} |  
    | Dec(L) | {предыдущий символ} |  
    | end; |  |  
    | if Tru then |  |  
    | WriteLn('Правильная строка') |  |  
    | else |  |  
    | WriteLn('Неправильная строка') |  |  
    | end. |  |  
 
 |