ТОЖДЕСТВЕННОСТЬ И СОВМЕСТИМОСТЬ ТИПОВ.

СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ.

ИНТЕРВАЛЬНЫЙ ТИП (ДИАПОЗОН).

Интервальный тип позволяет задавать две константы, определяющие границы диапазона значений для данной переменной. Обе константы должны принадлежать одному из стандартных типов (применение типа real недопустим). Значение первой константы должно быть обязательно меньше значения второй.

Формат:

type <имя типа> = <константа1> .. <константа2>;

var<идентификатор, …> : <имя типа>;

Например:

type month = (jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec);

Следует решать задачи, связанные только с летним временем года. Тогда можно ввести интервальный тип

type summer = jun .. aug;

который является частью (отрезком) типа month, из которого был «вырезан» тип summer.Тип month является базовым относительно типа summer.

varday : summer;

При определении интервального типа указывается начальное и конечное значения, которые может принимать константа базового типа на этом отрезке, разделенные двумя точками (..). При этом должны выполняться следующие правила:

1. Обе граничные константы должны быть одинакового типа.

2. В качестве базового типа можно использовать любой простой тип данных, кроме действительного (real).

3. Начальное значение при определении интервального типа не должно быть больше конечного значения.

4. Переменные интервального типа должны быть описаны в разделе переменных с помощью имен этих типов.

 

Структурированные типы данных определяют упорядоченную совокупность скалярных переменных и характеризуются типом своих компонентов. В языке Pascal допускаются следующие структурированные типы данных: строки, массивы, множества, записи, файлы, указатели, процедурные типы и объекты.

 

Для того чтобы в результате выполнения программы не получилось путаницы с величинами различного типа, например, когда цена корзины с продуктами равна расстоянию от дома до магазина, умноженному на количество этажей дома, в котором живете, от программиста требуется знать и правильно применять понятия тождественности и совместимости типов величин, участвующих в операциях – операндах. Два типа являются тождественными, если они описаны вместе или если их определения используют один и тот же идентификатор типа.

Тождественность типов требуется только для переменных фактических и формальных параметров при вызове процедур и функций. Совместимость типов играет важнейшую роль в выражениях и операциях сравнения и в операторах присваивания.

В операции сравнения два типа являются совместимыми, если соблюдаются хотя бы одно из следующих условий:

- оба типа являются одинаковыми;

- оба типа являются вещественными типами;

- оба типа являются целочисленными;

- оба типа являются поддиапазоном другого;

- оба типа являются поддиапазоном одного и того же основного типа;

- оба типа являются множественными типами с совместимыми базовыми типами;

- оба типа являются строковыми типами с одинаковым числом компонентов;

- один тип является строковым, а другой тип – строковым или символьным типом;

- один тип является указателем, а другой тип – любым типом указателей.

Пример:

‘a’>’b’ {допустимо, так как оба значения относятся к типу char};

‘a’>5 {ошибка, так как сравниваемые значения имеют разные типы}.

В операциях присваивания два типа являются совместимыми, если соблюдается хотя бы одно из следующих условий:

- оба типа тождественны, и ни один их них не является файловым или структурным типом, содержащим компоненты с файловым типом на одном из своих уровней;

- оба типа являются совместимыми скалярными типами, и значения второго типа попадают в диапазон возможных значений первого;

- оба типа относятся к вещественным типам, и значения второго типа попадают в диапазон возможных значений первого;

- первый тип является вещественным, второй – целочисленным;

- оба типа являются строковыми;

- первый тип является строковым, второй – литерным;

- оба типа относятся к совместимым множественным типам, и все члены значения второго типа попадают в диапазон возможных значений первого типа;

- оба типа относятся к совместимым типам «указатель».

Пример:

var A,B,:integer;

C:real;

. . . . . . . . . . . . .

A:=B; {правильно}

C:=B; {правильно}

A:=C; {ошибка}