Когда в тех или иных операциях или операторах присутствуют данные, относящиеся к различным типам, возникает вопрос о соответствии типов. В связи с этим говорят об идентичности типов, совместимости типов и совместимости типов для присваивания. Когда возникают проблемы с соответствием типов данных, можно осуществить преобразование тех или иных типов. Эти вопросы и будут рассмотрены в данном разделе. 9.1. Идентичность типов Идентичность типов требуется от формальных параметров процедур и функций и соответствующих им фактических параметров во время вызова. Два типа Т1 и Т2 идентичны в следующих случаях: - Т1 и Т2 - один и тот же идентификатор типа (например, Integer, Real и т.д.); - один тип объявляется эквивалентным другому. Пример. type Tl = Boolean; Т2 = Т1; ТЗ = Boolean; Все типы: Tl, T2, ТЗ и Boolean - идентичные типы. type Ml = array[1..5] of Integer; M2 = array[1..5] of Integer; Типы Ml и М2 - не идентичные типы. Однако VI и V2 - переменные идентичных типов: var VI, V2: array[1..5] of Integer; 9.2. Совместимость типов Совместимость типов требуется в выражениях (в том числе и в операциях отношения). Два типа Т1 и Т2 совместимы в следующих случаях: - Т1 и Т2 - один и тот же тип или они идентичны; - Т1 и Т2 - вещественные типы; - Т1 и Т2 - целые типы; - один тип - вещественный, а другой - целый; - один тип представляет собой тип-диапазон другого; - оба типа являются типами-диапазонами какого-то одного типа; - оба типа являются типами-множествами с совместимыми базовыми типами; - один тип является строкой, а другой - строкой или символом; - один тип - Pointer, а другой - любой тип-указатель; - один тип PChar, а другой - массив символов, заканчивающийся символом с кодом 0 (только при наличии ключа компилятора ($Х+) - см. п. 17.7.1); - оба типа являются указателями, полученными с помощью адресной операции @, примененной к величинам идентичных типов (только при наличии ключа компилятора