К множественным величинам применимы операции: тождественность (=),
нетождественность (<>), содержится в (<=), содержит (>=). Результат
выполнения этих операций имеет логический тип, например:
['A','B'] = ['A','C'] даст FALSE
['A','B'] <> ['A','C'] даст TRUE
['B'] <= ['B','C'] даст TRUE
['C','D'] >= ['A'] даст FALSE.
Кроме этих операций для работы с величинами множественного типа в
языке ПАСКАЛЬ используется операция
in
проверяющая принадлежность элемента базового типа, стоящего слева
от знака операции, множеству, стоящему справа от знака операции.
Результат выполнения этой операции - булевский. Операция проверки
принадлежности элемента множеству часто используется вместо операций
отношения, например:
A in ['A', 'B'] даст TRUE,
2 in [1, 3, 6] даст FALSE.
При использовании в программах данных множественного типа
выполнение операций происходит над битовыми строками данных. Каждому
значению множественного типа в памяти ЭВМ соответствует один двоичный
разряд. Например, множество
['A','B','C','D']
представлено в памяти ЭВМ битовой строкой
1 1 1 1.
Подмножества этого множества представлены строками:
['A','B','D'] 1 1 0 1
['B','C'] 0 1 1 0
['D'] 0 0 0 1
Величины множественного типа не могут быть элементами списка вво-
да - вывода.
В каждой конкретной реализации транслятора с языка ПАСКАЛЬ
количество элементов базового типа, на котором строится множество,
ограничено. В TURBO PASCAL количество базовых элементов не должно
превышать 256.
Инициализация величин множественного типа производится с помощью
типизированных констант:
const seLit: Set of 'A'..'D'= [];
Проиллюстрируем применение данных множественного типа на примере.
Пример. Составить программу, которая вырабатывает и выводит на
экран дисплея наборы случайных чисел для игры в "Спортлото 5 из 36".
Для заполнения каждой карточки спортлото необходимо получить набор
из пяти псевдослучайных чисел. К этим числам предъявляются два требования:
- числа должны находиться в диапазоне 1..36;
- числа не должны повторяться.
Program Lotto;
var
nb, k: Set of 1..36;
kol, l, i, n: Integer;
begin
Randomize;
WriteLn('ВВЕДИ kol');
ReadLn(kol);
nb:=[1..36];
for i:=1 to kol do
begin
k:=[];
for l:=1 to 5 do
begin
repeat
n:=Random(36)
until (n in nb) and not (n in k);
k:=k+[n];
Write(n:4)
end;
WriteLn
end
end.