Множественный тип данных А*В А+В Множество - конечная совокупность элементов, принадлежащих некоторому базовому типу. Базовый тип –перечислимые типы данных, символьный и байтовый типы или диапазонные типы на их основе. Каждый объект в множестве называется элементом множества. Множество Количество элементов множества называется его мощностью и не превышает 256. Элемент множества занимает в памяти 1 байт. Описание множества Type <имя типа> = Set of <тип элементов>; Var <имя множества>: <имя типа>; или Var <имя множества>: Set of <тип элементов>; Пример описания Type mnog_Char=Set of Char; Var mn1: Set of Char; mn2: mnog_Char; mn3: Set of ‘A’..’Z’; s1: Set of Byte; s2: Set of (‘A’,’O’,’E’); s3: Set of 100..200; Пример описания Type digit = Set of 1..5; Var s: digit; Переменная s может принимать значения, состоящие из любой совокупности целых чисел от 1 до 5. Количество различных значений переменной s – 32. Перечислим их: Задание элемента множества в программе [] – пустое множество; [1],[2],[3],[4],[5] – одноэлементные множества; [1,2],[1,3],[2,4][4,5] – двухэлементные множества; ……………………………………………. [1,2,3,4,5] – множество всех элементов базового типа Операции над множествами 1. 2. Объединением двух данных множеств называется множество элементов, принадлежащих обоим этим множествам. Знак операции объединения множеств в Паскале — «+». Примеры: [‘A’, ‘F’]+[‘B’, ’D’]=[‘A’, ’B’, ’D’, ‘F’]; S1:=[1..5,9], S2:=[3..7,12], S=S1+S2=[1..7,9,12] Операции над множествами 1. 2. Пересечением двух множеств называется множество элементов, принадлежащих одновременно и первому, и второму множеству. Знак операции пересечения множеств в Паскале — «*». Пример: [‘A’, ‘F’]*[‘B’, ‘D’]=[ ] [1..3, 5, 7, 11]*[3..8, 10, 12, 15..20]=[3, 5, 7]; Операции над множествами 1. 2. 3. Разностью двух множеств называется множество, состоящее из тех элементов первого множества, которые не являются элементами второго. Знак операции вычитания множеств — «-». Пример: [‘A’, ‘F’]- [‘B’, ‘D’]=[‘A’, ’F’] [1..3, 5, 7, 11]-[3..8, 10, 12, 15..20]=[1..2, 11]; A1:=[‘A’..’Z’]; A1:=A1 – [‘A’]=[‘B’..’Z’]. Операции над множествами 1. 2. Операция определения принадлежности элемента множеству. Эта логическая операция обозначается служебным словом in. Результат операции имеет значение true, если элемент входит в множество, и false в противном случае. Пример: 5 in [3..7] имеет значение true; ‘a’ in [‘A’..’Z’] имеет значение false. Операции над множествами Операцию проверки принадлежности удобно использовать в подобных случаях: Оператор вида if (ch=‘a’) or (ch=‘b’) or (ch=‘x’) or (ch=‘y’) then s; с использованием множеств переписывается в if ch in [‘a’, ’b’, ’x’, ’y’] then s; Операции над множествами Для сравнения множеств используются операции отношения: = проверка на равенство (совпадение) двух множеств; <> проверка на неравенство двух множеств; <=, < проверка на вхождение первого множества во второе; >=, > проверка на вхождение второго множества в первое. Пример1. Подсчитать количество цифр в тексте и вывести разные цифры из текста. var c,z:set of char; k,I,b:byte; s:string; p;char; begin z:=[ ]; c:=[‘0’..’9’]; b:=0; readln(s); k:=length(s); for i:=1 to k do if s[i] in c then begin z:=z+[s[i]]; inc(b); end; writeln(‘кол цифр =‘,b); writeln(‘разные цифры’); for p:=‘0’ to ‘9’ do if p in z then write(p:2); end. Пример2. Составить программу поиска простых чисел в промежутке [1..N]. «Решето Эратосфена» var m:set of byte; i,k,n:integer; begin readln(n); m:=[2..n]; for k:=2 to n div 2 do for i:=2 to n do if (i mod k=0) and (i<>k) then m:=m-[i]; for i:=1 to n do if i in m then write(i,’ ‘); end. Задания для самостоятельного решения Составить программу выделения следующих множеств из множества целых чисел от 1 до 30: множества чисел, кратных 2; множества чисел, кратных 3; Из первых двух множеств создать множество чисел, кратных 6; множество чисел, кратных 2 или 3; множество чисел, делящихся на 3, но неделящихся на 2.