МНОЖЕСТВА - наборы однотипных логически связанных друг с другомобъектов. Характер связей между объектами подразумевается лишьпрограммистом и не контролируется Турбо Паскалем. Количествоэлементов в множестве может меняться от 0 до 255. Множество,которое не содержит элементов, называется пустым. От массивовмножества отличаются тем, что количество элементов в нем непостоянно. Его можно расширять и сокращать по ходу выполненияпрограммы.Описание типа производится в разделе TYPE.Структура:<Имя идентификатора>=SET of <имя типа> ;где <Имя идентификатора> - правильный идентификатор ТурбоПаскаля;<имя типа> - тип элементов множества, в качестве которого можетиспользоваться любой порядковый тип, кроме WORD, Integer,LogInt,ShortInt.пример: TYPE dchar=SET of '1'..'9'; {базовый символьный тип-диапазон}digit=SET of 0..9;Переменные этого типа описываются в разделеVAR S1,S2,S3:dchar; S4,S5,S6,S7:digit;Для задания множества может использоваться конструктор множества:список (спецификаций) элементов множества, отделенных друг отdpsc` запятыми; список заключается в квадратные скобки.Спецификациями элементов м.б. константы или выражения базовоготипа, а также пример:S1:=['1','2','3']; S4:=[0..3,7];S2:=['2','1','3']; S5:=[4,6];S3:=['1','2']; S6:=[3..8]; S7:=[]; (пустое)Два множества считаются эквивалентными тогда и только тогда,когда все их элементы одинаковы причем порядок следования вмножестве их безразличен. (S1 и S2 эквивалентны).Если всеэлементы одного множества входят в другое множество то говорят,что первое включено во второе. (S3 включено в S1).Пустое множествовключено в любое другое.Над множествами определены следующие операции:1. * пересечение множеств; результат содержит элементы, общиедля обоих множеств. (S4*S6 содержит [3,7]; S4*S5 образует пустоемн.).2. + объединение множеств, результат содержит элементы первогомножества, дополненные недостающими элементами второго.S4+S5 содержит [0,1,2,3,4,6,7] S5+S6 содержит [3,4,5,6,7,8]3. - разность множеств, результат содержит элементы из первогомножества, которые не принадлежат второму.S6-S5 содержит [3,5,7,8])S4-S5 содержит [0,1,2,3,7]) []-S4 даст [].4. Операции отношений:= операция эквивалентности; возвращает значение TRUE, если обамножества эквивалентны; (S1:=S2; ['1','2','3']) =['2','3','1'] проверка неэквивалентности; (TRUE, если множестванеэквивалентны); [1,2]<>[1] S3<>S2>= проверка вхождения (TRUE, если второе множество входит впервое;in - проверка принадлежности. Структура этой бинарной операции:in ;возвращает TRUE, если выражение имеет значение,принадлежащее множеству.пример:3 in S6 TRUE; [] in [0..5] [] in S52*2 in S4 FALSE;Множества имеют компактное машинное представление. Недостаток:невозможность вывода множества на экран, т.к. отсутствуетмеханизм изъятия элемента из множества. Ввод множества возможентолько поэлементно.пример: Можно тип объявлять при описании переменныхVAR S:SET of char; {переменная-множество}C: char; {элемент множества}BeginS:=[]; S:=#0; {обнуление значений}while C '.' do {цикл до ввода "."}beginreadln(C); {чтение символа в с}S:=S+[C]; {добавление его к S}end; ...S:=S-['.']; {исключение точки}End.
Оператор выбора CASE (варианта). Комментарии
CASE<ключ выбора> OF Const1:оператор; Const2:оператор; ELSE: оператор;END;
Записи. Вложенные записи. Записи с вариантами.
Запись – это структура данных, состоящая из фиксированного числакомпонент, называемых полями записи. В отличие от массиваjnlonmemr{ могут быть различного типа. Поля именуются:<имя типа>=RECORD<определение полей>END.Type Bd = record D,m: byte; Y: wordVar a,b: bd;a::=8;a.day:=27;-доступ к компонентуДля упрощения доступа к полям записи используют оператор записиWithWith<переменная>do<оператор>;With c.bp do month:=9;With c do with bp do month:=9;c.bp.month:=9;Вариантные поляType f= record N: string; Case byte of 0:(bp: string[30]); 1:(c: string[10],e: string[20],ed:1..31) end;Имена должны быть уникальны, хотя возможно повторение на различныхуровняхВложенные поля:Type bd =record D,m: byte; X: word; End;Var c: record; Name: string; Db: bd;Begin if c.db.year=1939 then………..End.В качестве ключа переменная:Type rec2=record C: LongInt;Case x: byte of1: (d: word);2: (e:record case boolean of 3: (f: real); 3: (g: single); ‘3’: (c: word); end;end;