Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 700269.doc
Скачиваний:
15
Добавлен:
01.05.2022
Размер:
1.78 Mб
Скачать

3.3.5. Множества

Множество – это группа элементов, которая ассоциируется с идентификатором (именем) и с которой можно сравнивать другие величины, чтобы определить: принадлежат ли они этому множеству. Один и тот же элемент не может входить в множество более одного раза. Как частный случай, множество может быть пустым. Множество определяется перечислением элементов, заключенных в прямоугольные скобки. Такая форма определения называется конструктором множества.

Например, если множество возможных единичных символов, которые могут быть получены в ответ на вопрос программы "Yes/No", содержит символы y, Y, n и N, то это множество можно описать конструктором ['y','Y','n','N']. Для определения, принадлежит ли переменная множеству, служит операция in. Например, проверить, дал ли пользователь один из допустимых ответов, можно оператором:

if (key in ['y','Y','n','N'])

then <оператор, выполняемый при допустимом ответе>

Множества могут содержать не только отдельные значения, но и ограниченные типы. Например, если необходимо контролировать символы, вводимые пользователем при вводе целого положительного или отрицательного числа, можно определить множество ['0'..'9', '+', '-'] и использовать его, например, при обработке события OnKeyPress любого окна редактирования с помощью следующего кода:

if not(Key in ['0'..'9', '+', '-']) then Key:=#0;

Подобный оператор не позволяет пользователю ввести символы, отличные от имеющихся в множестве.

В приведенных операторах множество использовалось непосредственно, заранее не объявляясь в виде типа. Но если, например, в приложении в ряде мест надо проводить проверки, аналогичные приведенным выше, то целесообразнее объявить переменную или типизированную константу типа множества или тип множества и несколько переменных этого типа. Объявление типа множества делается в форме set of <базовый тип>. Приведем примеры.

var K: set of Char=['0'..'9', '+', '-']; // Объявление

глобальной переменной с инициализацией

// Объявление типизированной константы

const K1: set of Char=['0'..'9', '+', '-'];

// Объявление типа множества

type TDigit = set of '0'..'9';

var D1, D2: TDigit; // и переменных этого типа

Далее в программе допустимы следующие операторы.

...

if ((key in K)OR(key in K1)) then ...

...

D1:=['0','1'];

D2:=['2'..'9'];

Помимо операции in для множеств определен еще ряд операций: объединение, пересечение, операции отношения и ряд других (табл. 3.5).

Таблица 3.5.

Обозначение

Операция

Типы операндов

Тип результата

Пример

+

объединение

Set

Set

Set1+Set2

разность

Set

Set

S-T

*

пересечение

Set

Set

S*T

<=

подмножество

Set

Boolean

Q<=MySet

>=

включающее множество

Set

Boolean

S1>=S2

=

эквивалентность

Set

Boolean

S2=MySet

<>

неэквивалентность

Set

Boolean

MySet<>S1

in

является элементом

порядковый, Set

Boolean

A in Set1

В указанных операциях действуют следующие правила.

  1. Z является элементом X+Y, если он является элементом X или Y, или и X, и Y.

  2. Z является элементом X-Y, если он является элементом X, но не является элементом Y.

  3. Z является элементом X*Y, если он является элементом и X, и Y.

  4. Выражение X<=Y возвращает true, если каждый элемент X является элементом Y.

  5. Выражение X>=Y эквивалентно выражению Y<=X.

  6. Выражение X=Y возвращает true, если X и Y содержат точно одни и те же элементы. В противном случае true будет возвращено выражением X<>Y.