Этапы разработки программы. Разработка или выбор алгоритма решения поставленной задачи. Оформление документации на программу, страница 17

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