Множество в Паскаль
Множество – это набор взаимосвязанных по какому-либо признаку или группе признаков однотипных элементов. Множественный тип в Паскаль относится к структурированным типам данных.
Каждый отдельный элемент может входить в структуру только один раз. Считается, что элементы множества являются неупорядоченными.
Для описания множественного типа используется следующая конструкция:
type <имя типа> = set of базовый тип
Множество формируется на основе базового типа. Базовым типом в PascalABC.NET может быть любой тип данных, в том числе строковой.
Множественный тип может быть задан, в том числе, без предварительного описания, например:
- type
- colorSet = set of (red, green, blue);
- strSet = set of string;
- var
- colS: colorSet;
- examS: strSet;
- digS, numS: set of integer;
- letterS: set of char;
Переменная типа множество может включать в себя несколько значений базового типа, при этом каждый элемент входит в структуру только один раз. Значение типа множество формируется с помощью конструкции следующего вида:
[список значений]
Списком значений могут быть перечисленные через запятую, выражения базового типа или их диапазоны (для порядковых типов) в виде a..b. Если список значений пуст, то множество пустое. По присваиванию пустое множество является совместимым множеством любого типа.
- examS := ['Информатика', 'Математика', 'Физика'];
- digS := [1..7];
- numS := [1..3, 5, 7];
- colS := [];
Для добавления элементов к множеству используется:
- стандартная процедура Include (sSet, x)
- конструкция sSet += [x]
Для удаления элементов из множества используется:
- стандартная процедура Exclude (sSet, x)
- конструкция sSet -= [x]
Операции над множествами
Над множествами в в PascalABC.NET определены операции объединение, пересечение, разность, группа операций отношения, операция in.
Операции отношения:
- = (равенство): два множества считаются равными, если они совпадают, причем порядок элементов в сравниваемых множествах значения не имеет;
- <> (неравенство): два множества считаются не равными, если они не совпадают: отличаются по количеству элементов или по значению хотя бы одного элемента;
- >= (нестрого содержит): результат А >= В, равен true, если все элементы В содержатся в А;
- <= (нестрогое вложение): результат А <= В, равен true, если все элементы A содержатся в B;
- > (строго содержит): результат А > В, равен true, если все элементы В содержатся в А и при этом множество А содержит хотя бы на один элемент больше;
- < (строгое вложение): результат А < В, равен true, если все элементы A содержатся в В и, при этом, множество В содержит хотя бы на один элемент больше;
Например (в этом и следующих примерах: digS = [1..7], numS = [1..3, 5, 7]):
writeln(digS > numS); результат True
Операция in применяется для проверки принадлежности элемента множеству. Обычно данная операция используется с условным оператором, например:
- if 'Информатика' in examS then
- writeln('YES')
- else
- writeln('NO');
Операция объединение +: результатом объединения двух множеств является множество, в котором содержаться элементы обоих множеств, например:
- numS := numS + digS;
- writeln(numS); { numS = [7,6,5,4,3,2,1] }
Операция пересечение *: результатом пересечения двух множеств является множество, в котором содержится элементы, входящие одновременно в оба множества, например:
- numS := numS * digS;
- writeln(numS); { numS = [5,3,2,1,7] }
Операция разность —: результатом разности двух множеств является множество, в котором содержится элементы первого множества, не входящие во второе множество.
- digS := digS - numS;
- writeln(digS); {digS = [4,6]}