![]()
|
||||||||||||||||||
Множественный типМножественный тип Множество представляет собой все возможные сочетания элементов некоторого базового типа плюс пустое множество. Эти комбинации определяются автоматически. Для работы с элементами множеств используются квадратные скобки. Например, если задан базовый ограниченный тип 1..3, то из него можно получить следующие множества: [ ], [1], [2], [3], [1,2], [1,3], [2,3], [1,2,3]. Множества, отличающиеся только порядком следования элементов множества считаются одинаковыми. Типом элементов множества может быть любой простой тип кроме вещественного; для целого типа можно задавать только диапазон. Задание множества осуществляется следующим образом: < Имя > = SET OF < базовый тип > множества Пример: Type number = 1..3; komb = set of number; logic= set of boolean; bukva = set of ‘A’ .. ‘Z’; operator = set of ( Minus, Plus);
Var a: bukva; b: komb; c: operator; Примеры операторов присвоения: c : = [Minus, Plus]; a := [ ‘A’..’D’, ‘S’, ‘Y’]; b := []; Операции над множествами - это обычные операции теории множеств и математической логики:
Результатом операции объединения, разности, пересечения является соответствующее множество, остальные операции дают результат логического типа. Рассмотрим результаты операций над однотипными множествами S1 и S2 на следующем примере. Пусть заданы цвета радуги следующим образом. Type primcolor = (красный, оранжевый, желтый, зеленный, голубой, синий, фиолетовый); сolor = set of primcolor; Var S1, S2: color; Пусть значения S1 и S2 будут следующие: S1:=[ красный, желтый, зеленный ]; S2:=[ зеленный, голубой]; 1) Объединение S1 + S2: результатом будет множество содержащее элементы, принадлежащие либо S1, либо S2, либо тому и другому. S:= S1 + S2; результат - [красный, желтый, зеленный, голубой] или S:= [красный, желтый, зеленный] + [зеленный, голубой]; 2) Пересечение S1 * S2: результат - множество содержащее элементы, принадлежащие как S1, так и S2. S:= S1 * S2; результат - [зеленный] 3) Разность S1 - S2: результат - множество содержащее элементы из S1, которые не принадлежат S2. S:= S1 - S2; результат - [красный, желтый].
Приоритеты выполнения операций: пересечение, объединение, разность. Результатом операций отношений является либо TRUE, либо FALSE. 4) Равенство S1= S2 - TRUE, если множества совпадают (т.е. содержат одни и те же элементы), иначе FALSE. [ красный, желтый, зеленный ]=[ зеленный, голубой]; результат – FALSE. 5) Неравенство S1<>S2 - TRUE, если множества не совпадают (т.е. отличаются хотя бы одним элементом), иначе FALSE. [ красный, желтый, зеленный ]<>[ зеленный, голубой]; результат – TRUE. 6) Включение множеств: S1<= S2 - TRUE, если все элементы S1 принадлежат S2. [ красный, желтый, зеленный ]<=[ зеленный, голубой]; результат – FALSE. S1>= S2 - TRUE, если все элементы S2 принадлежат S1. [ красный, желтый, зеленный ]<=[ зеленный, голубой]; результат – FALSE. 7) Проверка принадлежности: х in S1 - TRUE, если элемент х входит в S1 (тип х должен быть таким же, что и базовый тип). X:=[зеленный]; [зеленный] in [ красный, желтый, зеленный ]; результат - TRUE.
Пример: вывести на экран в обратном порядке все простые числа от 2 до 201. Решето Эратосфена. СА - множество анализируемых чисел РС - множество простых чисел Type mn = set of 2..201; Var CA, PC : mn; p, k : integer; begin CA:= [ 2..201 ]; PC:= []; p:= 2; REPEAT while not ( P in CA ) do p:= p+1; PC:= PC+[p], {включение р в результирующее мн-во Р -> РС.}; K:= P; REPEAT CA:= CF-[K]; {из СА, исключение К и всех кратных ему чисел из исходного множества} K:= K+P unti 1 K>201; unti 1 CA=[ ] for K:=201 down to 2 do if K IN PC then write (K:5) end.
|
||||||||||||||||||
|