trains_hr.gif
 


В ПОМОЩЬ СТУДЕНТУ И ШКОЛЬНИКУ

 


Горбачев Л.И. Основы программирования в среде Turbo Pascal.

[НАЗАД]   [ДАЛЕЕ]

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

   В Турбо Паскале имеются следующие операции над множествами:
- сравнение множеств - это бинарные операции имеют обычный теоретико-множественный смысл и обозначаются следующими знаками:
а) = - равенство (совпадение) двух множеств;
б) <> - неравенство множеств;
в) <= - проверка на вхождение множества из левого операнда в множество из правого операнда;
г) >= - проверка на вхождение множества из правого операнда в множество из левого операнда;

   Все эти операции вырабатывают логическое значение True или False в зависимости от успеха проверки.
- проверка принадлежности. Эта логическая операция обозначается служебным словом in. Правый операнд должен быть множеством, левый - значением базового типа множества. Операция вырабатывает логическое значение True, если значение входит в множество, и False в противном случае.
- объединение, пересечение и дополнение множества (разность двух множеств). Эти операции обозначаются, соответственно, символами '+', '*' и '-' и означают традиционные действия с множествами, принятые в математике.

   Под объединением множеств А и В (А + В) понимают множество, состоящее из элементов, принадлежащих множествам А и В.

   Под пересечением множеств А и В (А * В) понимают множество, состоящее из элементов, принадлежащих одновременно множествам А и В.

   Под вычитанием множеств А и В (А - В) понимают множество, состоящее из тех элементов множества А, которые не принадлежат множеству В.

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

Уровень Операция Тип операндов Результат действия оператора Значение
1 * Множество Множество Пересечение множеств
2 +
-
Множество
Множество
Множество
Множество
Объединение множеств
Разность множеств
3 =
<>
>=
<=
in
Множество
Множество
Множество
Множество
слева: выражение, справа: множество
boolean
boolean
boolean
boolean
boolean
Проверка на равенство
Проверка на неравенство
Проверка на подмножество
Проверка на подмножество
Проверка на принадлежность

   Рассмотрим каждую из этих операций. Пусть при этом S1 и S2 - два однотипных множества.

   3.1. Равенство и неравенство.

   S1 = S2 тогда и только тогда, когда S1 и S2 содержат одни и те же элементы. Если S1 и S2 отличаются хотя бы одним элементом, то S1 <> S2

Значение S1 Значение S2 Выражение Результат
[1, 2, 3, 4] [1, 2, 3, 4] S1 = S2 True
['a', 'b', 'c'] ['c', 'a'] S1 = S2 False
['a'..'z'] ['z'..'a'] S1 = S2 True
[1, 2, 3] [3, 1, 4, 2] S1 <> S2 True
['a'..'z'] ['b'..'z'] S1 <> S2 True
['c'..'t'] ['t'..'c'] S1 <> S2 False

   3.2. Включение множества.

S1 <= S2 (S2 >= S1) принимает значение True (истинно), когда все элементы S1 являются также элементами S2, а в противном случае - принимает значение False (ложно).

Значение S1 Значение S2 Выражение Результат
[1, 2, 3, 4] [3, 4, 2] S1 >= S2 True
['a'..'z'] ['b'..'t'] S1 >= S2 True
['z','x','c'] ['c', 'x'] S1 >= S2 True

   3.3. Проверка принадлежности.

Выражение X in S1 принимает значение True, если X принадлежит множеству S1, а в противном случае - принимает значение False. Тип переменной X должен быть таким же, что и базовый тип элементов множества S1.

Значение S1 Выражение Результат
2 if S1 in [1, 2, 3] then ... True
'v' if S1 in ['a'..'n'] then ... False
X1 if S1 in [X0, X1, X2] then ... True

   3.4. Присваивание значения.

   Оператор S1 := S2; означает, что переменной S1 типа set (множество) присваивается текущее значение множества S2. Вместо S2 можно использовать выражение типа set.

   3.5. Объединение множеств.

   Множество S1 + S2 содержит элементы, которые принадлежат либо S1, либо S2, либо тому, и другому.

Значение S1 Значение S2 Выражение Результат
[1, 2, 3] [1, 4, 5] S1 + S2 [1, 2, 3, 4, 5]
['A'..'D'] ['E'..'Z'] S1 + S2 ['A'..'Z']
[] [] S1 + S2 []

   3.6. Пересечение множеств.

   Множество S1 * S2 содержит элементы, которые принадлежат как S1, так и S2.

Значение S1 Значение S2 Выражение Результат
[1, 2, 3] [1, 2, 4, 5] S1 * S2 [1, 2]
['A'..'Z'] ['B'..'R'] S1 * S2 ['B'..'R']
[] [] S1 * S2 []

   3.7. Дополнение множества.

   Множество S1 - S2 содержит элементы из S1, которые принадлежат S2.

Значение S1 Значение S2 Выражение Результат
[1, 2, 3, 4] [3, 4, 1] S1 - S2 [2]
['a'..'z'] ['d'..'z'] S1 - S2 ['a'..'c']
[X1, X2, X3, X4] [X4, X1] S1 - S2 [X2, X3]

   Использование в программе данных типа set дает ряд преимуществ: значительно упрощаются сложные операторы if, увеличивается степень наглядности и понимания алгоритма решения задачи, экономится память, время компиляции и выполнения. Например, оператор вида:

if (ch='a') or (ch='b') or (ch='x') then s

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

if ch in ['a', 'b', 'x'] then s.

   Следует заметить, что второй вариант более эффективен с точки зрения быстродействия.

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

Пример: Вводится строка символов до тех пор, пока не нажата точка. С помощью этой программы можно определить число различных букв (мощность множества), входящих в данную строку.
[program Mn]

   В отличие от массивов к элементам множества нет прямого доступа (по индексам этих элементов, как в массивах). Поэтому ввод и вывод множеств осуществляется с использованием операций объединения + (при вводе) и проверки принадлежности in (при выводе).

   Турбо Паскаль позволяет определять кроме переменных типа set (в разделе var) константы типа set (в разделе const). Общая форма описания таких констант имеет следующий вид:

const имя = [список констант];

Например, const S = [1, 3, 5, 7, 9];

   Допустимо также использование типизованных констант типа set:

type Set1 = set of 0..9; Set2 = set of char;
const M1: Set1 = [0, 2, 1, 3];
M2: Set2 = ['A', 'B', 'C', 'D', 'Z'];
M3: set of '0'..'z' = ['0'..'9', 'A'..'K', 'a'..'k'];

[НАЗАД]   [ДАЛЕЕ]


Главная
Новости
TurboPascal
Учебное пособие
Лекции
Исходники
Математика
Книги
Лекции
Шпоры
ЦТ и ЕГЭ
Физика

Книги

Шпоры
ЦТ и ЕГЭ

Литература

Сочинения

Краткие содержания

Другое
Мой родной край
Фотогалерея
Форум
Ссылки

Гостевая






 

                                        © Copyright(c) 2004 Amro Group. All rights reserved

 

Hosted by uCoz