6.5. Множество
В языке Паскаль типом-множеством называется множество-степень исходного множества объектов порядкового типа, т. е. множество всевозможных сочетаний объектов исходного множества.
Число элементов исходного множества в Turbo Pascal не может быть больше 256, а порядковые номера элементов (т. е. значение функции Ord) должны находиться в пределах от 0 до 255.
Для задания типа-множества следует использовать зарезервированные слова set и of, а затем указать элементы этого множества, как правило, в виде перечисления или диапазона, например:
type
Alfa = set of 'A'..'Z';
Count = set of (Plus, Minus, Mult, Divid);
Ten = set of 0..9;
Number = set of '0'..'9';
Введя тип-множество, можно задать переменные или типизированные константы этого типа-множества.
При задании значений константе-множеству ее элементы перечисляются через запятую (допустимо указывать диапазоны) и помещаются в квадратные скобки. Например, для введенных выше типов можно задать такие переменные и типизированные константы:
var
Charval: Alfa;
Operation: Count;
const
Index: Ten = [0, 2, 4, 6, 8];
Digit: Number = ['0'..'9'];
Примечание. Так же как и для других структурированных типов, тип-множество можно тести непосредственно при задании переменных или типизированных констант:
var
CharVal: 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. |
|
|