1,3,4,5 чем с 256 различными значениями. Причем (для целых типов) эти значения
3,4,5 должны от 0 до 255. Таким ограничениям удовлетворяют только типы byte и char.
…… В примере допускается явное задание значений множества типов с помощью так
1,2,3,4,5 называемого конструктора множества:
Пример: type setofchar = set of char;
setofint = set of 0..100;
var p : setofchar;
p1,p2 : setofint;
begin
p := [‘a’..’2’,’0’..’9’,’-’];
p1 := [];
p2 := [1, 2, y+1, 0, y-1];
Польза от того или иного типа данных определяется, в первую очередь, набором дополнительных операций под значениями этих типов. Над множествами допускаются следующие операции:
1) Объединение – обзначение ‘+’
[1,2] + [3,4] [1,2,3,4]
A
B
2) Пересечение – ‘*’
[1..10] * [5..15] [5..10]
A [1,2] * [3,4] [ ]
B
3}Вычитание – ‘-’
А Множество А – В состоит из тех элементов множества А которые не
В принадлежат множеству В. [1..10] – [5..15] [1..4]
Логическая операция проверки принадлежности элемента множеству обозначается – in.
Пример: 2 in [1..10, 12] - true
5 in [1, 2, 7, 10] – false.
Правый операнд должен быть множественным, а левый – значением базового типа множества. Операция вырабатывает true, если значение входит в множество, а false в противном случае. Операцию in удобно использовать для сокращения записи громоздких условных проверок:
Например: Если необходимо поверить, является ли буква гласной, то громоздкое условие:
If (ch = ‘a’) or (ch = ‘e’) or (ch = ‘j’) or (ch = ‘i’) or (ch = ‘o’) or (ch = ‘u’) then….. можно переписать в более компактной и наглядной форме: if ch in [‘a’,’e’,’j’,’i’,’o’,’u’] then……
Заметим, что второй вариант более эффективен с точки зрения быстродействия (обычно множества представляются в виде строки битов, занимающих одно или несколько машинных слов, обработка битовых строк проводится очень быстро, поэтому все операции над ними также выполняются быстро).
Операции – проверка на равенство и включение множеств, также имеют обычный теоретико-множественный смысл и обозначается следующими знаками:
= равенство (эквивалентность) двух множеств;
< > неравенство;
<= проверка на вхождение множества из левого операнда в множество правого операнда;
>= наоборот.
Все эти операции вырабатывают логические константы true или false в зависимости от результата проверки.
Пример: [1,2,3] = [1,2] false.
[1,2,3] >= [1,2] true.
[1,2,3] <> [1,2,4] true.?
[5] <= [1..10] true.
К сожалению набор операций над множествами в PASCAL не содержит одной практически важной операции – выборки значения. Поэтому при необходимости подобных действий приходится организовать цикл по всему диапазону значений базового типа, каждый раз проверять принадлежность очередного значения данному множеству.
В отличие от массивов к элементам множества нет прямого доступа (по индексам элементов, как в массивах). Поэтому ввод/вывод множеств производится с использованием операции объединения (при вводе) и проверки принадлежности (при выводе).
Пример: const n=10; {размерность множества}
var y1 : set of char;
c : char;
k : byte;
begin
{ввод исходного множества}
y1 := [];
a) for k := to n do б) k := 0;
begin repeat
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.