Тип выражения. Выполнение инструкции присваивания.
Тип выражения определяется типом операндов, входящих в выражение, и зависит от операций, выполняемых над ними. Например, если оба операнда, над которыми выполняется операция сложения, целые, то очевидно, что результат тоже является целым. А если хотя бы один из операндов дробный, то тип результата дробный, даже в том случае, если дробная часть значения выражения равна нулю.
Важно уметь определять тип выражения. При определении типа выражения следует иметь в виду, что тип константы определяется ее видом, а тип переменной задается в инструкции объявления. Например, константы 0, 1 и -512 – целого типа (integer), а константы 1.0, 0.0 и 3.2Е-05 – вещественного типа (real).
В табл. 1.5 приведены правила определения типа выражения в зависимости от типа операндов и вида оператора.
Таблица 1.5. Правила определения типа выражения.
Оператор | Тип операндов | Тип выражения |
---|---|---|
*, +, - | Хотя бы один из операндов real | real |
*, +, - | Оба операнда integer | integer |
/ | real или integer | Всегда real |
DIV, MOD | Всегда integer | Всегда integer |
Выполнение инструкции присваивания
Инструкция присваивания выполняется следующим образом:
- Сначала вычисляется значение выражения, которое находится справа от символа инструкции присваивания.
- Затем вычисленное значение записывается в переменную, имя которой стоит слева от символа инструкции присваивания.
Например, в результате выполнения инструкций:
- i: = 0; – значение переменной i становится равным нулю;
- а: = b+с; – значением переменной а будет число, равное сумме значений переменных ь и с;
- j: = j+1; – значение переменной j увеличивается на единицу.
Инструкция присваивания считается верной, если тип выражения соответствует или может быть приведен к типу переменной, получающей значение. Например, переменной типа real можно присвоить значение выражения, тип которого real или integer, а переменной типа integer можно присвоить значение выражения только типа integer.
Так, например, если переменные i и п имеют тип integer, а переменная d – тип real, то инструкции: i: = n/10;
i: = 1.0; неправильные, а инструкция: d: = i+1; – правильная.
Во время компиляции выполняется проверка соответствия типа выражения типу переменной. Если тип выражения не соответствует типу переменной, то компилятор выводит сообщение об ошибке:
Incompatible types… and…
Где вместо многоточий указывается тип выражения и переменной. Например, если переменная п целого типа, то инструкция n:= m/2 неверная, поэтому во время компиляции будет выведено сообщение:
Incompatible types 'Integer' and.'Extended'.