Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Л9_2012 строки и множ_а.doc
Скачиваний:
3
Добавлен:
24.11.2019
Размер:
79.36 Кб
Скачать
  1. Тип “множество” и операции над ним

В математике множеством называют такую совокупность каких-либо объектов, называемых элементами, в которой никакие два элемента не совпадают (то есть среди них нет повторяющихся), и их порядок не имеет значения. Математическое множество может содержать любое число элементов, какой угодно природы. Для каждого множества должно существовать некое универсальное множество, в котором содержатся все элементы, представимые данным множеством. Например, про множество чисел от 1 до 10 можно было бы сказать, что оно выбрано из универсального множества "все числа от 1 до 100". Одним из способов математического обозначения множеств служит список элементов, заключенный в фигурные скобки {1,3,6}.

Множества – это наборы логически связанных друг с другом объектов. Характер связей лишь подразумевается программистом и никак не контролируется Delphi. Как и в математике, повторяющиеся элементы во множествах игнорируются.

Не имеет значения и порядок их следования. Универсальному множеству в Delphi соответствует понятие базового типа, для которого установлены определенные ограничения. Базовым может быть только простой порядковый тип, например, integer, char, (включая перечисление) или отрезок такого типа. Следует особо отметить, что элементами множеств не могут быть ни вещественные числа (поскольку real не относится к классу порядковых типов), ни строки (потому что это не простой тип, а тем более не порядковый).

Размер множеств всегда ограничен предельно допустимым количеством элементов, тогда как для математических множеств таких ограничений нет. Порядковое значение (даваемое функцией ord) каждого элемента базового типа должно лежать в диапазоне от 0 до 256. Список элементов, входящих в множество, записывают заключенным не в фигурные, а в квадратные скобки, например, [1,3,6]. Одно и то же множество можно записать не единственным способом, поскольку порядок элементов в множестве не имеет значения. Записав [4,2,6] или [6,2,4], мы фактически будем иметь дело с одним и тем же множеством. Более того, многократное повторение какого-либо элемента никак не влияет на "состав" множества, на основании чего мы могли бы даже записать [2,2,4,6], и речь шла все о том же множестве из трех чисел 2,4,6. Множество, не содержащее ни одного элемента, называется пустым или нульмножеством и обозначается просто парой скобок [] или [ ].

2.1 Объявление и построение множества

По форме записи объявление множественной переменной похоже на объявление ряда (одномерного массива) с той лишь разницей, что вместо служебного слова array здесь применяется слово set (множество). Подобно тому, как мы поступали с другими типами данных, можно сначала определить тип множества, а затем использовать его для объявления одной или нескольких переменных.

Формат: Const <идентификатор> = [<эл-т1>, <эл-т2>,…,<эл-тN>];

Type <идентификатор> = SET OF <базовый тип>;

Var <список идентификаторов> : SET OF <базовый тип>;

Описывая какое-то множество, иногда бывает удобно сразу показать, какие элементы оно может содержать. Сделать это также можно двояко: как в определении типа, так и при объявлении переменной. Список элементов может быть задан либо упоминанием всех до одного возможных значений (как в определении типа перечисления), либо указанием пары граничных значений (т.е. в виде отрезка значений какого-либо порядкового типа). На практике именно перечисления особенно часто используются в качестве базовых типов множеств. Проиллюстрируем сказанное несколькими примерами.

Type

Weekdays = (Mon, Tue, Wed, Thu, Fri);

Digits = set of 0..9;

Letters = set of 'a'..'z';

Var

Days: set of Weekdays;

Symbols: digits;

Initial: letters;

Colors: set of (black, white, gray);

Number1: 0..9;

Number2: 0..9;

Очень важно понимать, что сам факт перечисления в объявлении каких-то элементов указывает лишь на принципиально возможный набор значений. Иначе говоря, объявление множества описывает полную совокупность элементов (то есть универсальное множество), но при этом не создает никаких значений в самой set-переменной.

Чтобы во множестве появились какие-то элементы, необходимо выполнить предложение назначения, в левой части которого указано имя set-переменной, а в правой - некоторое множественное выражение.

Например:

Colors:=[white, gray];

Initial:=['k'..'p'];

Symbols:=[9,4..6];

Конструируя множество, мы можем использовать не только константы (как во всех предыдущих примерах), но и простые переменные (и даже выражения) при условии, что их текущие значения попадают в допустимое множество значений базового типа.

Например:

Number1:=5;

Number2:=9;

Symbols:=[Number1, 7, Number2];

В правой части последнего выражения получаем [5,7,9], что и определяет результирующее значение множества Symbols.