Теоретический материал (Паскаль)
Множественный тип данных. Множество. Элемент множества. Способы задания множества. Объединение множеств. Разность множеств. Пересечение множеств
Множественный тип данных напоминает перечислимый тип данных. Вместе с тем, множество - набор элементов, не организованных в порядке следования. В математике множество - любая совокупность элементов произвольной природы. Понятие множества в программировании значительно уже математического понятия.
Определение. Под множеством в Паскале понимается конечная совокупность элементов, принадлежащих некоторому базовому типу.
В качестве базовых типов могут использоваться: перечислимые типы данных, символьный и байтовый типы или диапазонные типы на их основе.
Такие ограничения связаны с формой представления множества в языке и объясняются тем, что функция Ord для элементов используемого базового типа должна быть в пределах от 0 до 255.
Множество имеет зарезервированное слово set of и вводится следующим описанием
Type |
Рассмотрите примеры описаний множеств:
Type |
Для переменных типа множества в памяти отводится по 1 биту под каждое возможное значение базового типа. Так, под переменные Letter, Digits, Sign будет отведено по 256/8=32 байта. Для переменной Winter, базовый тип которой (Month) имеет 12 элементов, необходимо 2 байта, причем второй используется только наполовину. Если множество содержит какой-то элемент, то связанный с ним бит имеет значение 1, если нет - 0.
Для того, чтобы дать переменной множества какое-то значение, используют либо конструктор множества - перечисление элементов множества через запятую в квадратных скобках:
Sign:=['+', '-']; |
либо определение через диапазон. В этом случае в множество включены все элементы диапазона.
Digits:=['0'..'9']; |
Обратите внимание, что в определении множества Digits использованы символы в таблице ASCII-кодов, а не целые числа.
Обе формы конструирования могут сочетаться:
Vacation:=[January, February, June .. August]; |
В программах множества часто используются как константы, в этом случае их можно определить следующим образом:
{постоянное множество допустимых символов} |
Объединение множеств (+)
Определение. Объединением двух множеств называется третье множество, включающее все элементы, которые принадлежат хотя бы одному из множеств-операндов, при этом каждый элемент входит в объединение множеств только один раз.
Объединение множеств записывается как операция сложения.
Type |
В операции объединения множеств могут участвовать и отдельные элементы множества.
Например, допустима следующая запись, где два элемента и множество объединяются в новое множество:
WarmSeason := May+Summer+September; |
или другая запись
B: = B+['c']; |
которую можно применить для организации множества в цикле, если заменить множество ['c'] переменной Sym того же типа, что и множество B, и считывать с клавиатуры данные в переменную Sym, объединяя ее затем с множеством В.
B: = B+Sym; |
Разность множеств (-)
Определение. Разностью двух множеств является третье множество, которое содержит все элементы 1-го множества, не входящие во 2-е множество.
a: = a-[ 'd' ]; |
Если в вычитаемом множестве есть элементы, отсутствующие в уменьшаемом, они не влияют на результат.
Summer := WarmSeason-Spring-Autumn; |
Модуль System содержит процедуры для включения элемента в множество
Include(Var S : set of T; Element : T); |
и исключения из множества
Exclude(Var S : set of T; Element : T); |
где S - множество элементов типа Т, а Element - включаемый (или исключаемый) элемент.
Эти функции отличаются от операций объединения и вычитания множеств только тем, что генерируют более эффективный код.
Пересечение множеств
Определение. Пересечением множеств называется множество, содержащее все элементы, одновременно входящие в оба множества-операнда. Операция обозначается знаком умножения.
Summer := WarmSeason*Vacation; |