Множество (set)- это структурный тип данных, элементы которого образуют набор (до 255) данных одного типа, значения которых записывают через запятую и берут в квадратные скобки. С помощью множеств решают задачи определения принадлежности некоторого объекта определенному набору данных.
Над множеством определены операции объединения, пересечения, вычитания, сравнения, а также операция определения принадлежности множеству.
а + b (объединение) - множество, содержащее все элементы множеств а и b без повторений;
а * b (пересечение) - множество, содержащее элементы, входящие в множества а и Ь;
а - b (разность) - множество, состоящее из элементов, которые входят в множество а, но не входят вЬ;
=, <>, <=, >= (сравнение) - результатом сравнения является данное логического типа.
Пример. Пусть заданы множества
а = [1, 2, 3, 4, 5, 6] и Ь = [1, 2, 3, 4]. Тогда
а + b = [1, 2, 3, 4, 5, 6];
а - b = [5, 6];
а * b = [1, 2, 3, 4].
Сравнение этих множеств дает такие результаты:
а = b - false;
a <> b - true;
a >= b - true;
a <= b - false.
Порядок размещения элементов в множестве значения не имеет: [1,2,3,4] и [2,4,1,3] - это одно и то же множество. Множество, в котором нет ни одного элемента, называется пустым: [ ].
Общий вид конструкции описания типа множества такой:
type <имя типа> = set of <базовый тип>;
Базовым типом может быть символьный, перечислимый, диапазонный типы данных мощностью до 255 элементов.
Пример. Зададим постоянное множество а, опишем тип множества symbol и объявим переменные number, s и у соответствующих типов:
Const а = [1, 2, 5, 9]; {Задаем постоянное множество}
type symbol = set of char; {Описываем множество символов]
varnumber : set of 1..100; {Объявляем переменные number, s, у}
s : symbol; {соответствующих множественных типов}
у : set of (green, black, red);
Значения переменным типа множество присваивают командой
<имя переменной> := <выражение>;
Типы множества и выражения должны совпадать.
Пример. Объявленным выше переменным можно присвоить такие значения:
number := [ ]; number := [15, 12, 7, 99];
number := number + [1,2, 6, 7] * [3, 4, 6, 7] - [4, 7];
s :=[ 'S', 'T', '5', '$', '*'];
s := ['a', 'd'] * ['d'] + ['1', 'r'];
у := [red]; у := [ ], где [ ] - пустое множество.
Необходимый элемент в множестве можно найти с помощью операции in.Для определения наличия элемента в множестве используют такую конструкцию:
if<элемент базового типа> in<множество>
then<команда 1>
else<команда 2>;
Пример. Проверить, принадлежит ли число 25 множеству а=[21,4,12,25] можно так:
n := 25;
а := [21, 4, 12, 25];
ifninathenwrite('Число ', n, ' входит в множество')
else write('Числo ', n, ' в множество не входит');
Пример. Составим процедуру, которая определяет число n -количество цифр в некотором множестве символов s типа symbol.
procedurePoisk(s: symbol; var n : integer);
varcyfra : '0'..'9';
Begin
n := 0;
for cyfra := '0' to '9' do
if cyfra ins thenn := n + 1
end;
Задача 1. Менеджер компьютерного магазина-салона регулярно получает информацию о технике, которую привозят на склады А, В, С. Русским названиям изделий поставлены номера 1-9, английским - имена tl-t9. Английские имена описаны с помощью перечислимого типа tovary. Составить программу, которая дает информацию об изделиях, имеющихся в наличии на складах А или В, но которых нет на складе С.