Значение A Выражение Результат
МНОЖЕСТВА
Множества– это структурированный тип данных, представляющий на- бор взаимосвязанных по какому–либо признаку или признакам объектов, кото- рые можно рассматривать как единое целое. Каждый объект множества назы- вается элементом множества. Все элементы множества должны принадлежать одному из скалярных типов, кроме вещественного. Этот тип называется базо- вым типом множества. Базовый тип задается диапазоном или перечислением. Область значений типа множество – набор всевозможных подмножеств, со- ставленных из элементов базового типа.
Если базовый тип принимает n значений, то тип множество для него бу- дет иметь 2nвариантов значений. В выражениях на языке Turbo Pascal значе- ния элементов множества указываются в квадратных скобках: [1, 2, 3, 4], ['a', 'b',
'c', 'd'], ['a'...'z'].
Если множество не имеет элементов, оно называется пустым и обознача- ется как [ ]. Для описания множественного типа используется словосочетание Set of (множество из ...). Для задания типа множество следует указать элементы этого множества, как правило, в виде перечисления или диапазона, например:
Пример 1.
Type
Alfa = Set of 'A'..'Z';
Count = Set of (Plus, Minus, Mult, Divid); Ten = Set of 0..9;
Number=Set of'0'..'9';
Введя тип множество, можно задать переменные или типизированные
константы этого типа. При задании значений константе типа множество эле- менты константы задаются перечислением через запятую элементов, помещен- ных в квадратные скобки. Например, для введенных выше типов можно задать такие переменные и типизированные константы:
Пример 2.
Var
CharVal: Set of 'A'..'Z';
Operac: Sет of (Plus, Minus, Mult, Divid); Num: Ten;
Const
Index: Set of 0..9 = [0, 2, 4, 6, 8]; Digit: Set of '0'..'9' = ['0'..'9'];
Переменная CharVal может принимать значения 'A', 'B', 'C', ... – любое
значение от 'A' до 'Z', переменная Num может принимать значение 0, 1, 2, 3, ...,
т.е. любое значение в диапазоне 0..9. Попытка присвоить другие значения вы- зовет программное прерывание. Переменной или типизированной константе типа множество можно в программе присвоить то или иное значение. Обычно значение задается с помощью конструктора множества. Конструктор задает множество элементов с помощью перечисления в квадратных скобках выраже- ний, значения которых дают элементы множества. Допустимо использовать диапазоны элементов. Следующие структуры являются конструкторами мно- жеств (пример 3).
Пример 3.
[Plus, Minus] [1..K mod 12,15] [Cur(0)..Cur(32),'A','B']
В каждое множество включается и так называемое пустое множество [ ],
не содержащее никаких элементов. Конструктор множества можно использо-
вать и непосредственно в операциях над множествами.
Количество элементов (мощность) множества в Turbo Pascal не может быть больше 256, а порядковые номера элементов (т.е. значение функции Ord) должны находиться в пределах от 0 до 255. Контроль диапазонов осуществля- ется директивой {$R+}. Объем памяти, занимаемый одним элементом множе- ства, составляет 1 байт.
При работе co множествами Turbo Pascal допускает использование опе- раций “=”, “<>”, “>=”, “<=”, объединения (+), пересечения (*), разности (–) и операции In. Результатом выражений с применением этих операций является значение True или False, в зависимости от того, истинно это выражение или ложно.
Операция “равно” (=). Два множества A и B считаются равными, если они состоят из одних и тех же элементов. Порядок следования элементов в сравниваемых множествах значения не имеет.
Значение A | Значение B | Выражение | Результат |
[1, 2, 3, 4] | [1, 2, 3, 4] | A = B | True |
['a'..'2'] | ['b'..'2'] | A = B | False |
['a'..'2'] | ['2'..'a'] | A = B | True |
Операция “не равно” (<>). Два множества A и B считаются не равными,
если они отличаются по мощности или по значению хотя бы одного элемента.
Значение A | Значение B | Выражение | Результат |
[1, 2, 3,] ['a'..'2'] | [3, 1, 2, 4] ['6'..'2'] | A <> B A <> B | True True |
['c'..'t'] ['t'..'c'] A <> BFalse
Операция “больше или равно” (>=). Используется для определения принадлежности множества. Результат операции A >= B равен True, если все элементы множества B содержатся во множестве A. В противном случае ре- зультат равен False.
Значение A | Значение B | Выражение | Результат |
[1, 2, 3, 4] ['a'..'2'] ['z','x','c'] | [2, 3, 4] ['b'..'t'] ['c','x'] | A >= B A >= B A >= B | True True True |
Операция “меньше или равно” (<=). Используется аналогично преды- дущей операции. Результат выражения A <= B равен True, если все элементы множества A содержатся во множестве B. В противном случае результат равен False.
Значение A | Значение B | Выражение | Результат |
[1, 2, 3,] ['a'..'h'] ['a'..'v'] | [1, 2, 3, 4] ['2'..'a'] ['a','n','v'] | A <= B A <= B A <= B | True True True |
Операция In. Используется для проверки принадлежности какого-либо
значения указанному множеству. Обычно применяется в условных операциях.
Значение A Выражение Результат
2 if A in [1, 2, 3] then… True
'v' if A in ['a'..'n'] then… False
x1 if A in [x0, x1, x2, x3] then… True
При использовании операции In проверяемое на принадлежность значе- ние и множество в квадратных скобках не обязательно описывать в разделе объявлений.
Операция In позволяет эффективно производить сложные проверки ус-
ловий, заменяя иногда десятки операций. Например, выражение
if (a=1) or (a=2) or (a=3) or (a=4) or (a=4) or (a=5) then...
можно заменить более коротким
if a In [1..5] then ... .
Часто операцию In пытаются записать с отрицанием: X not In M. Такая запись является ошибочной, т. к. две операции следуют подряд: правильная конструкция имеет вид: not (X In M).
Объединение множеств (+). Объединением массивов является третье
множество, содержащее элементы обоих множеств.
Значение A | Значение B | Выражение | Результат |
[1, 2, 3] ['A'..'D'] [ ] | [1, 4, 5] ['E'..'Z'] [ ] | A + B A + B A + B | [1, 2, 3, 4, 5] ['A'..'Z'] [ ] |
Пересечение множеств (*). Пересечением двух множеств является третье множество, которое содержит элементы, входящие одновременно в оба множества.
Значение A Значение B Выражение Результат[1, 2, 3] [1, 4, 2, 5] A*B [1, 2] ['A'..'Z'] ['B'..'R'] A*B ['B'..'R']
[] [ ] A*B []
Разность множеств (–). Разностью двух множеств является третье мно- жество, которое содержит элементы первого множества, не входящие во второе множество.
Значение A | Значение B | Выражение | Результат |
[1, 2, 3, 4] ['a'..'z'] | [3, 4, 1] ['d'..'z'] | A – B A – B | [2] ['a'..'c'] |