Оператор присваивания и выражения
Оператор присваивания относится к простым операторам и его синтаксис, и семантика определяются следующей синтаксической диаграммой:
По этому оператору переменной присваивается значение выражения. Несмотря на кажущуюся простоту оператора присваивания, при его выполнении осуществляется целый набор элементарных действий:
1. переменные выражения получают свои значения;
2. вычисляется значение выражения;
3. переменной присваивается полученное значение.
В простейшем случае, когда выражение задано константой или другой переменной, вычислений не производится и переменная сразу получает свое значение.
Например:
RAZN := A - 3.5;
N := 25; C := D; Y := 'программа';
L := true; P := X > 10.
В языке Паскаль существует несколько типов выражений: арифметические, литерные, логические (булевские). В этом пункте мы рассмотрим только арифметические выражения.
Арифметические выражения складываются из констант, переменных, стандартных функций с использованием скобок и знаков операций. В Tурбо-Паскале определены следующие операции над числами:
* , / , + , - , 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(3.14)=3;
ROUND(5.8)=6; TRUNC(-7.7)=-7;
TRUNC(3.14)=3; ROUND(-7.7)=-8.
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.
3.2. Операторы процедур. Ввод/вывод информации
Оператор процедуры определяет активизацию процедуры, обозначенную с помощью идентификатора (имени) процедуры. Другими словами, с помощью операторов этого типа осуществляется вызов процедур с указанием в них входных и выходных параметров (подробнее об этом будет сказано в разделе "Процедуры"). Мы начнем знакомство с операторами-процедурами на базе организации ввода/вывода данных в языке Паскаль.
Для организации ввода и вывода данных используются следующие встроенные (машинные) процедуры: READ, WRITE, READLN, WRITELN.