Множества — это наборы однотипных логически связанных друг с другом объектов. Характер связей между объектами лишь подразумевается программистом и никак не контролируется компилятором. Количество элементов, входящих в множество, может колебаться в пределах от 0 до 256 (множество, не имеет элементов, называется пустой). Именно непостоянством в количестве своих элементов множества отличаются от массивов и записей.
Два множества считаются одинаковыми (эквивалентными) тогда и только тогда, когда все их элементы одинаковы, причем порядок вхождения элементов в множества безразличен. Если все элементы одного множества входят также и в другую, говорят о включении первого множества во вторую. Пустое множество включается в любую другую.
Пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
Type digitChar = set of '0' .. '9'; digit = set of 0..9; Var s1, s2, s3: digitChar; s4, s5, s6: digit; Begin . . . . S1 = [ '1', '2', '3']; S2 = [ '3', '2', '1']; S3 = [ '2', '3']; S4 = [0..3,6]; S5 = [4,5]; S6 = [3.9]; . . . . End. |
В этом примере множества s1 и s2 эквивалентны, а множество s3 включается в s2, но не эквивалентна ей.
Описание типа множества имеет вид:
- <Имя типа> = set of <базовый тип>;
Где <имя типа> — правильный идентификатор; set и of — зарезервированные слова (множество из) <Базовый тип> — базовый тип элементов множества, в качестве которого может использоваться любой порядковый тип, кроме Word, Integer, LongInt.
Над множествами определены следующие операции:
- * Пересечения множеств; результат содержит элементы, общие для обоих множеств; например, s4 * s6 содержит [3] бы s4 * s5 — пустое множество.
- + Объединение множеств; результат содержит элементы с первого множества, дополненные недостающими элементами второго множества. s4 + s5 содержит [0,1,2,3,4,5,6], а s5 + s6 содержит [3,4,5,6,7,8,9]
- — Разность множеств; содержит элементы с первого множества, не относящихся второй. s6-s5 содержит [3,6,7,8,9], a s4-s5 содержит [0,1,2,3,6]
- = Проверка эквивалентности; возвращает True, если обе множества эквивалентны.
- <> Проверка неэквивалентности; возвращает True, если обе множества эквивалентны.
- <= Проверка вхождения; возвращает True, если первая множество включена в другую.
- => Проверка вхождения; возвращает True, если вторая множество включена в первую.
IN Проверка принадлежности; в этой бинарной операции первый элемент — выражение, а второй — множество того же типа: возвращает True, если выражение имеет значение, принадлежащее множественном числе:
- 3 in s6 возвращает true
- 2 * 2 in s1 возвращает false
INCLUDE — включает новый элемент в множество. Обращение к процедуре:
Include (S, I)
Где S — множество, состоящее из элементов базового типа TSetBase, а I — элемент типа TSetBase, который необходимо включить в множество.
EXCLUDE — исключает элемент из множества.
Exclude (S, I)
В отличие от операций + и -, реализующих аналогичные действия над двумя множествами, эти процедуры (INCLUDE и EXCLUDE) оптимизированы для работы с одиночными элементами множества и поэтому отличаются высокой скоростью исполнения.