Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
по freePascal.doc
Скачиваний:
5
Добавлен:
01.05.2025
Размер:
148.48 Кб
Скачать

Множества. Операции над множествами.

Множество является одним из фундаментальных математических понятий. К операциям и отношениям с множествами сводится большинство математических моделей.

Объявление множеств

В языке программирования Free Pascal существует понятие множества, под которым понимается некоторый набор элементов, одно и того же базового типа. Базовый тип определяет перечень всех элементов, которые вообще могут содержаться в данном множестве.

Размер множества в Free Pascal всегда ограничен некоторым предельно допустимым количеством элементов. Во множествах допускаются только такие элементы, порядковые значения которых не выходят за границы 0..255. Отрицательные элементы множеств в Free Pascal не допускаются. Если же необходимо множество целочисленных объектов, то базовый тип должен быть объявлен, как диапазон типа byte. Для множеств, содержащих символы, подобных затруднений нет, т.к. базовый тип для них является char.

В Free Pascal для обозначения множеств используются квадратные скобки. Порядок элементов во множестве не имеет значения, кроме того, многократное повторение элементов не меняет множество. Например, множества [2, 4, 8] и [4, 8, 2, 2, 8, 8, 8] равны.

Элементы множества не упорядочены и не имеют индексов.

Объявление переменной типа множество имеет следующий вид:

var

переменная: set of тип;

Например:

var

ch: set of char;

Переменной ch - множество с базовым типом char.

Мы можем начала объявить тип множества, а потом использовать его для объявления переменных:

type

chset = set of char;

var

ch1, ch2: chset;

В качестве базового типа множества мы можем использовать тип перечисления, или некоторый его диапазон:

type

week = (Mon, Tue, Wed, Thu, Fri, Sat, Sun);

var

day: set of week;

letter1: set of 'А'..'Я';

Множество может быть объявлено типизированной константой, для этого в описании после знака равенства следует указать конструктор множества. Например:

const letter2: set of ['а'..'я'] = ['а', 'е', 'и', 'о', 'у', 'ы', 'у', 'ю', 'я'];

Множество letter2 – строчные, гласные буквы русского алфавита.

Построение множества

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

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

begin

day := [Mon, Thu, Fri];

letter := ['E', 'R'..'Z']

end.

Порядок элементов множества, при задании диапазона важен.

Множество, в котором нет элементов, называется пустым. Например:

day := [ ];

Конструируя множества, можно использовать и переменные, текущие значения которых попадают в диапазон базового типа множества. Так, если ch1 и ch2 имеют тип char, то допустима следующая последовательность операторов:

ch1 := 'А';

ch2 := 'Б';

chs := [ch1, ch2, 'В'];

В результате получится множество ['А', 'Б', 'В'].

Действия над множествами

Над множествами выполнимы следующие операции: объединение (+), пересечение (*) и разность (-).

Объединение двух множеств A и B (A + B) – это новое множество, состоящее из элементов, принадлежащих множеству A или B, либо тому и другому одновременно.

var

ch1, ch2, ch3: set of byte;

begin

ch1:= [1, 2, 5];

ch2:= [2, 5, 7];

ch3:= ch1 + ch2 + [3, 5]; // ch3 = [1, 2, 3, 5, 7].

end.

Пересечение двух множеств A и B (A * B) – это множество, состоящее из элементов, одновременно принадлежащих множествам A и B.

ch3 := ch1 * ch2; // ch3 = [2, 5].

Разность двух множеств A и B (A – B) – это новое множество, состоящее из элементов множества A, не вошедших в множество B.

ch3 := ch1 – ch2; // ch3 = [1].

Для вставки и удаления элементов множества в Pascal введены две процедуры:

include (имя множества, элемент)

exclude (имя множества, элемент)

Первая из них позволяет выполнить добавление одного элемента в указанное множество, а вторая удалить. Например:

include (ch1, 3); // ch1 = [1, 2, 3, 5].

exclude (ch2, 7); // ch2 = [2, 5].

Над множествами можно выполнять операции сравнения: (=, <>, >=, <=).

Два множества A и B равны (A = B), если каждый элемент множества A является элементом множества B и наоборот.

Два множества A и B не равны (A <> B), если они отличаются, хотя бы одним элементом.

Множество A является подмножеством множества B (A <= B, или B >= A), если каждый элемент из A присутствует в B.

Операция in позволяет сделать вывод, принадлежит ли данный элемент некоторому множеству.

Все операции сравнения множеств, а также операция in возвращают логическое значение true или false. Например:

X:=5

(x in ch1)=true, т.к. значение x является элементом множества ch1.

Для организации ввода-вывода элементов множества следует использовать вспомогательные переменные. Так же можно использовать множества, как элементы типизированных файлов.