Пример. Кроме того, выражения могут включать в себя операции над множествами

A: = [50, 100, 150, 200];

B: = ['m', 'n', 'k']; C: = [True, False];

D: = A;

Кроме того, выражения могут включать в себя операции над множествами.

Допустимые операции над множествами перечислены в таблице:

Знак Название Математическая запись Результат
:= присваивание    
+ объединение È множество
* пересечение Ç множество
- дополнение \ множество
= тождественность = логический
<> нетождественность ¹ логический
<= содержится в Í логический
>= содержит Ê логический
in принадлежность   логический

Объединением двух множеств A и B называется множество, состоящее из элементов, входящих хотя бы в одно из множеств A или B. Знак операции объединения в Паскале «+».

Примеры:

1) [1, 2, 3, 4] + [3, 4, 5, 6] => [1, 2, 3, 4, 5, 6]

2) []+[‘a’..’z’]+[‘A’..’E’, ‘k’] => [‘A’..’E’, ‘a’..’z’]

3) [5<4, true and false] + [true] => [false, true]

Пересечением двух множеств A и B называется множество, состоящее из элементов, одновременно входящих во множество A и во множество B.

Знак операции пересечения в Паскале «*»

Примеры:

1) [1, 2, 3, 4] * [3, 4, 5, 6] => [3, 4]

2) [‘a’..’z’]*[‘A’..’E’, ‘k’] => [‘k’]

3) [5<4, true and false] * [true] => []

Разностью двух множеств A и B называется множество, состоящее из элементов множества A, не входящих во множество B.

Примеры:

1a) [1, 2, 3, 4] - [3, 4, 5, 6] => [1, 2]

1b) [3, 4, 5, 6] - [1, 2, 3, 4] => [5, 6]

2a) [‘a’..’z’]-[‘A’..’E’, ‘k’] => [‘a’..’j’, ‘i’..’z’]

2b) [‘A’..’E’, ‘k’] - [‘a’..’z’] => [‘A’..’E’]

3a) [5<4, true and false] - [true] => [false]

3b) [true] - [5<4, true and false] => [true]

Операция вхождения. Это операция, устанавливающая связь между множеством и скалярной величиной, тип которой совпадает с базовым типом множества. Если x – такая скалярная величина, а M – множество, то операция вхождения записывается так: x in M.

Результат – логическая величина true, если значение x входит в множество M, и false – в противном случае.

Примеры:

4 in [3, 4, 7, 9] – true, 5 in [3, 4, 7, 9] –– false.

Используя данную операцию, можно не только работать с элементами множества, но и, даже если в решении задачи явно не используются множества, некоторые логические выражения можно записать более лаконично.

Примеры:

1) Натуральное число n является двухзначным. Вместо выражения (n >= 10) and (n <=99) можно записать n in [10..99].

2) Символ c является русской буквой. Вместо выражения (c >= ‘А’) and (c <= ‘Я’) or (c>=‘а’) and (c<=‘п’) or (c>=‘р’) and (c<=‘я’) пишем c in [‘А’.. ‘Я’, ‘а’.. ‘п’, ‘р’.. ‘я’] и т.д.

Добавить новый элемент в множество можно с использованием операции объединения. Пример:

a:= a+[5]

Для этих же целей в Turbo Pascal 7.0 предназначена процедура Include:

Пример:

include (M, A); M – множество, A – переменная того же типа, что и элементы множества M. Тот же пример можно записать так: Include (a, 5).

Исключить элемент из множества можно с помощью операции «разность множеств».

Пример:

a:= a-[5]

Для этих же целей в Turbo Pascal 7.0 предназначена процедура Exclude:

Пример:

exclude (M, A); M – множество, A – переменная того же типа, что и элементы множества M. Тот же пример можно записать так: Exclude (a, 5).

Задача 1. Рассмотрим примеры применения операций. Пусть задано множество, основанное на значениях прописных латинских букв:

type Caps = set of 'A'.. 'Z';var a, b, c: Caps;begin a:= ['A', 'U'.. 'Z']; b:= [ 'M'.. 'Z']; c:= a; { присваивание } c:= a + b; { объединение, результат ['A', 'M'.. 'Z'] } c:= a * b; { пересечение, результат ['U'.. 'Z'] } c:= b - a; { вычитание, результат ['M'.. 'T'] } c:= a - b; { вычитание, результат ['A'] } if a = b then writeln ('тождественны'); { не выполнится } if a <> b then writeln ('не тождественны'); { выполнится } if c <= a then writeln ('c содержится в а'); { выполнится } if 'N' in b then writeln ('в b есть N'); { выполнится }

end.

Задача 2. Дана строка. Сохранить в ней только первые вхождения символов, удалив все остальные.

program ex_set_3;

var m: set of char;

s: string; i: byte;

begin

write('Введите строку: ');

readln(s);

m:=[];

i:= 1;

while i <= length(s) do

if s[i] in m then delete(s, i, 1)

else begin m:=m+[s[i]]; i:= i + 1 end;

writeln(s)

end.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: