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.