Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
paskal.doc
Скачиваний:
71
Добавлен:
10.06.2015
Размер:
1.28 Mб
Скачать

Параметр процедурного типа

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

Например:

Type

Func = function(x,y:byte):byte;

Proc = procedure(var x,e:byte);

var

P1 : Proc; F1: Func;

При этом должны совпадать число параметров и соответственно типы параметров. Всем процедуры и функции, имена которых присваиваются процедурным переменным, необходимо компилировать в режиме {$F+}.

Описание процедурных типов вводится в разделе Type. Синтаксис описания совпадает с заголовком процедуры, однако имя процедуры в описании опускается.

Имена параметров в описании процедурного типа играет чисто иллюстративную роль. Никакого влияния на значение этого описания данные имена не оказывают.

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

Для обеспечения такой совместимости процедура, если её нужно присвоить процедурной переменной, должна удовлетворять следующим требованиям:

  1. Она должна компилироваться в состоянии {$F+} (в исходном тексте программы перед описанием такой процедуры должна быть размещена директива компилятора {$F+}, а в конце описания {$F-})

  2. Она не должна быть стандартной процедурой или функцией.

  3. Она не должна быть вложенной.

  4. Она не должна быть процедурой типа inline.

  5. Она не должна быть процедурой прерывания (interrupt).

Пример 3.

Program Primer3;

Type

Func=function(x,y:anteger):integer;

{$F+}

Function Add(a,b:integer):integer;

Begin

Add:=a+b;

end;

Function Multiplay(a,b:int):int;

Begin

Multiplay:=a+b;

end;

Function Div(a,b:int):int;

Begin

Div:=a/b;

end;

{$F-}

Procedure RAB(n,m:integer;Operation:Func); {Operation-параметр процедурного типа}

Var

i,j:integer;

Begin

for i:=1 to n do

for j:=1 to m do

write(operation (i,j):5);

end;

Begin {основная программа}

RAB(10,10,Add); {вызов процедуры RAB с последним параметром- процедурой Add}

RAB(20,10,Multiplay); ); {вызов процедуры RAB с последним параметром- процедурой Multiplay}

RAB(10,5,Div); ); {вызов процедуры RAB с последним параметром- процедурой Div}

End.

Порядок выполнения работы

  1. Изучить теоретические сведения по теме “ Разработка программы для работы с процедурным типом”.

  2. Получить у преподавателя индивидуальное задание и разработать программу для работы с процедурными типами данных согласно заданному варианту.

  3. Показать работающую программу преподавателю.

  4. Ответить на контрольные вопросы.

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

  1. Нетипизированный параметр. Способы присвоения конкретного типа нетипизированному параметру.

  2. Назначение процедурной переменной, объявление.

  3. Обеспечение совместимости процедуры, если её нужно присвоить процедурной переменной.

Литература

  1. Гусева А. И. Учимся программировать: Pascal7.0.- М.: Бином, 1999.

  2. Сурков Д.А., и др. Программирование в средеBorlandPascalдляWindows.-Мн.: “Вышэйшая школа”, 1996.

  3. Грызлов В.И. и др. Pascal 7.0.- Киев, BHV, 1999.

  4. Вирт Н. Алгоритмы и структуры данных –М.: “Мир”, 1989

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