В Паскале оператор присваивания не всегда работает, даже если он написан синтаксически верно. Когда мы производим вычисления с известными числами, результат известен и проблем не возникает. С переменными же все проходит не всегда так гладко, поскольку переменные типов Integer и Real хранятся по-разному (занимают разный объем памяти).
Компьютер устроен так, что выполнять действия он может только с одинаковыми объектами.
Возьмем следующую программу:
program wrong;
var
а: = Integer;
b: = Real;
begin
b: = 2;
a: = 2.9; {Здесь содержится ошибка!}
end.
Если набрать эту программу и попробовать ее оттранслировать, получим сообщение об ошибке Туре mi smatch. Курсор при этом укажет на ту строку, у которой в комментарии сказано, что здесь содержится ошибка. В переводе на русский язык сообщение означает Нарушение соответствия типов. Давайте разберемся в причинах появления данного сообщения. В первом операторе переменной вещественного типа присваивается целое число 2. Ошибки здесь нет, поскольку произойдет так называемое преобразование типа, при котором число 2 будет представлено в виде десятичной дроби 2.0 и записано в b. А наоборот нельзя - в целую переменную «а» дробное число 2.9 не запишется, и транслятор выдаст ошибку.
Такие ситуации возникают очень часто, и сложнее всего бывает разобраться со случаем, когда используется операция деления «/» (например, что будет с результатом f / 2, где f - целое число?).
Существует несколько правил, два из которых уже были описаны ранее (в переменную вещественного типа можно записать целое число, а наоборот - нельзя). Остальные правила, касающиеся выполнения арифметических операций, представлены в табл. 1.2.
Таблица 1.2.
Правила выполнения, арифметических операций языка Паскаль
Что делать, если надо получить в результате целое число, пусть даже округленное? В этом случае можно воспользоваться одной из двух встроенных функций Паскаля: Trunc(а) или Round (а).
Встроенные функции пока можно считать обычными операторами языка Паскаль. Здесь Trunc отбрасывает дробную часть аргумента, a Round округляет его по правилам математики до ближайшего целого.