Синицын Лекция10_Множества.ppt
- Количество слайдов: 20
Тема 10 Использование переменных типа множество ØПонятие множества ØОперации над множествами ØПримеры работы с множествами 2/11/2018 1
Понятие множества Ø В математике под множеством понимается неупорядоченный набор различных однотипных элементов. Ø Весь набор элементов =[ 1, 2, . . . n] называется пространством элементов. Ø Множествами называется различные наборы из i : А=[ 2, 4, 1, 5], В=[ 4, 1, 3], . . . Ø Пустое множество [ ] не содержит ни одного элемента. Ø К множествам применимы операции: D=A+B=[ 1, 2, 3, 4, 5] - множество D состоит из элементов, входящих или в А или в В. Ø Е=А-В=[ 2, 5], множество Е состоит из тех элементов, входящих в А которые не входят в В. Ø F=A*B=[ 1, 4], множество F состоит из элементов одновременно входящих и в А и в В. 2/11/2018 2
Тип - множество Ø Для работы с множествами в Паскале введен специальный тип переменных – set of: Ø. . . Ø type <имя типа>=set of <базовый тип>; Ø Var Ø A, B, C: <имя типа>; Ø d: set of char; Ø. . . Ø здесь <базовый тип> - (перечисляемый, интервальный, char, Ø byte, boolean). Ø Ø Максимальное количество элементов в множестве – 256. Ø Ø Под один элемент множества выделяется 1 бит Ø Минимальное количество памяти выделяемой под множество 1 байт, максимальное 32 байта. 2/11/2018 3
Примеры описаний множеств • • • • Type Tbukva=set of ’a’. . ’z’; Tsimv=set of char; Tcifra=set of 0. . 9; Var A, B: Tbukva; C, D: Tsimv; E, G: Tcifra; Begin C: =[’u’, ’v’, ’z’]; // Задать множество из трех букв E: =[0. . 2, 8]; // Задать множество из 4 -х цифр Е: =E+[5]; // добавить в множество Е цифру 5 D: =[]; //пустое множество 2/11/2018 4
Операции над множествами Ø Над однотипными переменными типа множество допустимы операции, аналогичные обычным математическим Ø Ø сложение A: =C+B; Ø вычитание A: =C-B; Ø умножение A: =C*B; 2/11/2018 5
Операции дополняют две процедуры Ø Ø Include(A, e); - добавляет в множество A элемент e; Ø Ø Exclude(A, e); - исключает из множества A элемент e. Ø Элемент e должен быть базового типа Ø Эти операции выполняются значительно быстрее, чем их эквивалентные Ø 2/11/2018 A: =A+[e]; A: =A-[e]; 6
Операции проверки условия • if C=D then будет true если • if C<>D then множества одинаковы будет true если не одинаковы • if C>=D then будет true если все элементы D принадлежат C; • if C<=D then будет true если все элементы C принадлежат D; • if e in A then будет true если элемент e принадлежит A 2/11/2018 7
Примеры работы с множествами • 1. Ввод n элементов множества • ……… • Var • a: set of char; • e: char; i, n: Word; • Begin • a: =[]; // очистка множества • for i: =0 to n-1 do • begin • e: = String. Grid 1. Cells[i, 0][1]; • Include(a, e); // a: =a+[e]; • end. 2/11/2018 8
Примеры работы с множествами • • • 2. Распечатать содержимое множества ………. . Var b: set of 1. . 100; k: byte; Begin b: =[1, 98, 12, 25, 16]; . . . for k: =1 to 100 do if k in b then Write(k); • end. 2/11/2018 9
Примеры работы с множествами • 3. Сокращение проверок в операторе if • ……… • оператор • if (k=5) or (k=1) or (k=8) then. . • можно записать более изящно • 2/11/2018 if k in [5, 1, 8] then. . 10
4. Подсчитать количество различных символов в массиве из n символьных элементов. type ms=array[1. . 1000] of char; Function ks(const a: ms; n: word): byte; Var s: set of char; k, i: word; Begin k: =0; s: =[]; for i: =1 to n do if not (a[i] in s) then begin inc(k); include(a[i], s) end; resalt: =k; End; 2/11/2018 11
5. Решето Эратосфена: Выделить из первых N<=255 натуральных чисел все простые • Введем множество чисел А=[2. . N] • Например для N=17 • 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 Первое простое 2, запомним и вычеркнем все кратные 2 • 3 5 7 9 11 13 15 17 • второе простое 3, запомним и вычеркнем все кратные 3 • 5 7 11 13 17 • следующее простое 5, запомним и вычеркнем все кратные 5 • И так до тех пор, пока не будут удалены все элементы 2/11/2018 12
Решето Эратосфена o Type Tset=set of byte; o Procedure Prost(N: byte; var Ap: Tset); o Var A: Tset; o i, p: byte; o Begin o A: =[2. . N]; Ap: =[1]; p: =2; o While A<>[] do o Begin o i: =p; Include(Ap, p); //занести простое число o while i<=N do o begin o Exclude(A, i); //исключение кратных p o i: =i+p; o end; o repeat inc(p); //поиск следующего простого o until (p in A) or (p>N); o end; 2/11/2018 13
Обращение к процедуре, печать простых чисел o o Type Button 1: TButton; Edit 1: TEdit; String. Grid 1: TString. Grid; o procedure TForm 1. Button 1 Click(Sender: TObject); o Var Ap: Tset; o N, i, j: byte; o begin o N: =strto. Int(Edit 1. text); o Prost(N, Ap); o j: =0; o For i: =1 to N do o If i in Ap then begin o String. Grid 1. Cells[j, 0]: =Int. To. Str(i); o Inc(j); o end; 2/11/2018 14
Оформление в отдельный модуль o o o unit Unit 2; Interface Type Tset=set of byte; Procedure Prost(N: byte; var Ap: Tset); Implementation Procedure Prost; Var. . . Begin. . . end; o End. 2/11/2018 15
Вызывающая программа o unit Unit 1; o Interface o uses unit 2; o Type o Button 1: TButton; o o o o o procedure TForm 1. Button 1 Click(Sender: TObject); Implementation procedure TForm 1. Button 1 Click(Sender: TObject); Var Ap: Tset. . . Begin. . . Prost(N, Ap); . . . end; o End. 2/11/2018 16
Перечисляемый тип • Применение перечисляемых типов делает программы нагляднее, чем повышает надежность. • • • Type // максимальная мощность 65536 colors=(red, white, blue); //(0, 1, 2) Var a, b, c: colors; d: (red, white, blue); . . . a: =blue; a: =colors(2); //эквивалентно a: =2; // недопустимо b: =Succ(red); c: =Pred(a); a: =b; . . . If c=red then … 2/11/2018 17
Тип диапазон • Это подмножество своего базового типа • type • digit =’ 0’. . ’ 9’; //базовый символьный • digit 1 =24. . 52; //базовый byte • var • c: digit; • d: ’ 0’. . ’ 9’; • . . . • High(c); (=’ 9’) • Low(c); (=’ 0’) 2/11/2018 18
Тип вариант • Используется, если непонятно, какого типа данные будут использованы. • В переменную-вариант можно поместить: • целое или действительное число, логическое выражение, строку, массив произвольной размерности. • • var v 1, v 2, v 3, v 4, v 5: variant; • i: word; d: real; s: string; • . . . • v 1: =5; v 2: =’ 1. 57’; v 3: =3. 1416; v 5: =x>1; • v 4: =v 1+v 3; • i: =v 1; d: =v 3; s: =v 2; 2/11/2018 19
Конец темы 10 2/11/2018 20