В.Г. Абрамов, Н.П. Трифонов, Г.Н. Трифонова - Введение в язык Паскаль (1107618), страница 48
Текст из файла (страница 48)
считается, что внутри оператора присоединениясоответствующий идентификатор обозначает имя поля, а не имя переменной.Пусть, например, в разделах описания типов и описания переменныхвведены в употребление следующие комбинированные типы и переменные:type Студ=гесог<1Фам,Имя,Отч: packed array CI.. 163 o-f char;Пол:Группа:(муж,жен);101..520;Стип: booleanend;CoTp=record'Рам , Имя , Отч: packed array C1..16D o-f char;Пол:Должность:Зарплата:муж..жен;(мне,не,сно,асс,лоц,проф);integerend;varх: Студ;у: Сотр;Стипендия:integer;Тогда в следующем фрагменте программы, использующем операторприсоединения:with х,у do beginПол:=муж;Имя:='АЛЕКСАНДР';Стипендия:=true;Г руппа:=108end;поля Пол и Имя относятся к переменной у типа Сотр, гак как эта переменная в списке переменных-записей заголовка оператора присоединенияфигурирует после переменной х типа Студ, имеющей одноименные поляПол и Имя.
Кроме того, в этом фрагменте имя Стипендия в теле оператораприсоединения трактуется как имя поля переменной х, а вне его —как имя переменной целого типа.202Приведем еще один пример, иллюстрирующий трактовку оператораприсоединения. Пусть имеются описания переменных:varR2: record А,В,С:integer end;R3: recordA,D:integer;В: record C,E:integer endend;Тогда оператор присоединенияwith R3,В,R2 dobegin A:=l; Bt-2; C:=3; D:=4; E:»5 endэквивалентен составному операторуbegin R2.A:=1; R2.B:=2; R2.C:=3; R3.Dj=4; R3.B.E:=5 endРекомендуем читателю внимательно проанализировать каждый операторприсваивания и четко понять, почему именно такие частичные переменные фигурируют в составном операторе, эквивалентном операторуприсоединения.ГЛАВА11МНОЖЕСТВЕННЫЕ ТИПЫПонятие множество является одним из основных в современной математике. Нам будет достаточно тех сведений о множествах, которые известнычитателю из школьного курса математики, поэтому сразу перейдем к особенностям использования понятия множества в паскале.Прежде всего отметим, что в паскале допускаются только конечные множества.
причем все элементы множества должны быть значениями одноготипа паскаля. Тип элементов множества принято называть базовым типомэтого множества. Базовым типом множества в паскале может быть любойскалярный тип за исключением типа real. Если в качестве базового типаиспользуется тип integer, то подразумевается, что используется тип диапазона, ограниченный минимальным и максимальным целыми числами,определяемыми реализацией.11.1.
Обозначение множеств в паскалеЗначением множественного типа в паскале является множество. Конкретные значения множественного типа (постоянные или переменные)задаются с помощью так называемого конструктора множества, представляющего собой список элементов множества, заключенный в квадратныескобки. Элементы множества могут задаваться константами базового тинаили выражениями этого же типа. Множество может вообще не иметьэлементов, т.е. быть пустым, тогда оно представляется конструкцией [ ].Заключение в квадратные скобки элементов базового типа можно рассматривать как операцию образования множественного значения. Это одна изопераций паскаля, позволяющая на основе значений одного типа получитьзначение другого типа.Примеры множеств, записанных на паскале:[ ] — пустое множество:[2, 3, 5, 7, 11] — множество, содержащее в качестве своих элементов целые числа 2 .
3 , 5 , 7 . 11;[ ' а ' , ' с ' , ' d ', ' f ' ] — множество содержащее в качестве своих элементов литеры а, с, d, f.[1, k] - множество, состоящее из целых чисел 1 и текущего значенияцелочисленной переменной к (при к = 1 множество состоит из одного целого числа 1).204При перечислении элементов, которые образуют диапазон значенийb, succ(b) , ..., d, может использоваться сокращение b . . d, например:[ 1 , 2 . . 100] — множество последовательных целых чисел от 1 до 100;[к . .
2 * к ] — множество целых чисел от значения к до значения выражения 2 * к;[красный, желтый, зеленый] - множество, состоящее из трех элементовнекоторого перечислимого типа значений;[' а ' . . ' d ', ' f ' . . ' h ', ' k ' ] — множество значений типа char, состоящее из элементов а, Ь, с, d, f, g, h, k.Если в диапазоне b . . d, используемом в задании множественной константы, b = d , го этот диапазон определяет только один элемент Ь.Если b > d (что также допускается), то этот диапазон не поставляет в множество ни одного элемента. Например:[ 1 . .
1, 5 . . 1 ] — это множество из одного элемента 1 (т.е. эквивалентнозаписи [ 1 ] ) ;[' d ' . .' а ' ] — это пустое множество (эквивалентно [ ] ) .Как и в общей теории множеств, в паскале считается, что порядок перечисления элементов в множестве не играет роли и что каждый элемент учитывается только один раз, поэтому[true, false] эквивалентно [false, true],[1, 2, 3, 2 . .
5, 6, 4, 3] эквивалентно [1, 2, 3, 4, 5, 6] эквивалентно[1..6].Приведем примеры и неправильных записей множеств:[2.7, 3.14] — элементы множеств не могут быть значениями типа real;[5, ' f ' ] — элементы множеств должны принадлежать к одному базовому типу;[' abc ' , ' dfg ' ] — в качестве базового типа нельзя использовать производный тип.Итак, мы рассмотрели, как задаются значения множественного типа.Осталось лишь привести точное синтаксическое определение:( конструктор множества >::= [ ] | [ ( э л е м е н т ) {, < э л е м е н т ) } ]< элемент ) ::= < выражение ) | < выражение ) . .
< выражение )Напомним, что выражения должны быть одного и того же базового типа,которым может быть любой скалярный тип, кроме типа real.11.2. Задание множественного топай множественная переменнаяИтак, прежде всего при задании множественного типа значений необходимозадать некоторый базовый тип, из значений которого и создаются конкретные значения множественного типа. После того, как базовый тип задан,совокупность значений соответствующего множественного типа определяется автоматически. В нее входят все возможные множества, являющиеся произвольными комбинациями значений базового типа. Все эти множества и являются отдельными значениями определенного множественного типа.205Синтаксис задания множественного типа значений определяется следующей синтаксической диаграммой:<эадаиие множественного типа)::=^ set<базовый«>^ of •Х б а з о е ы н тип)тип)::=Х з а д а н и е базового типа> < и м я базового типа)Т*где set, of (множество, из) — служебные слова паскаля.Например, множественный тип set of 1 .
. 3 использует в качестве базового типа диапазон целых чисел 1 . . 3, поэтому значениями этого множественного типа являются все множества, составленные из целых чисел 1, 2 и3, а также пустое множество, входящее в любой множественный тип значений: [ ], [1], [2], [3], [ 1 , 2 ] , [1,3], [2,3] и [1, 2, 3]. Эти и только этимножества являются значениями заданного выше множественного типа.Приведем еще один пример задания множественного типа:set of booleanЭто задание определяет следующую совокупность значений: [ ], [true],[false], [true, false].Переменные множественного типа называют также переменными-множествами и описываются они, как и любые переменные, в разделе переменных. Как обычно, при описании переменных тип их значений может бытьзадан либо непосредственно, либо путем указания имени типа, котороеопределено в разделе типов.
Пусть, например, в разделе типов и в разделепеременных присутствуют следующие описания:typeмес=(янв,Февр,март,апр,май,июнь,июль,авг,сент,окт,нбр,дек);MecroAa=set o-f мес;bool=set o-f boolean;varДгти: set of(сын,ДОЧЬ);Месяц: месгода;logic: bool;Тогда значением переменной-множества Дети может быть любое из множеств: [ ], [сын], [дочь], [сын, дочь]. Значением переменной-множества Месяц может быть любое из множеств, содержащих имена месяцевв любых сочетаниях, и пустое множество: [ ], [янв], [фев], ..., [янв,ф е в ] , [янв, март],..., [янв, февр, март, апр, май, июнь, июЛь, авг, сент, окт,нбр, д е к ] .
Полное перечисление всех множеств, составляющих совокупность значений, которые может принимать переменная Месяц, заняло быслишком много места. Значением переменной logic может быть любое изследующих множеств: [ ], [true], [false], [true, false].206Для присваивания значений переменным-множесгвам используется оператор присваивания вида:v:=sгде v — переменная множественного типа, as — гак называемое множественное выражение, т.е. выражение, значением которого является множество. Множественные выражения мы рассмотрим в следующем разделе,а пока лишь отметим, что частным случаем этих выражений являютсяпеременные-множества и собственно множества (значения множественноготипа) В силу этого допустимы следующие операторы присваивания:Дети:=СсынЗ;Месяц: = С сент , окт, нбр , дек, янв , ч>ев , март , апр , май 3 ;1 ogi с : =Cf al sell;Следует заметить, что все элементы множества, полученного в результатевычисления выражения в правой части оператора присваивания, должнывходить всовокупность значений базового типа, фигурирующегов описании переменной-множества, записанной в левой его части.Поэтому оператор присваивания Месяц := [окг, дек, true] недопустим, гаккак true не входит в совокупность значений типа мес, являющегося базовым для множественного типа место да.11.3.
Операции над множествами. Множественные выраженияДля работы с значениями множественного типа в паскале предусмотрендовольно богатый набор операций. В основном этот набор отражает те операции над множествами, которые предусмотрены в соответствующем разделе математики (теории множеств).Для получения новых множественных значений в паскале введеныв употребление операции объединения, пересечения и разности множеств.Это двуместные операции, операндами которых являются множественныеконстанты, переменные-множества или выражения, принимающие значениемножественного типа.