Множества определение размещение в памяти операции процедуры и функции над множествами delphi
От рассмотрения простых типов данных переходим к более сложным наборам данных. Следует вспомнить, что простые типы данных позволяют хранить одно-единственное значение в одной переменной. Структуры данных позволяют хранить сразу несколько значений, причём некоторые такие структуры теоретически вообще не имеют ограничения на количество значений - этот предел определяется лишь объёмом доступной памяти. Сегодня мы поговорим о множествах.
Математическое понятие множества
Вспомним, как определяется множество в математике. Множество - это конечный или бесконечный набор определённых объектов, мыслимый как единое целое. Множество характеризуется своими элементами, а элементы имеют лишь одно свойство - принадлежность к данному множеству. Таким образом, мы можем только сказать, принадлежит элемент данному множеству или не приналдежит. Порядок расположения элементов в множестве никакой роли не играет.
Множества в Delphi
Понятие множества в языке программирования несколько отличается от математического определения этого понятия, но смысл сохраняется. Основное отличие в том, что в программировании множество может содержать только конечное число элементов, т.е. не может состоять из бесконечного числа объектов. В математике же последнее допустимо. Например, мы можем определить множество натуральных чисел, которое бесконечно: N =
Следует понимать, что множество не предназначено для хранения каких-либо значений (чисел, символов и т.д.) - оно лишь может дать нам ответ на вопрос: присутствует конкретный элемент в множестве или его там нет.
Перейдём ближе к делу. Множество может быть построено на основе перечислимого типа данных (кто забыл - открываем предыдущий урок). Например, на основе символьного типа Char. По-английски множество называется set ( набор ) и именно этим словом описывается в Delphi :
В данном примере мы объявили множество A на основе символьного типа Char.
Запомните: множество не может состоять более чем из 255 элементов!
Например, следующее описание:
приведёт к ошибке " Set base type out of range ".
В математике множество обычно записывается в виде фигурных скобок, в которых через запятую перечисляются элементы, принадлежащие множеству. В Delphi вместо фигурных скобок используются квадратные.
Чтобы задать множество, мы можем воспользоваться операцией присваивания, где слева стоит переменная-множество, а справа - нужный нам набор. Например, в описанное выше множество A мы хотим поместить элементы-символы A, B, C, D. Тогда это запишется так:
Теперь множество A содержит 4 элемента.
Если вспомнить, что тип данных Char упорядочен, то данную запись можно сократить следующим образом:
Мы просто указали диапазон значений, который должен находиться во множестве. Результаты одинаковый, но вторая запись короче и красивее. Допустимы, конечно же, комбинации диапазонов и отдельных значений:
Помните, что множество - это виртуальный набор элементов: множество нельзя ввести с клавиатуры и точно так же нельзя вывести на экран. Поэтому добавление элементов во множество делается только программным путём. Безусловно, вы каким-либо образом можете связать элементы интерфейса программы и операцию добавления элементов во множество, но напрямую ввести множество нельзя. Аналогично, вы можете показать множество на экране с помощью каких-либо элементов (например, флажков TCheckBox), но само множество "в чистом виде" вывести нельзя.
Операции над множествами
В программировании, как и в математике, над множествами допустимы некоторые операции. Рассмотрим их.
Находится ли элемент во множестве?
Самая простая операция, для понятия смысла которой даже не нужно задумываться. Чтобы проверить, входит ли элемент во множество, следует использовать специальную конструкцию с оператором in . Слева от него указывается элемент, справа - множество. Результатом, как несложно догадаться, является логичное значение - истина или ложь. True - элемент принадлежит множеству, False - не принадлежит:
Если есть два множества, определённые на одном и том же типе данных, то их можно объединить и получить таким образом новое множество.
Если изобразить множества в виде кругов, причём круги пересекаются в том случае, если у множеств есть одинаковые элементы, то объединение можно изобразить следующим образом:
В словесном описании операция объединения - результирующее множество содержит все те элементы, которые есть хотя бы в одном из двух исходных множеств.
Объединение записывается знаком плюс " + ". Пример:
Включение одного элемента во множество делается точно таким же образом, просто в этом случае включаемое множество содержит всего один элемент.
Операция пересечения формирует множество только из тех элементов, которые одновременное присутствуют как в первом, так и во втором исходном множестве. Операция пересечения графически:
Пересечение обозначается звёздочкой " * ". Пример:
Операция вычитания удаляет из первого множества те элементы, которые есть во втором множестве:
Следует обратить внимание, что порядок множеств в данном случае важен, т.е. X-Y и Y-X - это разные множества.
Применение множеств
Множества находят широкое применение. С помощью множеств удобно задавать набор опций, каждая из которых либо включена, либо выключена. К примеру, поместите на форму кнопку (TButton), перейдите в инспектор объектов, разверните свойство Font (шрифт) и найдите свойство Style. Вот это свойство как раз и реализовано множеством. Во множестве 4 элемента: fsBold, fsItalic, fsUnderline и fsStrikeOut, каждый из которых отвечает за стиль шрифта. Принадлежность элементов ко множеству задаётся указанием значения True или False для каждого из этих пунктов. В строке "Style" находится описание данного множества. Попробуйте изменять стиль и посмотреть, как меняется описание множества Style.
А теперь давайте сделаем простенький интерфейс для доступа к этому свойству. Пусть будет меняться стиль шрифта у этой кнопки (Button1). Поместим на форму 4 TCheckBox - для доступа ко всем значениям и дадим им соответствующие имена. Изменение стиля будем делать при нажатии на саму эту кнопку. Пример реализации:
Чтобы не повторять везде одно и то же "Button1. Font .", эту часть кода можно, что называется, вынести за скобку при помощи специального оператора with . Ранее речь о нём не шла, однако этот оператор очень удобен. Смысл его прост: то, что вынесено вперёд, автоматически применяется ко всему, что находится внутри данного блока. В нашем случае будет так:
Согласитесь, так гораздо удобнее. Используйте оператор with как можно чаще - с его помощью и код по объёму становится меньше и скорость работы увеличивается.
У большинства компонент среди свойств можно найти множества. Например, у диалога открытия файла TOpenDialog (вкладка Dialogs) множеством представлено свойство Options, которое содержит приличное число элементов:
Вы спросите - а что это за названия элементов у множеств? Ответ прост - это специально объявленный перечислимый тип данных, на основе которого и создано множество. Если немного покопать, то можно найти описание этого типа:
Как видите, ничего сверхестественного здесь нет - вам всё уже знакомо.
Заключение
Сегодня мы познакомились с множествами - наборами элементов. С помощью множеств реализованы свойства многих компонент. Множества не дают возможности хранить какие-либо значения - они просто позволяют создавать наборы из значений перечислимых типов данных. Но во многих случаях использование множеств - лучший и самый быстрый способ хранения некоторого набора параметров.
От рассмотрения простых типов данных переходим к более сложным наборам данных. Следует вспомнить, что простые типы данных позволяют хранить одно-единственное значение в одной переменной. Структуры данных позволяют хранить сразу несколько значений, причём некоторые такие структуры теоретически вообще не имеют ограничения на количество значений - этот предел определяется лишь объёмом доступной памяти. Сегодня мы поговорим о множествах.
Операторы отношения
Операции отношения применяются к двум множествам, результате операции - логическое значение FALSE или TRUE.
- = оператор эквивалентности. Результат сравнения равен TRUE, если множества содержат одни и те же элементы, и FALSE в противном случае.
- <> оператор неэквивалентности. Результат сравнения равен TRUE, если множества отличаются хотя бы одним элементом, и FALSE - если множества содержат одни и те же элементы (то есть равны).
- >= оператор включающего множества. Результат операции равен TRUE, если все элементы второго множества принадлежат и первому множеству.
- in - оператор, с помощью которого можно проверить, входит ли какой- либо элемент в множество. Если входит, то результат равен TRUE, если не входит - FALSE.
Конструкция с оператором in записывается так: слева указывается элемент, затем оператор in и, наконец, множество. Например,
Orange in M
Поскольку элемент Orange принадлежит множеству N, то результат операции равен TRUE.
А эта проверка закончится неудачно:
Yellow in M,
так как элемент Yellow принадлежит множеству N, но не M.
Эта операция очень часто используется для сокращения записи длинных условий в логических условиях. Пусть нам нужно проверить, что некоторое число от 1 до 10 является простым. Мы можем записать так:
Но с оператором in эта проверка гораздо понятнее:
Заключение
Сегодня мы познакомились с множествами - наборами элементов. С помощью множеств реализованы свойства многих компонент. Множества не дают возможности хранить какие-либо значения - они просто позволяют создавать наборы из значений перечислимых типов данных. Но во многих случаях использование множеств - лучший и самый быстрый способ хранения некоторого набора параметров.
Автор: Ерёмин А.А.
Статья добавлена: 18 июля 2008
Зарегистрируйтесь/авторизируйтесь,
чтобы оценивать статьи.
Применение множеств
Множества находят широкое применение. С помощью множеств удобно задавать набор опций, каждая из которых либо включена, либо выключена. К примеру, поместите на форму кнопку (TButton), перейдите в инспектор объектов, разверните свойство Font (шрифт) и найдите свойство Style. Вот это свойство как раз и реализовано множеством. Во множестве 4 элемента: fsBold, fsItalic, fsUnderline и fsStrikeOut, каждый из которых отвечает за стиль шрифта. Принадлежность элементов ко множеству задаётся указанием значения True или False для каждого из этих пунктов. В строке "Style" находится описание данного множества. Попробуйте изменять стиль и посмотреть, как меняется описание множества Style.
А теперь давайте сделаем простенький интерфейс для доступа к этому свойству. Пусть будет меняться стиль шрифта у этой кнопки (Button1). Поместим на форму 4 TCheckBox - для доступа ко всем значениям и дадим им соответствующие имена. Изменение стиля будем делать при нажатии на саму эту кнопку. Пример реализации:
Чтобы не повторять везде одно и то же "Button1. Font .", эту часть кода можно, что называется, вынести за скобку при помощи специального оператора with . Ранее речь о нём не шла, однако этот оператор очень удобен. Смысл его прост: то, что вынесено вперёд, автоматически применяется ко всему, что находится внутри данного блока. В нашем случае будет так:
Согласитесь, так гораздо удобнее. Используйте оператор with как можно чаще - с его помощью и код по объёму становится меньше и скорость работы увеличивается.
У большинства компонент среди свойств можно найти множества. Например, у диалога открытия файла TOpenDialog (вкладка Dialogs) множеством представлено свойство Options, которое содержит приличное число элементов:
Вы спросите - а что это за названия элементов у множеств? Ответ прост - это специально объявленный перечислимый тип данных, на основе которого и создано множество. Если немного покопать, то можно найти описание этого типа:
Множества в Delphi
Понятие множества в языке программирования несколько отличается от математического определения этого понятия, но смысл сохраняется. Основное отличие в том, что в программировании множество может содержать только конечное число элементов, т.е. не может состоять из бесконечного числа объектов. В математике же последнее допустимо. Например, мы можем определить множество натуральных чисел, которое бесконечно: N =
Следует понимать, что множество не предназначено для хранения каких-либо значений (чисел, символов и т.д.) - оно лишь может дать нам ответ на вопрос: присутствует конкретный элемент в множестве или его там нет.
Перейдём ближе к делу. Множество может быть построено на основе перечислимого типа данных (кто забыл - открываем предыдущий урок). Например, на основе символьного типа Char. По-английски множество называется set (набор) и именно этим словом описывается в Delphi:
В данном примере мы объявили множество A на основе символьного типа Char.
Запомните: множество не может состоять более чем из 255 элементов!
Например, следующее описание:
приведёт к ошибке "Set base type out of range".
Задание множеств
В математике множество обычно записывается в виде фигурных скобок, в которых через запятую перечисляются элементы, принадлежащие множеству. В Delphi вместо фигурных скобок используются квадратные.
Чтобы задать множество, мы можем воспользоваться операцией присваивания, где слева стоит переменная-множество, а справа - нужный нам набор. Например, в описанное выше множество A мы хотим поместить элементы-символы A, B, C, D. Тогда это запишется так:
Теперь множество A содержит 4 элемента.
Если вспомнить, что тип данных Char упорядочен, то данную запись можно сократить следующим образом:
Мы просто указали диапазон значений, который должен находиться во множестве. Результаты одинаковый, но вторая запись короче и красивее. Допустимы, конечно же, комбинации диапазонов и отдельных значений:
Помните, что множество - это виртуальный набор элементов: множество нельзя ввести с клавиатуры и точно так же нельзя вывести на экран. Поэтому добавление элементов во множество делается только программным путём. Безусловно, вы каким-либо образом можете связать элементы интерфейса программы и операцию добавления элементов во множество, но напрямую ввести множество нельзя. Аналогично, вы можете показать множество на экране с помощью каких-либо элементов (например, флажков TCheckBox), но само множество "в чистом виде" вывести нельзя.
Операции над множествами
В программировании, как и в математике, над множествами допустимы некоторые операции. Рассмотрим их.
Находится ли элемент во множестве?
Самая простая операция, для понятия смысла которой даже не нужно задумываться. Чтобы проверить, входит ли элемент во множество, следует использовать специальную конструкцию с оператором in . Слева от него указывается элемент, справа - множество. Результатом, как несложно догадаться, является логичное значение - истина или ложь. True - элемент принадлежит множеству, False - не принадлежит:
Объединение множеств
Если есть два множества, определённые на одном и том же типе данных, то их можно объединить и получить таким образом новое множество.
Если изобразить множества в виде кругов, причём круги пересекаются в том случае, если у множеств есть одинаковые элементы, то объединение можно изобразить следующим образом:
В словесном описании операция объединения - результирующее множество содержит все те элементы, которые есть хотя бы в одном из двух исходных множеств.
Объединение записывается знаком плюс " + ". Пример:
Включение одного элемента во множество делается точно таким же образом, просто в этом случае включаемое множество содержит всего один элемент.
Пересечение множеств
Операция пересечения формирует множество только из тех элементов, которые одновременное присутствуют как в первом, так и во втором исходном множестве. Операция пересечения графически:
Пересечение обозначается звёздочкой " * ". Пример:
Разность множеств
Операция вычитания удаляет из первого множества те элементы, которые есть во втором множестве:
Следует обратить внимание, что порядок множеств в данном случае важен, т.е. X-Y и Y-X - это разные множества.
Математическое понятие множества
Вспомним, как определяется множество в математике. Множество - это конечный или бесконечный набор определённых объектов, мыслимый как единое целое. Множество характеризуется своими элементами, а элементы имеют лишь одно свойство - принадлежность к данному множеству. Таким образом, мы можем только сказать, принадлежит элемент данному множеству или не приналдежит. Порядок расположения элементов в множестве никакой роли не играет.
Комментарии читателей к данной статье
Цитата (antoca):
А кто-то говорит про всегда? Есть места, где их просто нужно применять, иначе получится бред, а не код.
От рассмотрения простых типов данных переходим к более сложным наборам данных. Следует вспомнить, что простые типы данных позволяют хранить одно-единственное значение в одной переменной. Структуры данных позволяют хранить сразу несколько значений, причём некоторые такие структуры теоретически вообще не имеют ограничения на количество значений - этот предел определяется лишь объёмом доступной памяти. Сегодня мы поговорим о множествах.
Статьи, похожие по тематике
Для вставки ссылки на данную статью на другом сайте используйте следующий HTML-код:
Ссылка для форумов (BBCode):
Поделитесь ссылкой в социальных сетях:
Множества в Delphi
Понятие множества в языке программирования несколько отличается от математического определения этого понятия, но смысл сохраняется. Основное отличие в том, что в программировании множество может содержать только конечное число элементов, т.е. не может состоять из бесконечного числа объектов. В математике же последнее допустимо. Например, мы можем определить множество натуральных чисел, которое бесконечно: N =
Следует понимать, что множество не предназначено для хранения каких-либо значений (чисел, символов и т.д.) - оно лишь может дать нам ответ на вопрос: присутствует конкретный элемент в множестве или его там нет.
Перейдём ближе к делу. Множество может быть построено на основе перечислимого типа данных (кто забыл - открываем предыдущий урок). Например, на основе символьного типа Char. По-английски множество называется set (набор) и именно этим словом описывается в Delphi:
В данном примере мы объявили множество A на основе символьного типа Char.
Запомните: множество не может состоять более чем из 255 элементов!
Например, следующее описание:
приведёт к ошибке "Set base type out of range".
Задание множеств
В математике множество обычно записывается в виде фигурных скобок, в которых через запятую перечисляются элементы, принадлежащие множеству. В Delphi вместо фигурных скобок используются квадратные.
Чтобы задать множество, мы можем воспользоваться операцией присваивания, где слева стоит переменная-множество, а справа - нужный нам набор. Например, в описанное выше множество A мы хотим поместить элементы-символы A, B, C, D. Тогда это запишется так:
Теперь множество A содержит 4 элемента.
Если вспомнить, что тип данных Char упорядочен, то данную запись можно сократить следующим образом:
Мы просто указали диапазон значений, который должен находиться во множестве. Результаты одинаковый, но вторая запись короче и красивее. Допустимы, конечно же, комбинации диапазонов и отдельных значений:
Помните, что множество - это виртуальный набор элементов: множество нельзя ввести с клавиатуры и точно так же нельзя вывести на экран. Поэтому добавление элементов во множество делается только программным путём. Безусловно, вы каким-либо образом можете связать элементы интерфейса программы и операцию добавления элементов во множество, но напрямую ввести множество нельзя. Аналогично, вы можете показать множество на экране с помощью каких-либо элементов (например, флажков TCheckBox), но само множество "в чистом виде" вывести нельзя.
Операции над множествами
В программировании, как и в математике, над множествами допустимы некоторые операции. Рассмотрим их.
Находится ли элемент во множестве?
Самая простая операция, для понятия смысла которой даже не нужно задумываться. Чтобы проверить, входит ли элемент во множество, следует использовать специальную конструкцию с оператором in. Слева от него указывается элемент, справа - множество. Результатом, как несложно догадаться, является логичное значение - истина или ложь. True - элемент принадлежит множеству, False - не принадлежит:
Объединение множеств
Если есть два множества, определённые на одном и том же типе данных, то их можно объединить и получить таким образом новое множество.
Если изобразить множества в виде кругов, причём круги пересекаются в том случае, если у множеств есть одинаковые элементы, то объединение можно изобразить следующим образом:
В словесном описании операция объединения - результирующее множество содержит все те элементы, которые есть хотя бы в одном из двух исходных множеств.
Объединение записывается знаком плюс "+". Пример:
Включение одного элемента во множество делается точно таким же образом, просто в этом случае включаемое множество содержит всего один элемент.
Пересечение множеств
Операция пересечения формирует множество только из тех элементов, которые одновременное присутствуют как в первом, так и во втором исходном множестве. Операция пересечения графически:
Пересечение обозначается звёздочкой "*". Пример:
Разность множеств
Операция вычитания удаляет из первого множества те элементы, которые есть во втором множестве:
Следует обратить внимание, что порядок множеств в данном случае важен, т.е. X-Y и Y-X - это разные множества.
Сколько элементов в множестве?
Иногда требуется узнать, сколько элементов содержит то или иное множество. Конечно, можно после каждой операции с множеством корректировать это число, но значительно проще написать пару строк кода и подсчитывать число элементов в нужном месте программы.
Как и следовало ожидать, i примет значение три, то есть в множестве содержится 3 элемента.
Приоритет выполнения операций
Сначала выполняется операция пересечения множеств, затем - объединения и разности, и так далее.
При работе с множествами допускается использование операций отношения (=, <>, >=, <=), объединения, пересечения, разности множеств и операции in.
Операции сравнения (=, <>). Два множества считаются равными, если они состоят из одних и тех же элементов. Порядок следования элементов в сравниваемых множествах значения не имеет. Два множества A и B считаются не равными, если они отличаются по мощности или по значению хотя бы одного элемента.
Выражение Результат
[1, 2] <> [1, 2, 3] True
[1, 2] = [1, 2, 2] True
[1, 2, 3] = [3, 2, 1] True
[1, 2, 3] = [1..3] True
Операции принадлежности (>=, <=). Выражение A >= B равно True, если все элементы множества B содержатся в множестве A. Выражение A
Операция in. Используется для проверки принадлежности элемента указанному множеству. Обычно применяется в условных операторах.
Выражение Результат
5 in [1..9] True
5 in [1..4, 6..9] False
Операция in позволяет эффективно и наглядно выполнять сложные проверки условий, заменяя иногда десятки других операций. Например, оператор
if (X = 1) or (X = 2) or (X = 3) or (X = 5) or (X = 7) then
можно заменить более коротким:
if X in [1..3, 5, 7] then
Операцию in иногда пытаются записать с отрицанием: X not in S. Такая запись является ошибочной, так как две операции следуют подряд. Правильная запись имеет вид: not (X in S).
Объединение множеств (+). Объединением двух множеств является третье множество, содержащее элементы обоих множеств.
Выражение Результат
[ ] + [1, 2] [1, 2]
[1, 2] + [2, 3, 4] [1, 2, 3, 4]
Пересечение множеств (*). Пересечение двух множеств - это третье множество, которое содержит элементы, входящие одновременно в оба множества.
Выражение Результат
[ ] * [1, 2] [ ]
[1, 2] * [2, 3, 4] [2]
Разность множеств (-). Разностью двух множеств является третье множество, которое содержит элементы первого множества, не входящие во второе множество.
Выражение Результат
[1, 2, 3] - [2, 3] [1]
[1, 2, 3] - [ ] [1, 2, 3]
В язык Delphi введены две стандартные процедуры Include и Exclude, которые предназначены для работы с множествами.
Процедура Include(S, I) включает в множество S элемент I. Она дублирует операцию + (плюс) с той лишь разницей, что при каждом обращении включает только один элемент и делает это более эффективно.
Процедура Exclude(S, I) исключает из множества S элемент I. Она дублирует операцию - (минус) с той лишь разницей, что при каждом обращении исключает только один элемент и делает это более эффективно.
Выражение Результат
S := [1, 3]; [1, 3]
Include(S, 2); [1, 2, 3]
Exclude(S, 3) [1, 2]
Использование в программе множеств дает ряд преимуществ: значительно упрощаются сложные операторы if, улучшается наглядность программы и понимание алгоритма решения задачи, экономится время разработки программы. Поэтому множества широко используются в библиотеке компонентов среды Delphi.
Математическое понятие множества
Вспомним, как определяется множество в математике. Множество - это конечный или бесконечный набор определённых объектов, мыслимый как единое целое. Множество характеризуется своими элементами, а элементы имеют лишь одно свойство - принадлежность к данному множеству. Таким образом, мы можем только сказать, принадлежит элемент данному множеству или не приналдежит. Порядок расположения элементов в множестве никакой роли не играет.
Применение множеств
Множества находят широкое применение. С помощью множеств удобно задавать набор опций, каждая из которых либо включена, либо выключена. К примеру, поместите на форму кнопку (TButton), перейдите в инспектор объектов, разверните свойство Font (шрифт) и найдите свойство Style. Вот это свойство как раз и реализовано множеством. Во множестве 4 элемента: fsBold, fsItalic, fsUnderline и fsStrikeOut, каждый из которых отвечает за стиль шрифта. Принадлежность элементов ко множеству задаётся указанием значения True или False для каждого из этих пунктов. В строке "Style" находится описание данного множества. Попробуйте изменять стиль и посмотреть, как меняется описание множества Style.
А теперь давайте сделаем простенький интерфейс для доступа к этому свойству. Пусть будет меняться стиль шрифта у этой кнопки (Button1). Поместим на форму 4 TCheckBox - для доступа ко всем значениям и дадим им соответствующие имена. Изменение стиля будем делать при нажатии на саму эту кнопку. Пример реализации:
Чтобы не повторять везде одно и то же "Button1.Font.", эту часть кода можно, что называется, вынести за скобку при помощи специального оператора with. Ранее речь о нём не шла, однако этот оператор очень удобен. Смысл его прост: то, что вынесено вперёд, автоматически применяется ко всему, что находится внутри данного блока. В нашем случае будет так:
Согласитесь, так гораздо удобнее. Используйте оператор with как можно чаще - с его помощью и код по объёму становится меньше и скорость работы увеличивается.
У большинства компонент среди свойств можно найти множества. Например, у диалога открытия файла TOpenDialog (вкладка Dialogs) множеством представлено свойство Options, которое содержит приличное число элементов.
Пусть первое множество M:= [Red, Orange], второе N:= [Orange, Yellow], а результат выполнения операции - множество S.
+ оператор объединения множеств. В результате операции получается новое множество, которое содержит по одному разу все элементы исходных множеств:
- оператор разности множеств (относительное дополнение). В результате операции получается новое множество, которое содержит элементы первого множества, не принадлежащие второму множеству:
* оператор пересечения множеств. В результате операции получается новое множество, которое содержит элементы, принадлежащие обоим множествам:
Читайте также: