30 Вопрос
Множества
Множественный тип данных в языке Паскаль соответствует математическому представлению о множествах: это ограниченная совокупность различных элементов. Множество создается на основе элементов базового типа, он может быть перечисляемым, интервальным или byte. В множестве не может быть более 256 элементов.
Множество описывается с помощью служебных слов set of:
type имя_типа = set of базовый_тип;
Примеры:
type Caps = set of 'A' .. 'Z';
Colors = set of (RED, GREEN, BLUE);
Numbers = set of byte;
Принадлежность переменных к множественному типу может быть определена прямо в разделе описания переменных, например:
var oct : set of 0 .. 7;
Константы множественного типа записываются в виде заключенной в квадратные скобки последовательности элементов или интервалов базового типа, разделенных запятыми, например:
['A', 'D'] [1, 3, 6] [2, 3, 10 .. 13].
Константа вида [ ] означает пустое подмножество.
Тип "множество" задает набор всех возможных подмножеств его элементов, включая пустое. Если базовый тип, на котором строится множество, имеет k элементов, то число подмножеств, входящих в это множество, равно 2k.
Переменная множественного типа содержит одно конкретное подмножество значений множества. Пусть имеется переменная bинтервального типа:
var b : 1 .. 3;
Эта переменная может принимать три различных значения: 1, 2 или 3. Переменная m множественного типа
var m : set of 1 .. 3;
может принимать восемь различных значений:
[ ] [1] [2] [3] [1, 2] [1, 3] [2, 3] [1, 2, 3]
Порядок перечисления элементов базового типа в константах безразличен.
Операции над множествами
Величины множественного типа не могут быть элементами списка ввода-вывода. Допустимые операции над множествами перечислены в таблице:
Знак Название Математическая запись Результат
:= присваивание
+ объединение множество
* пересечение множество
- дополнение \ множество
= тождественность = логический
<> нетождественность логический
<= содержится в логический
>= содержит логический
in принадлежность логический
Пример 2
Рассмотрим примеры применения операций.
Пусть задано множество, основанное на значениях прописных латинских букв:
type Caps = set of 'A' .. 'Z';
var a, b, c : Caps;
begin
a := ['A', 'U' .. 'Z'];
b := [ 'M' .. 'Z'];
c := a; { присваивание }
c := a + b; { объединение, результат ['A', 'M' .. 'Z'] }
c := a * b; { пересечение, результат ['U' .. 'Z'] }
c := b - a; { вычитание, результат ['M' .. 'T'] }
c := a - b; { вычитание, результат ['A'] }
if a = b then writeln ('тождественны'); { не выполнится }
if a <> b then writeln ('не тождественны'); { выполнится }
if c <= a then writeln ('c содержится в а'); { выполнится }
if 'N' in b then writeln ('в b есть N'); { выполнится }
end.
