множества.ppt
- Количество слайдов: 17
Множественный тип данных
Множества § Множество – это тип данных, представляющих собой набор взаимосвязанных по какому-либо признаку и ли группе признаков объектов, которые рассматриваются как единое целое. §Каждый объект в множестве называется элементом множества. § Все элементы должны принадлежать одному из скалярных (целочисленные, символьные, булевы) типов, кроме вещественного.
Множества § Этот тип называется базовым. § Базовый тип задается диапазоном или перечислением. § Количество элементов множества называют его мощностью (от 0 – пустое множество до 256). § Мощность множества не превышает 256 элементов. § Множество отличается от массивов и записей непостоянством количества элементов.
Множества § Множество в памяти хранится как массив битов, в котором каждый бит указывает является ли элемент принадлежащим объявленному множеству или нет. Максимальное число элементов множества 256, а данные типа множество могут занимать не более 32 байт.
Описание множества § Type <имя типа> = Set of <тип элементов>; § Var <имя множества>: <имя типа>; § или § Var <имя множества>: Set of <тип элементов>;
Пример описания Type mnog_Char=Set of Char; Var mn 1: Set of Char; mn 2: mnog_Char; mn 3: Set of ‘A’. . ’Z’; s 1: Set of Byte; s 2: Set of (‘A’, ’O’, ’E’);
Пример описания Type digit = Set of 1. . 5; Var s: digit; Переменная s может принимать значения, состоящие из любой совокупности целых чисел от 1 до 5: [] — пустое множество; [1], [2], [3], [4], [5] — одноэлементные множества; [1, 2], [1, 3], . . . , [2, 4], [4, 5] — двухэлементные множества (пара любых элементов); [1, 2, 3], [1, 2, 4], . . . , [3, 4, 5] — трехэлементные множества (тройка элементов); [1, 2, 3, 4], [2, 3, 4, 5], [1, 2, 3, 5] — четырехэлементные множества; [1, 2, 3, 4, 5] — полное множество (взяты все элементы базового типа).
Операции над множествами Объединением двух данных множеств называется множество элементов, принадлежащих хотя бы одному из этих множеств. Знак операции объединения множеств в Паскале — «+» . n Пример: [‘A’, ‘F’]+[‘B’, ’D’]=[‘A’, ’B’, ’D’, ‘F’]; n
Операции над множествами Пересечением двух множеств называется множество элементов, принадлежащих одновременно и первому, и второму множеству. Знак операции пересечения множеств в Паскале — «*» . n Пример: [‘A’, ‘F’]*[‘B’, ‘D’]=[ ] [1. . 3, 5, 7, 11]*[3. . 8, 10, 12, 15. . 20]=[3, 5, 7]; n
Операции над множествами Разностью двух множеств называется множество, состоящее из тех элементов первого множества, которые не являются элементами второго. Знак операции вычитания множеств — «-» . Пример: [‘A’, ‘F’]- [‘B’, ‘D’]=[‘A’, ’F’] [1. . 3, 5, 7, 11]-[3. . 8, 10, 12, 15. . 20]=[1, 2, 11];
Операции над множествами Операция принадлежности элемента множеству. Эта логическая операция обозначается служебным словом in. Результат операции имеет значение true, если элемент входит в множество, и false — в противном случае. Пример: Выражение 5 in [3. . 7] имеет значение true, Выражение ‘a’ in [‘A’. . ’Z’] имеет значение false.
Операции над множествами Используя операцию принадлежности, можно не только работать с элементами множества, но и, даже если в решении задачи явно не используются множества, некоторые логические выражения можно записать более лаконично. 1) Натуральное число n является двухзначным. Вместо выражения (n >= 10) and (n <=99) можно записать n in [10. . 99]. 2) Символ c является русской буквой. Вместо выражения (c >= ‘А’) and (c <= ‘Я’) or (c>=‘а’) and (c<=‘п’) or (c>=‘р’) and (c<=‘я’) пишем c in [‘А’. . ‘Я’, ‘а’. . ‘п’, ‘р’. . ‘я’] и т. д.
Сравнение множеств Для сравнения множеств используются операции отношения: n = проверка на равенство (совпадение) двух множеств; n <> проверка на неравенство двух множеств; n <=, < проверка на вхождение первого множества во второе; n >=, > проверка на вхождение второго множества в первое.
Пример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.
Пример 3. Дана строка. Сохранить в ней только первые вхождения символов, удалив все остальные. program ex_set_3; var m : set of char; s : string; i : byte; begin write('Введите строку: '); readln(s); m : =[]; i : = 1; while i <= length(s) do if s[i] in m then delete(s, i, 1) else begin m: =m+[s[i]]; i : = i + 1 end; writeln(s); end.
Составить программу выделения следующих множеств из множества целых чисел от 1 до 30: n множества чисел, кратных 2; n множества чисел, кратных 3; n Из первых двух множеств создать ¡ ¡ ¡ множество чисел, кратных 6; множество чисел, кратных 2 или 3; множество чисел, делящихся на 3, но неделящихся на 2.