1 / 25

МНОЖЕСТВА

МНОЖЕСТВА. ОПРЕДЕЛЕНИЕ. Множество – это набор однотипных объектов. Характер связей между объектами подразумевается программистом и никак не контролируется Паскалем.

aziza
Télécharger la présentation

МНОЖЕСТВА

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. МНОЖЕСТВА

  2. ОПРЕДЕЛЕНИЕ Множество– это набор однотипных объектов. Характер связей между объектами подразумевается программистом и никак не контролируется Паскалем. Количество элементов множества может меняться от 0 до 256. Переменностью количества элементов множества отличаются от массивов и записей.

  3. ОПРЕДЕЛЕНИЯ • Множество, не содержащее элементов, называется пустым. • Два множества эквивалентны, если они состоят из одинаковых элементов, причем порядок следования элементов в множествах безразличен. • Если все элементы одного множества входят в другое, то говорят о включениимножества. Пустое множество включено в любое.

  4. Описание множества Type <имя типа>=set of <базовый тип>; В качестве базового типа может использоваться любой порядковый тип, кромеinteger,word,longint, что определяется слабой мощностью множества. В качестве базового типа могут использоваться только диапазоны значений этих типов. Пример: type scif=set of ‘0’..’9’; cif=set of 0..9; var s1,s2,s3:scif; s4,s5,s6:cif;

  5. Множественный тип можно определить и непосредственно при объявлении переменных программы, например: 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}

  6. Конструктор множества Используется для создания множества. Представляет собой список элементов множества, заключенный в квадратные скобки. Пример:begin . . . s1:=[‘1’,’2’,’3’]; s2:= [‘3’,’2’,’1’]; s3:=[’2’,’3’]; s4:=[0..3,6]; s5:=[4,5]; s6:=[3..9]; …

  7. пересечение множеств, т. е. элементы, входящие в оба множества, например: s4*s6 – [3,6], а s4*s5=[ ]. +объединение множеств. Результат содержит элементы первого множества, дополненные элементами второго множества: s4+s5 [0,1,2,3,4,5,6] s5+s6 [3,4,5,6,7,8,9] - разность множеств. Результат содержит элементы первого множества, которые не принадлежат второму s4-s5 [0,1,2,3,6]s6-s5 [3,6,7,8,9] Операции над множествами * + -

  8. Операции над множествами = < > проверка эквивалентности; проверка неэквивалентности; проверка вхождения одного множества в другое ; проверка принадлежности элемента множеству. Пример: x in A, где x-операнд, принадлежащий базовому типу А -операнд множественного типа Результат всех этих операций имеет тип boolean. >= <= in

  9. Оптимизированные процедуры для работы с одиночными элементами множества Include(A,x); - включение элемента x в множество A. Exclude(A,x); - исключение элемента x из множества A. Главные недостатки множественного типа • малый размер множества • невозможность вывода множества на экран (ввод множества возможен только по элементам).

  10. Значения множественного типа нельзя вводить и выводить! Однако можно ввести значения элементов множества и добавить их к множеству, используя операцию объединения множеств, например: S:=[]; {исходное множество пусто} ReadLn(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);

  11. Упражнение №1 Type bits = set of 0..1; Var x: bits; Y: set of (a,b,c); z: set of ‘*’..’*’; Сколько и какие значения может принимать каждая из переменных x, y, и z?

  12. Упражнение №2 Какие из следующих конструкций являются множествами ( в смысле языка Паскаль), а какие нет? a) [9,6,3,0]; б) [ 2..3,5,7]; в) [1..15,4..18]; г)[‘*’, ‘*’]; д)[0..0]; е) [ true .. false]; ж) [2, sqrt(9)]; з) [‘=’, ‘>=’, ‘>’]; и)[[ ], [5]] True > false !

  13. Упражнение №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); M1 = set of month; M2 = set of jun..aug; M3 = set of dec..feb; M4 = set of (jun, jul, aug);

  14. Упражнение №4 var p: set of 0..9 ; i,j: integer; Если i:=3 и j = 5, то какое значение получит переменная p при выполнении следующего оператора присваивания • p:= [i+3, j div 2, j.. sqr(i) – 3]; • p := [2*i .. j]; • p:= [i, j, 2*i, 2*j]

  15. Упражнение №5 a) false б) true в) true г) false д) true е) true ж) true з) true и) true к) ошибка, нет операции < л) ошибка, т.к. сравнивается число с множеством Вычислить значения отношений: a) [2] <> [2,2,2] б) [ ‘a’, ‘b’] = [ ‘b’, ‘a’] в) [4,5,6] = [4..6 ] г) [‘c’, ‘j’] = [‘c’, ‘f’] д) [2,3,5,7] <=[1..9] e) [ 3,6..8] <= [2..7,9] ж) [ ] <=[ ‘0’..’9’] з) ‘q’ in [‘a’..‘z’] и) trunc (3.9) in [1,3,5] к) [2] < [1..3] л) 66 = [66]

  16. Упражнение №6 1) [‘A’,’F’] + [‘B’,’D’] = ? 1) [‘A’,’F’,’B’,’D’] 2) [1..7,9,12] 2) S1:=[1..5,9]; S2:=[3..7,12]; S:=S1 + S2; S=? 3) [‘A’,’F’] * [‘B’,’D’] = ? 3) [ ] 4) [3,5,7] 4) [1..3,5,7,11]*[3..8,10,12,15..20] = ? 5) [‘A’,’F’] 5) [‘A’,’F’] - [‘B’,’D’] = ? 6) [1..2,11] 6) [1..3,5,7,11] - [3..8,10,12,15..20] = ? 7) [‘B’..’Z’] 7) A1:=[‘A’..’Z’]; A1:=A1 – [‘A’] =? 8) [red, green, blue, black] * [blue, magenta, yellow] =? 8) [blue]

  17. Задача 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.

  18. Задача 1.Определить, является ли введённое слово идентификатором, т.е. начинается ли оно с буквы или знака подчёркивания и не содержит ли специальных символов. • Суть решения: 1) Строим множество символов, которые допустимы в качестве первого: это строчные и прописные буквы латинского алфавита и символ подчёркивания: • [‘A’..’Z’, ‘a’ ..’z’,’_’] • 2) Аналогично определяем множество допустимых символов, которые могут встретиться, начиная со второго символа слова: • [‘A’..’Z’, ‘a’ ..’z’,’_’,’0’..’9’] • 3) Программа должна • вводить строку, • проверять допустимость первого символа, • а затем в цикле проверять допустимость остальных символов.

  19. PROGRAM z2; VAR st: string; f: boolean; i: integer; BEGIN WriteLn(‘Введите строку’);ReadLn(st); IFst[1] in [‘A’..’Z’, ‘a’ ..’z’,’_’] then {проверка первого символа} begin i:=2; f:=true; While (i<=length(st)) and fdo {проверка остальных символов} ifst[i] in [‘A’..’Z’, ‘a’ ..’z’,’_’, ’0’..’9’] then inc(i) else f:=false; IFfTHENWriteLn(‘Строка’,st, ‘идентификатор.’) ELSE WriteLn(‘Строка’,st, ‘содержит недопустимые символы’); end elseWriteLn (‘Строка’,st, ‘начинается с недопустимого символа.’); END.

  20. Задача. Дана строка символов. Словом считается любая последовательность цифр. Удалить из строки все симметричные слова (палиндромы). Слова из одной цифры палиндромами не считаются.

  21. program mnog8; Const bkv=['0'..'9']; Var s,w,w1:string[50]; i,j:integer; begin write('text:'); readln(s); i:=1; while i<=length(s) dobegin w:=''; w1:=''; while (i<=length(s)) and (s[i] in bkv) dobegin w:=w+s[i]; w1:=s[i]+w1; inc(i) end; if (length(w)>1) and (w=w1) then begin i:=i-length(w); delete(s,i,length(w)) end; inc(i); end; write('new text:'); writeln(s) end.

  22. Задача. Дан текст. Словом считается любая последовательность букв латинского алфавита. Будем называть слово особым, если первая и последняя буквы равны. Определить количество особых слов в тексте. Малые и большие буквы считаются эквивалентными.

  23. program mnog3; uses crt; const TFA=‘c:\classes\ …\in1.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 beginread(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;end;close(t); write(' spetial words:');writeln(n);end.

  24. Задача. Дана строка символов. Напечатать строку без первого знака препинания.

  25. Задача. Дана строка символов. Напечатать строку без знаков препинания.

More Related