Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Плещёв ВУМИП 2012-07-06.doc
Скачиваний:
66
Добавлен:
13.05.2015
Размер:
9.35 Mб
Скачать

1.1.9. Процедурные типы

Покажем на примере использование процедурных типов (п.1.3.9).

TypeTSum=Function(A,B:Integer):Integer; //объявление процедурного типа

VarPSum:TSum; //объявление переменной ‑ указателя процедуры

PSum:=Sum; //переменнойPSumприсваивается описание процедурыSum

X:=PSum(1,3); //обращение к функцииSumс аргументами 1, 3

Примериспользования подпрограммы в качестве параметра:

TypeTfun=Function(X,Y:Integer):Integer; //объявление процедурного типа

Function Add(X,Y:Integer):Integer; Begin Result:=X+Y; End; //функция Add

Function Sub(X,Y:Integer):Integer; Begin Result:=X‑Y; End; //функция Sub

Function Fun(X,Y:Integer;Proc:Tfun):Integer; Begin Result:=Proc(X,Y); End;

Writeln(Fun(1,2,Add)); //сложение чисел 1+2=3

Writeln(Fun(1,2,Sub)); //вычитание чисел 1‑2=‑1

Для проверки наличия описания в переменной процедурного типа используется функция Assigned(<процедурная переменная>), которая возвращаетTrue, если описание есть.

1.1.10. Процедурные указатели

Рассмотрим использование процедурных указателей на примерах.

VarX:Pointer; …X:=@Sum; //адрес начала процедурыSumвX

ConstU:Pointer=@Sum; //константа ‑ указатель на функциюSum

Вопросы для самопроверки и контроля

Вопросы для самопроверки

  1. Можно ли переносить на другую строку константы, разрывая их?

  2. Верно ли написано имя переменной «План»?

  3. В чем состоит отличие переменной от константы?

  4. Каково назначение встроенных констант?

  5. Что содержит указатель?

Контрольные вопросы

  1. Какие типы данных хранятся в переменной типа Variant?

  2. Должна ли переменная быть объявлена до ее использования?

  3. Допускается ли массив записей?

  4. Можно ли изменять размер динамического массива при выполнении программы?

  5. Могут ли быть в программе одноименные глобальные и локальные переменные?

  6. Что указывается в качестве уточнителя поля записи?

  7. Что такое указатель‑переменная?

1.2. Операции

1.2.1. Арифметические операции

Сложение (+), вычитание (‑), умножение (*), деление (/), деление на ноль запрещено, целочисленное деление (Div), получение остатка от целочисленного деления (Mod, 11 Mod5 = 1), замена знака значения переменной на противоположный (унарный минус).

Результат деления имеет всегда тип Extended. Для остальных опера­ций ‑ результат типаExtended, если один из операндов имеет типReal, иначе ‑Int64, если один из операндов имеет типInt64 иInteger‑ в остальных случаях.

1.2.2. Операции присвоения и сравнения

К операциям относятся: присвоить значение (:=), равно (=), не равно (<>), меньше чем (<), больше чем (>), меньше или равно (<=), больше или равно ( >=). Результатом сравнения является логическая константаTrue(истина) либоFalse(ложь). В операции сравнения могут участвовать однотипные опе­ранды, кроме Realи Integer, которые сравниваются друг с другом.

1.2.3. Логические операции

Таблица истинности (1‑True, 0‑False)

Значение X

X

0

0

1

1

Значение Y

Y

0

1

0

1

Отрицание

Not X

1

1

0

0

Логическое «и»

X And Y

0

0

0

1

Логическое «или»

X Or Y

0

1

1

1

Исключающее «или»

X Xor Y

0

1

1

0

Результатом логической операции является логическая константа True(истина) либоFalse(ложь).

Имеется два режима вычисления логического выражения:

1. Полный, при котором вычисление производится до конца вы­ра­же­ния (директива компилятора{$B+}).

2. Сокращенный ‑ вычисления заканчивается, если текущий резуль­тат не изменится в дальнейшем ({B}).