По этому оператору переменной присваивается значение выражения. Несмотря на кажущуюся простоту оператора присваивания, при его выполнении осуществляется целый набор элементарных действий:
переменные, находящиеся в выражении, получают свои значения;
вычисляется значение выражения;
переменной слева от знака присваивания «:=» присваивается полученное значение.
В простейшем случае, когда выражение задано константой или другой переменной, вычислений не производится и переменная сразу получает свое значение, например:
RAZN := A – 3.5;
N := 25; C := D; Y := 'программа';
L := true; P := X > 10.
В языке Паскаль существует несколько типов выражений: арифметические, литерные, логические (булевские). В этом пункте мы рассмотрим только арифметические выражения.
Арифметические выражения складываются из констант, переменных, стандартных функций с использованием скобок и знаков операций. В Паскале определены следующие операции над числами: * , / , + , – , DIV, MOD, где DIV – деление нацело; MOD – вычисление остатка от деления. Приоритет:
*, /, DIV, MOD – высший;
+, – – низший.
Например:
A := 13 DIV 5; (результат: A = 2),
B := 13 MOD 5; (результат: B = 3).
Каждое арифметическое выражение может иметь типы INTEGER и REAL. Тип константы определяется самим видом константы, тип переменной задается в ее объявлении.
Тип арифметического выражения определяется по следующему правилу:
1. Для операций «*, +, -» результат имеет тип REAL, если хотя бы один из операндов имеет тип REAL. Если оба операнда типа INTEGER, то и результат имеет тип INTEGER.
2. Для «/» результат всегда имеет тип REAL.
3. Для «DIV, MOD» операнды и результат имеют тип INTEGER.
Значение переменной интервального типа, образованной на основе INTEGER, всегда имеет тип INTEGER. При использовании оператора присваивания нужно соблюдать типизацию объектов слева и справа от знака «:=». Смешение типов недопустимо за исключением случая, когда слева от знака «:=» стоит тип REAL, а справа – тип INTEGER.
В Паскале при написании выражений используются стандартные функции, которые разделяются на следующие виды:
1. Арифметические (математические) функции:
· ABS (X), X – REAL и INTEGER, на выходе тот же тип.
· ARCTAN (X), COS (X), SIN (X), EXP (X), LN (X), SQR (X), SQRT (X).
Для этих функций X есть REAL или INTEGER, а результат всегда REAL.
2. Функции преобразования типов:
· CHR (X), где X – INTEGER (результат – символ, кодом которого является число X), например: CHR (65) = 'А'.
· ORD (X), где X – CHAR (результат – число типа INTEGER), например: ORD ('А') = 65.
Эту функцию можно использовать в определении номера элемента в перечислимом типе. Например, пусть имеется фрагмент программы:
.......................
type DAY = (mo, tu, we, th, fr, sa, su);
var DEN: DAY;
……....................
DEN := tu; I := ORD (DEN);
Значением переменной I будет 1, так как нумерация начинается с нуля.
· ROUND (X), где X – REAL (результат INTEGER – ближайшее целое к X).
· TRUNC (X), где X – REAL (результат INTEGER – целая часть X), например:
TRUNC (5.8) = 5; ROUND (5.8) = 6;
TRUNC (-7.7) = -7; ROUND (-7.7) = -8;
TRUNC (3.14) = 3; ROUND (3.14) = 3.
3. Функции упорядоченных типов:
· PRED (N) – предшествующий N элемент.
Функция не определена, если N – первый по порядку элемент, например: PRED (TU) = MO.
· SUCC (N) – следующий за N элемент.
Функция не определена, если N – последний элемент типа, например, SUCC (MO) = TU.
· ODD (I), где I – INTEGER, результат – BOOLEAN.
Если I – четное, то значение – TRUE; если I – нечетное, то значение – FALSE.
Эти функции работают в области упорядоченных (ординальных) скалярных типов, т.е. всех простых типов, исключая REAL.