Числовой переменной нельзя присвоить булевское значение, символьной переменной - численное значение. Поэтому операторы 1 и 2 не могут быть выполнены, здесь нарушается требование совместимости по присваиванию.
В правой части оператора 3 - вещественное значение, в левой части - целочисленная переменная. Если допустить выполнение такого оператора, то дробная часть вещественного значения должна быть отброшена, т.е. произошла бы потеря точности. В связи с этим считается, что в операторе 3 также нарушаются требования совместимости по присваиванию.
В операторе 4 потеря точности не наблюдается. При его выполнении производится лишь преобразование целочисленного значения, полученного при вычислении выражения в правой части оператора, к типу real.
Обозначим тип переменной в левой части Type1, тип значения выражения - Type2.
Основные требования совместимости по присваиванию:
- Type1 и Type2 имеют тождественные типы и ни один из них не является файловым типом;
Более жесткие требования должны соблюдаться, когда в левой и правой частях оператора присваивания записаны составные переменные, в частности, массивы.
Пример 4.
TypeAr1 = array[1..100] of real;
Ar2 = array[1..100] of real;
Ar3 = Ar1;
VarX,Y : Ar1; Z : Ar2; W : Ar3;
Здесь типы Type1 и Type2 должны быть тождественными. Следовательно, в этом случае операторы Y:=X и Y:=W являются допустимыми, в то время как для оператора Y:=Z будет определено несоответствие типов.
Рассмотрим теперь процедуру, в списке формальных параметров которой имеются параметры-значения.
Пример 5.
Var x,y : real;
m,n : integer;
Procedure Proc2(k:integer; r,t:real);
Begin
.............
End { Proc2 };
Begin
.............
{ 1 } Proc2(m,n-1,x+m);
{ 2 } Proc2(y,x+y,x);
Для параметра-значения в теле процедуры выделяется поле памяти в соответствии с его типом. При обращении к процедуре в это поле пересылается значение фактического параметра; другими словами, формальному параметру присваивается значение фактического параметра. Следовательно, по отношению к параметру-значению должны соблюдаться изложенные выше требования совместимости по присваиванию. В частности, в примере 5 для оператора 1 эти требования соблюдаются, для оператора 2 - не соблюдаются.