МНОЖЕСТВА ОПРЕДЕЛЕНИЕ Множество –















![Упражнение № 6 1) [‘A’, ’F’] + [‘B’, ’D’] = ? Упражнение № 6 1) [‘A’, ’F’] + [‘B’, ’D’] = ?](https://present5.com/presentation/3/21753584_131478385.pdf-img/21753584_131478385.pdf-16.jpg)
![Задача 1. В заданном числовом промежутке ([20; 50] [150; 200]) найти числа, кратные 6, Задача 1. В заданном числовом промежутке ([20; 50] [150; 200]) найти числа, кратные 6,](https://present5.com/presentation/3/21753584_131478385.pdf-img/21753584_131478385.pdf-17.jpg)



![program mnog 8; Const bkv=['0'. . '9']; Var s, w, w 1: string[50]; i, program mnog 8; Const bkv=['0'. . '9']; Var s, w, w 1: string[50]; i,](https://present5.com/presentation/3/21753584_131478385.pdf-img/21753584_131478385.pdf-21.jpg)




МНОЖЕСТВА
ОПРЕДЕЛЕНИЕ Множество – это набор однотипных объектов. Характер связей между объектами подразумевается программистом и никак не контролируется Паскалем. Количество элементов множества может меняться от 0 до 256. Переменностью количества элементов множества отличаются от массивов и записей.
ОПРЕДЕЛЕНИЯ 1. Множество, не содержащее элементов, называется пустым. 2. Два множества эквивалентны, если они состоят из одинаковых элементов, причем порядок следования элементов в множествах безразличен. 3. Если все элементы одного множества входят в другое, то говорят о включении множества. Пустое множество включено в любое.
Описание множества Type <имя типа>=set of <базовый тип>; В качестве базового типа может использоваться любой порядковый тип, кроме integer, word, longint, что определяется слабой мощностью множества. В качестве базового типа могут использоваться только диапазоны значений этих типов. Пример: type scif=set of ‘ 0’. . ’ 9’; cif=set of 0. . 9; var s 1, s 2, s 3: scif; s 4, s 5, s 6: cif;
Множественный тип можно определить и непосредственно при объявлении переменных программы, например: VAR number: set of 1. . 31; {переменная- множество целых чисел от 1 до 31} cif: set of 0. . 9 ; {переменная – множество цифр} kods: set of #0. . #255; {переменная – множество кодов таблицы ASCII} ИНИЦИАЛИЗАЦИЯ МНОЖЕСТВ Возможна инициализация переменных множественного типа с использованием типизированных констант. Например: TYPE setnum=set of byte; Const S: setnum[1. . 10]; {S - инициализированная переменная, её исходное значение в программе равно множеству, включающему целые числа от 1 до 10}
Конструктор множества Используется для создания множества. Представляет собой список элементов множества, заключенный в квадратные скобки. Пример: begin . . . s 1: =[‘ 1’, ’ 2’, ’ 3’]; s 2: = [‘ 3’, ’ 2’, ’ 1’]; s 3: =[’ 2’, ’ 3’]; s 4: =[0. . 3, 6]; s 5: =[4, 5]; s 6: =[3. . 9]; …
Операции над множествами • пересечение множеств, т. е. элементы, входящие в оба множества, например: s 4*s 6 – [3, 6], а s 4*s 5=[ ]. + объединение множеств. Результат содержит элементы первого множества, дополненные элементами второго множества: s 4+s 5 [0, 1, 2, 3, 4, 5, 6] s 5+s 6 [3, 4, 5, 6, 7, 8, 9] - разность множеств. Результат содержит элементы первого множества, которые не принадлежат второму s 4 -s 5 [0, 1, 2, 3, 6] s 6 -s 5 [3, 6, 7, 8, 9]
Операции над множествами проверка эквивалентности; проверка неэквивалентности; проверка вхождения одного множества в другое ; проверка принадлежности элемента множеству. Пример: x in A , где x - операнд, принадлежащий базовому типу А - операнд множественного типа Результат всех этих операций имеет тип boolean.
Оптимизированные процедуры для работы с одиночными элементами множества Include(A, x); - включение элемента x в множество A. Exclude(A, x); - исключение элемента x из множества A. Главные недостатки множественного типа • малый размер множества • невозможность вывода множества на экран (ввод множества возможен только по элементам).
Значения множественного типа нельзя вводить и выводить! Однако можно ввести значения элементов множества и добавить их к множеству, используя операцию объединения множеств, например: S: =[]; {исходное множество пусто} Read. Ln(n); While not Eof Do begin S: =S + [n]; {объединяем исходное множество с элементом} Read(n); {вводим следующий элемент} end; … Для того чтобы вывести элементы множества, используют специальный приём: в цикле проверяют вхождение во множество всех элементов базового типа и выводят те, которые входят во множество, например: For i: =‘a’ to ‘z’ Do If i in S then Write(i: 3);
Упражнение № 1 Type bits = set of 0. . 1; Var x: bits; Y: set of (a, b, c); z: set of ‘*’. . ’*’; Сколько и какие значения может принимать каждая из переменных x, y, и z?
Упражнение № 2 Какие из следующих конструкций являются множествами ( в смысле языка Паскаль), а какие нет? a) [9, 6, 3, 0]; б) [ 2. . 3, 5, 7]; в) [1. . 15, 4. . 18]; г) [‘*’, ‘*’]; д) [0. . 0]; е) [ true. . false]; True > false ! ж) [2, sqrt(9)]; з) [‘=’, ‘>’]; и) [[ ], [5]]
Упражнение № 3 Какие из следующих описаний неверны и почему? Type points = set of real; Bt = array [1. . 8] of 0. . 1; Dat = set of bt; Month = ( jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec); M 1 = set of month; M 2 = set of jun. . aug; M 3 = set of dec. . feb; M 4 = set of (jun, jul, aug);
Упражнение № 4 var p: set of 0. . 9 ; i, j: integer; Если i: =3 и j = 5, то какое значение получит переменная p при выполнении следующего оператора присваивания 1. p: = [i+3, j div 2, j. . sqr(i) – 3]; 2. p : = [2*i. . j]; 3. p: = [i, j, 2*i, 2*j]
Упражнение № 5 Вычислить значения отношений: a) false a) [2] <> [2, 2, 2] б) true б) [ ‘a’, ‘b’] = [ ‘b’, ‘a’] в) [4, 5, 6] = [4. . 6 ] в) true г) [‘c’, ‘j’] = [‘c’, ‘f’] г) false д) [2, 3, 5, 7] <=[1. . 9] д) true e) [ 3, 6. . 8] <= [2. . 7, 9] е) false ж) [ ] <=[ ‘ 0’. . ’ 9’] з) ‘q’ in [‘a’. . ‘z’] ж) true и) trunc (3. 9) in [1, 3, 5] з) true к) [2] < [1. . 3] и) true л) 66 = [66] к) ошибка, нет операции < л) ошибка, т. к. сравнивается число с множеством
Упражнение № 6 1) [‘A’, ’F’] + [‘B’, ’D’] = ? 1) [‘A’, ’F’, ’B’, ’D’] 2) S 1: =[1. . 5, 9]; S 2: =[3. . 7, 12]; 2) [1. . 7, 9, 12] S: =S 1 + S 2; S=? 3) [‘A’, ’F’] * [‘B’, ’D’] = ? 3) [ ] 4) [1. . 3, 5, 7, 11]*[3. . 8, 10, 12, 15. . 20] = ? 4) [3, 5, 7] 5) [‘A’, ’F’] - [‘B’, ’D’] = ? 5) [‘A’, ’F’] 6) [1. . 3, 5, 7, 11] - [3. . 8, 10, 12, 15. . 20] = ? 6) [1. . 2, 11] 7) A 1: =[‘A’. . ’Z’]; A 1: =A 1 – [‘A’] 7) [‘B’. . ’Z’] =? [red, green, blue, black] * [blue, magenta, yellow] =? 8) 8) [blue]
Задача 1. В заданном числовом промежутке ([20; 50] [150; 200]) найти числа, кратные 6, и посчитать их количество. program mnog; uses crt; type mn=set of 20. . 200; var s: mn; i, k: integer; begin clrscr; s: =[20. . 50, 150. . 200]; k: =0; for i: =20 to 200 do if (i mod 6=0) and (i in s) then begin k: =k+1; writeln('i=', i); end; writeln('k=', k); readln; end.
Задача 1. Определить, является ли введённое слово идентификатором, т. е. начинается ли оно с буквы или знака подчёркивания и не содержит ли специальных символов. Суть решения: 1) Строим множество символов, которые допустимы в качестве первого: это строчные и прописные буквы латинского алфавита и символ подчёркивания: [‘A’. . ’Z’, ‘a’. . ’z’, ’_’] 2) Аналогично определяем множество допустимых символов, которые могут встретиться, начиная со второго символа слова: [‘A’. . ’Z’, ‘a’. . ’z’, ’_’, ’ 0’. . ’ 9’] 3) Программа должна üвводить строку, üпроверять допустимость первого символа, üа затем в цикле проверять допустимость остальных символов.
PROGRAM z 2; VAR st: string; f: boolean; i: integer; BEGIN Write. Ln(‘Введите строку’); Read. Ln(st); IF st[1] in [‘A’. . ’Z’, ‘a’. . ’z’, ’_’] then {проверка первого символа} begin i: =2; f: =true; While (i<=length(st)) and f do {проверка остальных символов} if st[i] in [‘A’. . ’Z’, ‘a’. . ’z’, ’_’, ’ 0’. . ’ 9’] then inc(i) else f: =false; IF f THEN Write. Ln(‘Строка’, st, ‘идентификатор. ’) ELSE Write. Ln(‘Строка’, st, ‘содержит недопустимые символы’); end else Write. Ln (‘Строка’, st, ‘начинается с недопустимого символа. ’); END.
Задача. Дана строка символов. Словом считается любая последовательность цифр. Удалить из строки все симметричные слова (палиндромы). Слова из одной цифры палиндромами не считаются.
program mnog 8; Const bkv=['0'. . '9']; Var s, w, w 1: string[50]; i, j: integer; begin write('text: '); readln(s); i: =1; while i<=length(s) do begin w: =''; w 1: =''; while (i<=length(s)) and (s[i] in bkv) do begin w: =w+s[i]; w 1: =s[i]+w 1; inc(i) end; if (length(w)>1) and (w=w 1) then begin i: =i-length(w); delete(s, i, length(w)) end; inc(i); end; write('new text: '); writeln(s) end.
Задача. Дан текст. Словом считается любая последовательность букв латинского алфавита. Будем называть слово особым, если первая и последняя буквы равны. Определить количество особых слов в тексте. Малые и большие буквы считаются эквивалентными.
program mnog 3; uses crt; const TFA=‘c: classes …in 1. txt'; BKV=['A'. . 'Z', 'a'. . 'z']; var n: integer; c: char; t: text; w: string; begin clrscr; assign(t, TFA); {$i-} reset(t); {$i+} if ioresult<>0 then begin writeln(' no file'); exit end; n: =0; while not eof(t) do begin read(t, c); w: =''; while not eof(t) and (c in BKV) do begin w: =w+upcase(c); read(t, c) end; if c in bkv then w: =w+upcase(c); if (length(w)>0) and (w[1]=w[length(w)]) then begin inc(n); writeln(w) end; close(t); write(' spetial words: '); writeln(n); end.
Задача. Дана строка символов. Напечатать строку без первого знака препинания.
Задача. Дана строка символов. Напечатать строку без знаков препинания.

