Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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

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

Значениями типа множества, так же, как и массива, являются значения одного базового типа, однако, в отличие от массива множество может содержать любое количество различных элементов базового типа.
Рассмотрим множество, состоящее из трех элементов [1, 2, 5]. В этом множестве можно выделить восемь подмножеств:

- с одним элементом: [1], [2], [5];
- с двумя элементами: [1, 2], [1, 5], [2, 5];
- с тремя элементами: [1, 2, 5];
- пустое: [].

В общем случае для множества, содержащего N элементов, можно выделить 2N подмножеств.
Паскаль позволяет определить переменную типа множества, значением которой может быть одно из рассмотренных подмножеств базового типа [1, 2, 5], следующим образом:

var X: set of (1, 2, 5);

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

type Tbm1 = set of 0..63; Tbm2 = set of 'A'..'Z'; var X1, X2: Tbm1; Y1, Y2: Tbm2; ... X1:= [0..3, 5, 20, 40]; {подмножество состоит из элементов 0, 1, 2, 3, 5, 20, 40} X2:= [5, 7]; Y1:= ['A', 'D', 'Z']; Y2:= []; {пустое множество}

Как следует из примера, подмножество в программе задается перечислением входящих в него элементов базового множества, заключенных в квадратные скобки. В качестве элементов базового множества можно указывать переменные и выражения, значения которых имеют тип базового множества, например:
пусть I = 3, J = 6, тогда [I..J-1, J+1..20] - подмножество [3..5, 7.. 20] базового множества типа Tbm1.

В Паскале определены следующие операции, позволяющие получить новое подмножество из двух данных:

+ - объединение; результат содержит все элементы объединяемых подмножеств, одинаковые элементы не повторяются, например:
    X1 + X2 содержит [0, 1, 2, 3, 5, 7, 20, 40];
* - пересечение; результат содержит элементы, принадлежащие одновременно обоим подмножествам, например:
    X1 * X2 содержит [5];
- - разность; результат содержит элементы первого подмножества, которые не входят во второе, например:
    X1 - X2 содержит [0, 1, 2, 3, 20, 40].

Существуют операции, позволяющие сравнивать подмножества. Результатом являются значения TRUE и FALSE.

= - проверка на равенство; два подмножества считаются равными, если они состоят из одних и тех же элементов, например:
    ['A'..'C']= ['B', 'C', 'A'] возвращает TRUE;
    ['A'..'C']= ['A'..'D'] возвращает FALSE;
<> - проверка на неравенство, например:
    ['A'..'C']<> ['B', 'C', 'A'] возвращает FALSE;
    ['A'..'C']<> ['A'..'D'] возвращает TRUE;
<= - проверка принадлежности, например:
    [1..4]<= [0..21] возвращает TRUE;
    [0..21]<= [1..4] возвращает FALSE;
>= - проверка принадлежности, например:
    [1..4]>= [0..21] возвращает FALSE;
    [0..21]>= [1..4] возвращает TRUE;
in - проверка принадлежности символа подмножеству, например:
    20in X1 возвращает TRUE;
    'D' in ['A'..'C'] возвращает FALSE.

Используя рассмотренные операции, можно записывать выражения. Установлен следующий порядок выполнения операций по убыванию приоритетов:

*, +, -, in, =, <>, <=, >=.

Рассмотрим пример выражения:

C1 in (['A'..'D']+['I'..'N']) * ['B', C2, 'M']

Значение этого выражения зависит от значений переменных C1, C2 типа Char:

для C1 = 'B' выражение всегда возвращает TRUE;
для C1 = 'A' выражение возвращает FALSE, если C2 <> 'A' и TRUE, если C2 = 'A'.

Заметим, что выражение

C1 in ['A'..'Z'] эквивалентно выражению (C1 >= 'A') and (C1 <= 'Z').

<== предыдущая лекция | следующая лекция ==>
Множества. Одним из слабых мест механизма подпрограмм в стандартном Паскале является их встроенность в тело программы и невозможность по этой причине раздельной | Операции над строковыми переменными
Поделиться с друзьями:


Дата добавления: 2014-01-06; Просмотров: 224; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.011 сек.