Оператор присваивания

Описание переменных и типов данных

Переменная – это программный элемент, который может принимать, сохранять и изменять свое значение. Переменная в Паскале всегда принадлежит одному из типов данных и может принимать любое значение из множества возможных значений соответствующего типа.

В Паскале каждая переменная должна быть описана до того, как она будет использована. Попытку использовать неописанную переменную транслятор Паскаля воспринимает как ошибку. Такое жесткое, на первый взгляд, требование, автоматически исключает программные ошибки, связанные с опечатками в именах переменных.

Все описания переменных помещаются в разделе Var. В одном описании можно описывать произвольное количество переменных одного типа. Для переменных разных типов нужны отдельные описания.

<описание переменных>::= <имя> {"," <имя> } ":"
(<конструкция типа>|<имя типа>).

Конструкция типа описывает нестандартные типы, сконструированные программистом, а имя типа – стандартные типы, либо сконструированные типы которым было ранее присвоено имя.

Если в программе есть два описания переменных с совершенно одинаковыми конструкциями типов, переменные, описанные в них, считаются относящимися к разным типам.

Типу данных можно присвоить имя в разделе Type с помощью описаний типов.

<описание типа>::= <имя> "=" (<конструкция типа>|<имя типа>).

Синтаксис конструкций типов для перечислений, диапазонов и массивов описан выше.

 

Пример:

Const Top=100; {константе целого типа назначено имя Top}

Type Week=(Su,Mo,Tu,We,Th,Fr,Sa); {перечислению назначено имя Week}

WorkDay=Mo..Fr; {диапазону назначено имя WorkDay}

Span=1..Top; {диапазону назначено имя Span}

Row=array[1..20] of Char; {массивному типу из 20 элементов символьного типа назначено имя Row}

Logic=Boolean; {стандартному типу Boolean назначено другое имя – Logic}

Var a,b,c: Real; {описаны переменные вещественного типа}

i,j,k,l,m,n:Integer; {описаны переменные целого типа}

d:array[1..10,'A'..'E'] of integer; {описан двумерный массив из 50 элементов целого типа}

T:logic; {описана переменная типа Logic}

W:char; {описана переменная символьного типа}

Draft:array[10..Top] of Week; {описан массив из 61 элемента типа Week}

Staff, PayRoll: Array [WorkDay, Span] of Row; {описаны 2 двумерных массива, состоящие из 500 элементов типа Row, или из 10000 элементов типа Char}

Этот оператор позволяет изменять значение переменных.

<присваивание>::= <имя> [<квалификатор>] ":=" <выражение>.

Знак присваивания := используется только в операторах присваивания и является их признаком.

Квалификатор указывает на часть сложной переменной.

Оператор выполняется следующим образом: вначале вычисляется выражение, затем его значение заносится в переменную (или в часть сложной переменной) слева от знака присваивания.

<выражение>::= [<знак>] <терм> {<аддитивная операция> <терм>}.

<знак>::= "+"|"–"|"Not".

<аддитивная операция>::= "+"|"–"|"Or".

<терм>::= <фактор> {<мультипликативная операция> <фактор>}.

<мультипликативная операция>::= "*"|"/"|"div"|"mod"|"and".

<фактор>::= <константа> | <переменная> [<квалификатор>] | <отношение> | <вызов функции> | "(" <выражение> ")".

<отношение>::= <выражение> <операция отношения> <выражение>.

операция отношения>::= "=" | ">" | "<" | ">=" | "<=" | "< >" | "In".

Вызов функции будет определен позднее, в разделе о процедурах и функциях.

Квалификатор разный у разных сложных типов. Пока дадим определение квалификатора массивов:

<квалификатор элемента массива>::= "[" <индексное выражение> {"," < индексное выражение > } "]".

Здесь индексное выражение – это выражение того же типа, что и тип соответствующего индекса массива, или совместимого с ним типа (см. ниже о совместимых типах).

Выражение справа от знака присваивания должно быть того же типа, что и переменная слева от знака, либо совместимого типа, т.е., такого типа, который может быть приведен к типу переменной. Например, целый тип может быть приведен к вещественному, но не наоборот. Любой диапазон на целом типе может быть приведен к целому типу, но обратное приведение не всегда возможно.

Выражение может употребляться не только в операторе присваивания, но синтаксис его всегда такой, как описано выше. Общий вид выражения возможен только для арифметических и логических выражений, образующих результат вещественного, целого или булевского типа.