Понятие множества. Множественный тип данных
СОДЕРЖАНИЕ:
- Понятие множества
- Конструктор множества
- Описание множеств
- Операции над множествами
- Пример программы с использованием множества
Понятие множества
Понятие множества в математике является одним из основных и обозначает некоторую неупорядоченную совокупность объектов, которые называются элементами множества. Например, множество простых чисел, множество жильцов одной улицы, множество букв алфавита и т.д. Из приведенных примеров видно, что множества могут содержать подмножества (множество жильцов одной улицы состоит из подмножеств людей, живущих в разных домах на этой улице).
Следует обратить внимание на две основных особенности множеств:
- во множестве могут содержаться элементы только одного, базового типа (например, множество простых чисел не может содержать еще и буквы);
- порядок элементов множества не фиксируется.
Например, такая совокупность элементов {1, 2, abc, ?!?} вообще не считается множеством, а совокупности {1, 2, 5, 8} и {8, 1, 5, 2} – эквивалентные множества.
Для представления такого типа данных и для реализации некоторых моментов математического аппарата теории множеств в Паскале существует множественный тип данных (множества).
Множеством называется совокупность однотипных элементов, рассматриваемых как единое целое. В Паскале могут быть только конечные множества. Число элементов исходного множества в Турбо Паскале не может быть больше 256, а порядковые номера элементов (т.е. значения функции Ord) должны находиться в пределах от 0 до 255.
В отличие от элементов массива элементы множества не пронумерованы, не упорядочены. Каждый отдельный элемент множества не идентифицируется, и с ним нельзя выполнить какие-либо действия. Действия могут выполняться только над множеством в целом.
Тип элементов множества называется базовым типом. Базовый тип может быть любой простой тип (стандартный, перечисляемый или ограниченный), за исключением типов Integer и Real, т.к. в этом случае мощность множества будет превышать 256.
Исходя из особенностей внутреннего представления множеств, можно сделать два основных вывода:
- в множестве не может быть одинаковых элементов, что согласуется и с нашими математическими знаниями;
- все операции над множествами выполняются значительно эффективней, чем над другими структурами данных.
Конструктор множества
Конкретные значения множества задаются с помощью конструктора множества, представляющего собой список элементов, заключенный в квадратные скобки. Сами элементы могут быть либо константами, либо выражениями базового типа.
Примеры задания множеств с помощью конструктора:
[3, 4, 7, 9, 12] – множество из пяти целых чисел;
[1..100] – множество целых чисел от 1 до 100;
[‘a’, ‘b’, ‘c’] – множество, содержащее три литеры a, b, c;
[‘A’..’Z’, ‘?’, ‘!’] – множество, содержащее все прописные латинские буквы, а также знаки ? и !.
Символы [] обозначают пустое множество, т.е. множество, не содержащее никаких элементов.
Не имеет значения порядок записи элементов множества внутри конструктора. Например, [1, 2, 3] и [3, 2, 1] эквивалентные множества.
Каждый элемент во множестве учитывается только один раз. Пример: множество [1, 2, 3, 4, 5] эквивалентно [1..5].
Описание множеств
Для задания типа множества используются зарезервированные слова Set и Of, а затем указываются элементы этого множества, как правило, в виде перечисления или диапазона.
Множества могут быть описаны двумя способами:
- Type имя_типа = Set Of базовый тип;
Var имя_множества: имя_типа;
- Var имя_множества: Set Of базовый тип;
Здесь базовый тип — тип элементов, входящих во множество.
Пример 1:
Type digits = Set Of 1..5; Var s: digits;
Пример 2:
Type elemcolor = (red, yellow, blue); color = Set Of elemcolor;
Пример 3:
Var A, D: Set Of Byte; B: Set Of ?a? .. ?z?; C: Set Of Boolean;
Нельзя вводить значения во множественную переменную оператором ввода и выводить оператором вывода. Множественная переменная может получить конкретное значение только в результате выполнения оператора присваивания следующего формата:
< множественная переменная > := < множественное выражение >
Пример:
A := [50, 100, 150, 200]; B := [?m?, ?n?, ? k?]; C := [True, False]; D := A;
Кроме того, выражения могут включать в себя операции над множествами.
Операции над множествами
В Паскале реализованы основные операции теории множеств. Это объединение, пересечение, разность множеств. Во всех таких операциях операнды и результаты есть множественные величины одинакового базового типа.
- Объединение множеств. Объединением двух множеств A и B называется множество, состоящее из всех элементов, принадлежащих хотя бы одному из множеств A и B. Знак операции объединения в Паскале +.
Пример: [1, 2, 3, 4] + [3, 4, 5, 6] ? [1, 2, 3, 4, 5, 6]
- Пересечение множеств. Пересечением двух множеств A и B называется множество, состоящее из всех элементов принадлежащих одновременно множеству A и множеству B. Знак операции пересечения в Паскале *.
Пример: [1, 2, 3, 4] * [3, 4, 5, 6] ? [3, 4]
- Разность множеств. Разностью двух множеств A и B называется множество, состоящее из элементов множества A, не принадлежащих множеству B. Знак операции пересечения в Паскале —.
Пример: [1, 2, 3, 4] — [3, 4, 5, 6] ? [1, 2]
[3, 4, 5, 6] — [1, 2, 3, 4] ? [5, 6]
Очевидно, что операции объединения и пересечения – перестановочны, а разность множеств – не перестановочная операция.
- Операции отношения. Множества можно сравнивать между собой, т.е. для них определены операции отношения. Результатом отношения является логическая величина true или false. Для множеств применимы все операции отношения, за исключением > и <. Ниже в таблице описаны операции отношения над множествами (множества A и B содержат элементы одного типа).
Отношение | Результат | |
True | False | |
A = B | Множества A и B совпадают | В противном случае |
A <> B | Множества A и B не совпадают | В противном случае |
A <= B | Все элементы A принадлежат B | В противном случае |
A >= B | Все элементы B принадлежат A | В противном случае |
Примеры:
Var M: Set Of Byte; M:=[3, 4, 7, 9];
Тогда операции отношения дадут следующие результаты:
Операция | Результат |
M=[4, 7, 3, 3, 9] | true |
M<>[7, 4, 3, 9] | false |
[3, 4]<=M | true |
[]<=M | true |
M>=[1..10] | false |
M<=[3..9] | true |
- Операция вхождения. Эта операция устанавливает связь между множеством и скалярной величиной, тип которой совпадает с базовым типом множества. Если x – такая скалярная величина, а M – множество, то операция вхождения записывается так: x In M. Результат – логическая величина true, если значение x входит в множество M, и false — в противном случае.
Пример для описанного выше множества: 4 In M — true, 5 In M – false.
Пример программы с использованием множества
Пусть дана строка символов с точкой в конце строки. Нужно определить число различных букв, входящих в данную строку.
1-й вариант:
Program Mn; Var M: Set Of Char; Str: String; c: Char; i, n: Integer; Begin M:=[]; { M – пустое множество} n:=0; {переменная, считающая количество различных букв в строке} WriteLn (?Введите строку?); ReadLn (Str); {ввод строки} For i:=1 To Length (Str) Do M:=M+[Str[i]]; {формирование множества, содержащего все буквы, входящие в строку} For c:= ?A? To ?Z? Do {подсчет количества элементов в множестве} If (c In M) Then n:=n+1; WriteLn (?Количество различных элементов в строке равно?, n) End.
2-й вариант:
Program Mn1; Var M: Set Of Char; Str: String; c: Char; i, n: Integer; Begin M:=[]; { M – пустое множество} n:=0; {переменная, считающая количество различных букв в строке} WriteLn (?Введите строку?); ReadLn (Str); {ввод строки} For i:=1 To Length (Str) Do If not (Str[i] In M) Then Begin M:=M+[Str[i]]; {формирование множества, содержащего все буквы, входящие в строку} n:=n+1; End; WriteLn (?Количество различных элементов в строке равно?, n) End.
Контрольные вопросы
- Что такое множество?
- Назовите две основные особенности множеств.
- Что называют конструктором множеств?
- Как описываются множества в Паскале?
- Какие операции можно осуществлять с множествами?