Совместимость по присваиванию необходима, если имеет место присваивание значения, например, в операторе присваивания или при передаче значений параметров.
Значение типа Т2 является совместимым по присваиванию с типом Т1 (т.е. допустимо Т1:=Т2),если выполняется одно из следующих условий:
Т1 и Т2 имеют тождественные типы, и ни один из них не является файловым типом или структурным типом, содержащим компоненту с файловым типом на одном из своих уровней.
Т1 и Т2 являются совместимыми порядковыми типами и значения типа Т2 попадают в диапазон возможных значений Т1.
Т1 и Т2 являются вещественными типами и значения типа Т2 попадают в диапазон возможных значений Т1.
Т1 является вещественным типом, а Т2 является целочисленным типом.
Т1 и Т2 являются строковыми типами.
Т1 является строковым типом, а Т2 является типом Char.
Т1 и Т2 являются совместимыми типами множеств, и все значения типа Т2 попадают в диапазон возможных значений Т1.
Т1 и Т2 являются совместимыми типами указателей.
На этапе компиляции и выполнения выдается сообщение об ошибке, если совместимость по присваиванию необходима, а ни одно из условий предыдущего списка не выполнено.
|
|
^
Приведение типа
Тип выражения, как и переменной, можно изменить на другой тип с помощью приведения типа. Тип выражения и задаваемый тип должны оба иметь порядковый тип или тип указателей.
^ Некоторые примеры приведения типа значений:
Integer('A')
Char(48)
Boolean(0)
Color(2)
Longint(@Buffer)
BytePtr(Ptr($40, $49))
Примеры вычисления выражений и приведения типов:
var x: boolean;
y: word;
z: byte;
begin
z:=3; (* 3*)
y:=$FFF3; (*65523*)
{x:=z; ошибка, недопустимый тип операнда!}
x:=boolean(y); (* TRUE, явное приведение типа *)
z:=y; (* 234, неявное приведение типа.
вызовет ошибку при выполнении из-за переполнения,
если не отключить контроль границ *)
y:= y shr z; (* 0*)
x:= y>z; (*FALSE*)
x:= z shl 2 + y>0 and z shr 2 - 3; (* FALSE,
хотя выражение в окне Watch - TRUE! *)
end.
2.6. Операторы ввода/вывода.
ТП содержит четыре оператора ввода/вывода: read, readln, write, writeln.
Оператор read осуществляет ввод данных с клавиатуры и размещение их в стандартном файле ввода input. Вводимые данные размещаются в качестве значений переменных, имена которых перечислены в круглых скобках за оператором read.
read (a, b, c);
Вводятся данные тоже списком, в котором они разделяются пробелом. Ввод заканчивается нажатием Enter. Курсор, отмечающий позицию следующего ввода/вывода остается за последним введенным данным.
Оператор readln выполняет аналогичные действия и переводит курсор на следующую строку.
Оператор write осуществляет вывод на экран или печатающее устройство с одновременным размещением в стандартном файле вывода output. Оператор может выводить сообщение или значение переменной. Сообщения записываются в апострофах. Для вывода значения переменной указывается имя переменной. Сообщения и переменные можно чередовать в одном списке, разделяя их запятыми. Курсор остается за последним выведенным данным.
Оператор writeln выполняет аналогичные действия и переводит курсор на следующую строку.
Операторы write и writeln допускают т.н. форматированный вывод данных.
write (a:5:2);
Первое из чисел указывает сколько экранных знаков отводится под вывод. Второе число указывает количество знаков после запятой в числе и может отсутствовать.
|
|