Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по информатике все.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
986.62 Кб
Скачать

4.2. Множества

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

Значениями типа множества, так же, как и массива, являются значения одного базового типа, однако, в отличие от массива множество может содержать любое количество различных элементов базового типа. Рассмотрим множество, состоящее из трех элементов [1, 2, 5]. В этом множестве можно выделить восемь подмножеств:

- с одним элементом: [1], [2], [5]; - с двумя элементами: [1, 2], [1, 5], [2, 5]; - с тремя элементами: [1, 2, 5]; - пустое: [].

В общем случае для множества, содержащего N элементов, можно выделить 2N подмножеств. Паскаль позволяет определить переменную типа множества, значением которой может быть одно из рассмотренных подмножеств базового типа [1, 2, 5], следующим образом:

var X : set of (1, 2, 5);

При объявлении типа множества всегда указывается тип базового множества, т.е. тот скалярный тип, из элементов которого составлено множество. Обычно используются перечисляемые и интервальные типы. Количество элементов базового множества может меняться в пределах от 0 до 255, например:

type

Tbm1 = set of 0..63; Tbm2 = set of 'A'..'Z';

var

X1, X2: Tbm1; Y1, Y2: Tbm2;

. . .

X1 := [0..3, 5, 20, 40]; {подмножество состоит из элементов 0, 1, 2, 3, 5, 20, 40} X2 := [5, 7]; Y1 := ['A', 'D', 'Z']; Y2 := []; {пустое множество}

Как следует из примера, подмножество в программе задается перечислением входящих в него элементов базового множества, заключенных в квадратные скобки. В качестве элементов базового множества можно указывать переменные и выражения, значения которых имеют тип базового множества, например: пусть I = 3, J = 6, тогда [I..J-1, J+1..20] - подмножество [3..5, 7.. 20] базового множества типа Tbm1.

4.2.2. Операции над множествами

В Паскале определены следующие операции, позволяющие получить новое подмножество из двух данных:

+

-

объединение; результат содержит все элементы объединяемых подмножеств, одинаковые элементы не повторяются, например:

X1 + X2 содержит [0, 1, 2, 3, 5, 7, 20, 40];

*

-

пересечение; результат содержит элементы, принадлежащие одновременно обоим подмножествам, например:

X1 * X2 содержит [5];

-

-

разность; результат содержит элементы первого подмножества, которые не входят во второе, например:

X1 - X2 содержит [0, 1, 2, 3, 20, 40].

Существуют операции, позволяющие сравнивать подмножества. Результатом являются значения TRUE и FALSE.

=

-

проверка на равенство; два подмножества считаются равными, если они состоят из одних и тех же элементов, например:

['A'..'C'] = ['B', 'C', 'A'] возвращает TRUE;

['A'..'C'] = ['A'..'D'] возвращает FALSE;

<>

-

проверка на неравенство, например:

['A'..'C'] <> ['B', 'C', 'A'] возвращает FALSE;

['A'..'C'] <> ['A'..'D'] возвращает TRUE;

<=

-

проверка принадлежности, например:

[1..4] <= [0..21] возвращает TRUE;

[0..21] <= [1..4] возвращает FALSE;

>=

-

проверка принадлежности, например:

[1..4] >= [0..21] возвращает FALSE;

[0..21] >= [1..4] возвращает TRUE;

in

-

проверка принадлежности символа подмножеству, например:

20 in X1 возвращает TRUE;

'D' in ['A'..'C'] возвращает FALSE.

Используя рассмотренные операции, можно записывать выражения. Установлен следующий порядок выполнения операций по убыванию приоритетов:

*, +, -, in, =, <>, <=, >=.

Рассмотрим пример выражения:

C1 in (['A'..'D']+['I'..'N']) * ['B', C2, 'M']

Значение этого выражения зависит от значений переменных C1, C2 типа Char:

для C1 = 'B' выражение всегда возвращает TRUE; для C1 = 'A' выражение возвращает FALSE, если C2 <> 'A' и TRUE , если C2 = 'A'.

Заметим, что выражение

C1 in ['A'..'Z'] эквивалентно выражению ( C1 >= 'A' ) and ( C1 <= 'Z' ).