Оператор присваивания и выражения
Операторная часть программы или тело программы представляет собой последовательность операторов, разделенных точкой с запятой. Простейшим оператором является оператор присваивания. Оператор присваивания служит для назначения данной переменной данного значения. Формат этого оператора следующий:
<выражение - мишень присваивания> := <выражение>
Мишень присваивания - это либо имя переменной, либо индексированный элемент массива (вида a[n]), либо поле записи, либо ссылка на значение (вида p^, см. раздел 6.Указатели). Две литеры “:=“ называются знаком присваивания. Выражением в правой части присваивания является либо запись константы, либо имя другой переменной или константы, либо формула, служащая для вычисления присваиваемого значения. Типы выражений в правой и левой части присваивания должны быть согласованы. В большинстве случаев они должны быть равны. Допускается два различных целых типа или два различных вещественных типа в обеих частях присваивания, а также присваивание целого типа вещественной переменной.
Формальное определение выражения основывается на принципе индукции (по-другому, рекурсии). Выражения строятся от простого к сложному. Элементарное выражение - это запись числовой или строковой константы, значение логического типа true или false, разрешенное значение перечислимого типа, имя переменной или константы. конструктор множества. Простое выражение - это либо элементарное выражение, либо любое выражение, заключенное в круглые скобки, либо вызов функции, имеющий синтаксис
<имя функции> ( <список параметров через запятую> ).
Составное выражение представляет собой последовательность простых выражений, разделенных символами операций.
Числовые константы делятся на десятичные и шестнадцатиричные целые, вещественные в формате с фиксированной точкой и вещественные в экспоненциальном формате. Чтобы отличить запись целого шестнадцатиричного числа от десятичного, перед числом ставится знак доллара “$”, например: $12, $ABCDEF.
Вещественное число в формате с фиксированной точкой записывается в виде: целая часть, точка, дробная часть (без пробелов). В экспоненциальном формате число предварительно представляется в виде m*10n, где m называется мантиссой, а n
- порядком числа (n - целое). Сначала записывается мантисса в формате с фиксированной точкой, затем символ “E” и затем порядок в формате целого числа. Примеры числовых констант: 1, 55, 999999, 3.1415926, 2.71828, 0.5E-3.
Строковая константа - это произвольная последовательность символов, заключенная в кавычки: ‘Текст’. Если сама константа содержит кавычки, то для правильного ее задания кавычки внутри константы должны быть удвоены: запись ’Переведите слово ’’function’’ на русский язык’ означает текст: Переведите слово ’function’ на русский язык. Вместо записи символа внутри текстовой константы можно употреблять комбинацию символа # (решетки) и кода символа. Например, вместо ‘c’ можно написать #99, а вместо ‘S’ можно написать #83. В итоге может получиться запись типа ‘код_символа’#101’or’#80.
Конструктор множества - это список элементов множества, заключенный в квадратные скобки. Элементы множества отделяются друг от друга запятыми. Допускается запись диапазона вместо элемента: [1,3..7,7,13..21,90], [white..black, red], [ ].
Составное выражение - это несколько простых выражений , между которыми располагаются знаки операций. Знак операции может стоять и перед всем выражением. Операции бывают унарные и бинарные. Унарные опрации имеют один операнд, который располагается после знака операции. Бинарные операции имеют два операнда, и символ операции располагаются между операндами. Если в составном выражении более двух компонентов, то возникает проблема, какие операции выполнять вначале. Для того, чтобы разрешить возникающие при этом противоречия, вводится понятие старшинства или приоритета операций. Операции с большим приоритетом выполняются раньше, операции с одинаковым приоритетом выполняются слева направо.
Все операции согласно их старшинству разбиты на четыре группы:
1. @ - переход от значения к указателю на значение;
not - логическое отрицание;
2. * - умножение целых и вещественных чисел, пересечение множеств;
/ - деление чисел;
div - деление целых чисел с остатком;
mod - остаток от деления целых чисел;
and - конъюнкция логических значений (и);
shl - сдвиг двоичного представления целого числа влево;
shr - сдвиг двоичного представления целого числа вправо;
3. + - сложение целых и вещественных чисел, объединение множеств, конкатенация строк;
- - вычитание целых и вещественных чисел, дополнение множеств:
or - дизъюнкция логических значений (или);
xor - эксклюзивная дизъюнкция логических значений (исключающее или);
4. = - проверка равенства;
<> - проверка неравенства;
< - меньше;
> - больше;
<= - меньше или равно;
>= - больше или равно;
in - элемент содержится в множестве.
Следует отметить, что один знак может использоваться для обозначения различных операций. Противоречия здесь не возникает потому, что все переменные и константы строго типизированы и из контекста операции (по типу операндов) транслятор автоматически узнает, какая операция имеется в виду.
Выражение, кроме правой части оператора присваивания, может встретиться также при вызове функций и процедур в качестве значения фактического параметра.
Допускается присваивание массивов или записей одинакового типа, при этом происходит копирование всех элементов массива или полей записи в правой части присваивания элементам массива или полям записи в левой части присваивания. Примеры присваиваний:
type
color = (white, black, red, blue, green, yellow, brown);
array1 = array [0..10] of integer;
record1 = record xx,yy: real;
nn: color
end;
set1 = set of color;
const
ca: array1 = (2,4,56,-2,45,-34,678,4,-3,0,3);
cr: record1 = (1.0, 1.456, green);
var
x: real;
b1: boolean;
c1: string;
a1: array1;
s1:set1;
r1: record1;
begin
x := 3.1415926; {Присваивание вещественного значения}
a1 := ca; { Копирование массива целиком из ca в a1}
b1 := ( (x>3) and (a1[9]=0) ); {В данном случае b1 станет равным true}
c1 := ‘Пример строки’ {Присваивание строки символов}
a1[9] := 7; {Присваивание 9-му элементу массива a1}
s1 := [red, blue, green]; {Присваивание множества}
r1 := cr; {Копирование записи целиком из cr в r1}
r1.yy := 2.719281928; {Присваивание значения полю yy
записи r1}
r1.nn := white; {Присваивание значения полю nn записи r1}
end;