Множество является одним из фундаментальных математических понятий. К операциям и отношениям со множествами сводится большинство математических моделей. Паскаль — один из немногих языков, который имеет встроенные средства для работы со множествами. В отличии от математики, Паскаль использует конечные множества, причем не боле 256 элементов.
Все элементы множества должны быть одного порядкового типа (например, integer, word, longint).
Примеры обозначения множеств:
[1,2,3]
[] -– пустое множество
[2+х, 8-3] -– множество может быть задано выражением.
Все значения множества представляются в памяти последовательностями битов одинаковой длины.
Операции над множествами сводятся к поразрядным логическим операциям над последовательностями битов. Например, объединение множеств выполняется путем поразрядного логического сложения битов.
Объединение множеств х -у
х: 0110000010
у:0111111000
х — -у: 1101111010
Множества в Паскале —— это наборы однотипных, логически связанных между собой объектов, которые рассматриваются как единое целое. Причем характер связи подразумевается программистом и никак не контролируется Паскалем. Например, множество согласованных букв кириллицы- множество простых чисел от 1 до 100.
Каждый объект в множестве называется —элементом множества. —Все элементы множества должны принадлежать к одному из скалярных типов. Этот тип называется —базовым типом.Базовый тип задается диапазоном или перечислением. Если множество не имеет элементов, оно называется —пустым —([]).
Для изображения множеств используют квадратные скобки, в которые заключается перечень элементов.
Пример -1:
type — — color=(white, red, black)-
Number=set of 1..31- —{явное —описание}
Var — — — — col: set of color- —{неявное —описание}
nl, n2: number- letter: set of char- —{неявное —описание}
Попытка присвоить недопустимый символ вызовет прерывание.
В Паскале разрешены следующие операции над множествами: сравнения (=, <- >-, >- =, <- =), n (and), u (or), разность множеств (-), включение в множество — -in.
«=» два множества равны тогда и только тогда, когда они имеют одинаковые элементы. Порядок следования роли не играет.
«<->-» два множества не равны, если они отличаются хотя бы одним элементом.
«>-=» используется для определения принадлежности одного множества – другому. A>-=B, значит все элементы множества B содержатся в множестве A.
«in» используется для проверки принадлежности какого-либо значения множеству. Пусть — — — — х~а’, y=’z’, В — множество символов ‘а’..’п’. Тогда х in В true, у in В-false.
Обычно операция in используется в условном операторе. Например, вместо:
If (a=l) or (а=5) or (а=7) or (а=11) or (а=15) then…,
можно записать: —if a in [ 1,5,7,11,15] then…,
т. е. «in» позволяет более эффективно производить сложные проверки условий. При этом множество не обязательно предварительно описывать в разделе описаний.
Если необходимо проверить, не принадлежит ли п множеству А, можно
записать: —Not (n in А) —(неверно: —n Not in А).
Объединение множеств -, «+». —Объединением двух множеств является третье множество, содержащее элементы обоих множеств (выполняется путем поразрядного логического сложения).
Пусть А:=[ 1,2,3], В:=[4,5], С=А+В, тогда С[1,2,3,4,5].
Пересечение множеств ?, «*» — содержит элементы, входящие одновременно в оба множества.
Пусть А:=[1,2,3], В:=[1,4,2,5], тогда А*В=[1,2].
Разность множеств «-» — третье множество, которое содержит элементы первого множества, не входящие во второе:
Пусть А := [1,2,3,4], В:= [3,4,1], тогда А-В=[2].
Преимущества использования типа set: значительно упрощаются сложные условия в операторе if, увеличивается степень наглядности, экономятся память, время компиляции и выполнения.
Отрицательные стороны: отсутствуют средства ввода-вывода элементов.
Пример 2.
Заполнить мн
ожество A путем ввода n значений: const — — — n=20- var — — — — — -A: set of 1 ..200-
j, х : byte-
begin — — — A:=[]-
for j := 1 to n do
begin
readln(x)-
A:=A+[x]
end-
for x := 1 to 200 do
if x in A then writeln(x)-
end-
|