Множество в Паскаль

Множество – это набор взаимосвязанных по какому-либо признаку или группе признаков однотипных элементов. Множественный тип в Паскаль относится к структурированным типам данных.

Каждый отдельный элемент может входить в структуру только один раз. Считается, что элементы множества являются неупорядоченными.

Для описания множественного типа используется следующая конструкция:

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]}