Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2,3,4,14,16 вопросы ПО програмированию.doc
Скачиваний:
9
Добавлен:
03.08.2019
Размер:
72.7 Кб
Скачать

16 Вопрос

Кроме перечисленного типа можно вводить ограниченные или интервальные типы.

Пример:

Type

Year = 1900..2000;

Letter = "A".."Z";

Левая и правая константы задают диапазон значений и их называют соответственно верхней и нижней границей ограниченного типа.

Константы в определении ограниченного типа должны относиться к одному и тому же базовому типу (целому, символьному, порядковому).

Базовый тип констант определяет допустимость операций над данными ограниченного типа.

Пример:

Type

Days = (Mo, Tu, We, Th, Fr, Sa, Su);

WeekEnd = Sa..Su;

Var

W: WeekEnd;

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

Begin

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

W:= Sa;

. . . . . . . . . . . ,

Так как тип-диапазон наследует все свойства базового типа, но с ограничениями, связанными с его меньшей мощностью,

то Ord(W) вернёт значения S , в то время как Pred(W) приведёт к ошибке.

И перечисляемый и ограниченный типы относят к простому типу.

Простой тип - это такой тип, который в некоторый момент времени хранит только одно значение.

Low (функция)

Возвращает самое низкое значение диапазона параметра.

Объявление

Function Low(X) : <тип параметра>;

Режим

Windows, Real, Protected

Замечания

Тип результата равен типу параметра X или индексному типу параметра X, где X является идентификатором типа или ссылкой на переменную.

Для этого типа: Low возвращает

Перечислимый тип самое низкое допустимое значение типа

Массив самое низкое допустимое значение индекса массива

Строковый тип возвращает 0

Открытый массив возвращает 0

Строковый параметр возвращает 0

{ Пример программы для функции Low }

var

A : array[1 .. 100] of Integer;

I : Integer;

type TDay = (Monday, Tuesday, Wednesday, Thursday,

Friday, Saturday, Sunday);

const DayName : array[TDay] of String [2] =

('Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб', 'Вс');

var

Day : TDay;

Hours : array[TDay] of 0 .. 24;

begin

for I := Low(A) to High(A) do

A[I] := 0;

for Day := Low(TDay) to High(TDay) do

begin

Write('Сколько часов проработал в ', DayName[Day], ' ? ');

ReadLn(Hours[Day]);

end;

end.

High (функция)

Возвращает самое высокое значение в диапазоне параметра.

Объявление

Function High(X) : <тип параметра>

Режим

Windows, Real, Protected

Замечания

Тип результата равен типу параметра X или индексному типу параметра X, где X является идентификатором типа или ссылкой на переменную.

Для этого типа: High возвращает

Перечислимый тип самое высокое допустимое значение типа

Массив самое высокое допустимое значение индекса массива

Строковый тип обьявленную длину строки

Открытый массив значение типа Word, содержащее число элементов в

открытом массиве минус один.

Строковый параметр значение типа Word, содержащее число элементов в

строковом параметре минус один

{ Пример программы для функции High }

procedure Sum(X : array of Real) : Real;

var

I : Word;

S : Real;

begin

S := 0;

for I := 0 to High(X) do

S := S + X[I];

Sum := S;

end;

Приведение типов переменных

Ссылка на переменную одного типа может быть преобразована в

ссылку на переменную другого типа с помощью приведения типов пе-

ременных.

┌─────────────┐ ┌───┐ ┌──────────┐ ┌───┐

приведение ───>│идентификатор├──>│ ( ├──>│ссылка на ├──>│ ) ├─>

типов │ типа │ └───┘ │переменную│ └───┘

└─────────────┘ └──────────┘

Когда приведение типов применяется к ссылке на переменную,

ссылка на переменную рассматривается как экземпляр типа, предс-

тавленного идентификатором типа. Размер переменной (число байт,

занимаемых переменной) должен быть равен размеру типа, представ-

ленного идентификатором типа. После приведения типа переменной

можно указать один или несколько квалификаторов, если это допус-

кается указанным типом.

Примечание: Определять допустимость приведения типа

должен программист.

Приведем несколько примеров приведения типов переменных:

type

TByteRec = record

lo, hi: byte;

end;

TWordRec = record

low, high: word;

end;

TPtrRec = record

ofs, seg: word;

end;

PByte = ^Byte;

var

B: byte;

W: word;

L: longint;

P: pointer;

begin

W := $1234;

B := TByteRec(W).lo;

TByteRec(W).hi := 0;

L := $1234567;

W := TWordRec(L).lo;

B := PByte(L)^;

P := Ptr($40,$49);

W := TPtrRec(P).seg;

Inc(TPtrRec(P).Ofs,4);

end.

Обратите внимание на использование для доступа к младшим и

старшим байтам слова типа TByteRec: это соответствует встроенным

функциям Lo и Hi, только над левой частью в операции присваивание

может выполняться приведение типа. Отметим также, что для доступа

к младшим и старшим словам длинного целого, а также к смещению и

адресу сегмента указателя используются типы TWordRec и TPtrRec.

Borland Pascal также полностью поддерживает приведение типов

для процедурных типов. Например, имея следующие описания:

type

Func = function(X: Integer): Integer;

var

F: Func;

P: Pointer;

N: Integer;

вы можете построить следующие присваивания:

F := Func(P); { присвоить F значение процедурного типа в P }

Func(P) := F; { присвоить P значение процедурного типа в F }

@F := P; { присвоить F значение-указатель в P }

P := @F; { присвоить P значение-указатель в F }

N := F(N); { вызвать функцию через F }

N := Func(P)(N); { вызвать функцию через P }

Обратите в частности внимание на операцию получения адреса

@, которая применяется к переменной процедурного типа. Ее можно

использовать в левой части присваивания. Кроме того, отметьте

приведение типа на последней строке при вызове функцию через пе-

ременную-указатель.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]