Множества Программирование на языке Паскаль Старший преподаватель кафедры Компьютерных систем в управлении и проектировании Потапова Евгения Андреевна Вопросы входного контроля - Как объявляются переменные множественного типа данных ? - Множественный тип данных относится к простым или составным? 2 Множественный тип данных Множественный тип является составным. Значениями базового типа могут быть : • Символы • Ограниченный тип • Перечислимый тип Если базовый тип – ограниченный целый, то значения должны быть в диапазоне от 0 до 255. Количество элементов в множестве – не более 256 3 Операции над множествами: • Объединение A=[1,2,3] B=[3,4,5] А+В=> [1,2,3,4,5] A B 1,2,3 4,5 4 • Пересечение A = [‘a’, ‘b’] B= [‘a’, ‘b’, ’z’] A*B=>[‘a’] A ba cz B 5 • Разность A=[1,2,3] B=[1,3,4] A-B=>[2] B-A=>[4] A 2 1,3,4 B 6 Над множествами возможны операции сравнения <=, >= Эти операции используются для определения, входит ли множество А в множество В A=[1,4] ; B=[1,2] A<=B => False C=[5]; D=[5,6] C<=D => True А 4 1,2 В С 5,6 D 7 Стандартные процедуры для работы с множествами : • Include(A, c) – включить элемент в множество A:=A+[c]; • Exclude(A, c) – исключить элемент из множества A:= A-[c] Оператор IN – используется для проверки принадлежности элемента множеству: • If ‘a’ in A then … - результат относится к булевскому типу: Мы можем сказать ДА (true), элемент принадлежит данному множеству, либо НЕТ (false), элемент не принадлежит данному множеству. 8 Описание множеств в разделе описания переменных: Var A: set of ‘базовый тип’; Добавить элемент в множество можно так: A:=A+[‘a’]; D:=D+[b]; Include(A, f); 9 Ввод с клавиатуры и вывод на экран Для ввода с клавиатуры нужно использовать вспомогательную переменную базового типа, например: Var A: set of 1..200; k: 1..200; i:integer; Begin A:=[] Writeln(‘Vvedite znacheniya’); For i:=1 to 10 do Begin Readln(k); A:=A+[k]; {Include(A,k)} End; 10 Для вывода на экран тоже используем вспомогательную переменную базового типа: …………….. For k:=1 to 200 do If k in A then Writeln(k); 11 Запомните: • Элементы множества не имеют порядковых номеров • Элементы не повторяются (можно сказать, элемент либо входит в множество, либо нет) • Максимальное количество элементов в множестве 256 • Нельзя напрямую ввести элемент в множество с клавиатуры • Нельзя напрямую вывести элемент множества на экран 12 Разберем пример 1: Спортлото : 6 из 49. Составьте программу, в которой загадываются, иначе говоря, создаются, 6 разных чисел, значения которых никак не связаны друг с другом, а величина лежит в диапазоне от 1 до 49. Для решения будем использовать множества. 13 начало 'Lotereya 6 iz 49' K:=0; A:=[] нет i=1,49 randomize да да нет I in A i:=random(49)+1; Вывод i нет Not(I in A) да A:=A+[i]; k:=k+1; нет да конец K=6 Блок-схема программы 14 Разберем пример 2: Напечатать все натуральные числа от 10 до 32767, в десятичной записи которых нет одинаковых цифр. Решение простое, если использовать множества. 15 начало 'Chisla s raznimi chiframi' нет i=10,32767 да t:=true;A:=[]; n:=i; нет да t n>0 конец да : K:=n Mod 10 нет нет Вывод i Not(k in A) and t да A:=A+[k] t:=false N:=n div 10 Блок-схема программы 16 Разберем пример 3: Дана строка. В алфавитном порядке напечатайте (по разу) все малые латинские буквы, входящие в эту строку не менее двух раза. Решение простое, если использовать множества. 17 начало Ввод строки A:=[‘a’..’z’] i=1,length(s) нет Больше одного да s[i] in A нет нет B:=B+s[i] S[i] in B t=‘a’,’z’ да да C:=C+s[i] нет t in C конец да Вывод t Блок-схема программы 18 Разберем пример 4: Дана строка символов. Подсчитайте количество различных латинских малых букв, входящих в данную строку Напишем программу 19 начало A:=['a'..'z']; C:=[];k:=0; Вводим строку нет i=1,length(s) да да s[i] in A t=‘a’,’z’ нет нет да да include(C,s[i]) t in C нет Вывод k inc(k) конец 20 Разберем пример 5: Дана строка. В алфавитном порядке выведите на экран Все малые латинские буквы, которые встречаются в строке ровно один раз. Напишем программу с использованием множеств. 21 Вопросы по теме: • Каково максимальное количество элементов в множестве? • Могут ли в множестве быть одинаковые элементы? • Как описать переменную множественного типа? 22 В ходе лекции были рассмотрены следующие вопросы: • множественные типы данных ( SET OF ) • особенности работы с множествами • стандартные процедуры • примеры программ с множественным типом данных 23 Спасибо за внимание! 24