Песни о Паскале | страница 145
В Паскале предусмотрены три известные вам вычислительные операции с множествами, а также сравнение множеств и проверка на вхождение элемента в множество.
Вычислительные операции – объединение, пересечение и вычитание – записывают на Паскале так:
> SN2:= [3, 7] + [5, 2]; { объединение = [2, 3, 5, 7] }
> SN2:= [2..10] * [8..20]; { пересечение = [8, 9, 10] }
> SN2:= [2..10] – [8..20]; { разность = [2..7] }
Множества, объединенные знаками операций и круглыми скобками, образуют выражение, например:
> SN2:= (SN1 + [0..15]) * SN2;
Выражения, составленные из множеств, очень похожи на выражения из чисел, но вычисляются по другим правилам. Это обманчивое сходство может спровоцировать ошибку – смешение в одном выражении чисел и множеств. Предположим, вы хотите добавить к множеству число, содержащееся в переменной K. Следующее выражение будет неверным.
> SN1:= SN1 + K; { сложение множества с числом – ошибка }
Правильно будет так:
> SN1:= SN1 + [ K ]; { добавляется множество из одного элемента }
Разумеется, за ошибками такого рода присматривает компилятор, проверьте его реакцию на практике.
Множества можно сравнивать между собой, получая в результате булево значение – TRUE или FALSE.
Два множества равны, если содержат одни и те же элементы.
>if SN1 = SN2 then … else …
Множества неравны, если одно из них содержит, хотя бы один элемент, которого нет в другом.
>if SN1 <> [15, 17, 19] then … else …
Проверка на подмножество (<=) отвечает на вопрос: все ли элементы первого множества входят во второе?
>if SN1 <= SN2 then … else …
Проверкой на надмножество (>=) выясняют, все ли элементы второго множества входят в первое.
>if SN1 >= SN2 then … else …
Входит ли некоторый элемент в множество? Это можно выяснить так:
>var N : byte; S : set of byte;
> ...
> if ([N] * S) <> [] then { N входит в S } else { не входит }
Понятно, что, если число N входит в множество S, то пересечение [N]*S не будет пустым. Но проще выяснить это операцией IN – она введена специально для этого. Операция дает TRUE, если значение перечислимого типа входит в данное множество, например:
> if N in S then { N входит в S } else { не входит }
> if 20 in S then { 20 входит в S } else { не входит }
Вернемся к временно покинутому директору Семену Семеновичу. Напомню стоящую перед нами задачу: есть текстовый файл, каждая строка которого содержит список номеров учеников, состоящих в некотором кружке.