ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Параметры-процедуры и параметры-функцииТурбо Паскаль позволяет рассматривать функции и процедуры как объекты, которые можно присвоить переменным и которые могут выступать в качестве параметров. Как только процедурный тип определен, можно объявлять переменные этого типа. Такие переменные называются процедурными переменными. Они могут быть использованы в качестве формальных параметров при вызове процедур и функций. Подобно тому, как целочисленной переменной можно присвоить целочисленное значение, процедурной переменной можно присвоить процедурное значение. Как и во всех других операциях присваивания, переменная в левой части и переменная в правой части оператора присваивания должны быть совместимыми по присваиванию. для того чтобы считаться совместимыми по присваиванию, процедурные типы должны иметь одинаковое число параметров, параметры в соответствующих позициях должны быть тождественных типов; наконец, типы результатов функций должны быть идентичны. Процедуры и функции должны быть объявлены с директивой Far (использование дальнего типа вызова подпрограмм) и откомпилированы в состоянии {$F+}. А также они не должны быть: стандартной подпрограммой; вложенной подпрограммой; Inline процедурой или функцией (п/программы, записанные в машинных кодах); Interrupt процедурой или функцией (п/программы обработки прерываний). При использовании параметров-процедур или параметров-функций в списке перед соответствующими формальными параметрами указывается зарезервированное слово Procedure или Function. Например, Procedure Exampl(k,l: integer; Var M: real; Procedure Prob; Function Step: real); В списке формальных параметров процедуры Exampl: k, l – параметры-значения; M – параметр-переменная; Prob – параметр-процедура; Step – параметр-функция. При вызове подпрограммы на место формальных параметров-процедур и параметров-функций осуществляется подстановка соответствующих фактических процедур или функций. Параметры процедурного типа особенно полезны в ситуациях, когда над множеством процедур или функций выполняются общие действия. Например, посмотрите программу, которая с помощью одной и той же процедуры печати таблицы выводит на экран три таблицы арифметических функций (сложения, умножения и произведения суммы на разность чисел), каждая из которых выполняется отдельной функцией. Program ProcType; Type Func=Function(x, y: integer): integer;{Описание процедурного типа} {$F+};{Директива компилятору на использование дальнего типа вызова п/программ} {- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -} Function Add(x, y:integer): integer; Begin Add:= x+y; End; {- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -} Function Mult(x, y:integer): integer; Begin Mult:= x+y; End; {- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -} Function Funny(x, y:integer): integer; Begin Funny:= (x+y)*(x-y); End; {- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -} {$F-}; Procedure Tab(w,h: integer; Operation: Func); Var x, y: integer; Begin for y:= 1 to w do begin for x:= 1 to w do write(Operation(x,y):5); writeln; end; End; {- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -} Begin Tab(10,10,Add); Tab(10,10,Mult); Tab(10,10,Funny); End. В данной программе процедура Tab представляет собой общее действие, выполняемое над параметрами-функциями Add, Mult, Funny. После запуска программы сначала вызывается процедура Tab для фактических параметров 10, 10 и Add, в результате чего формальным параметрам х и y присваиваются значения чисел 10 и 10, а формальному параметру Operation процедурного типа Func присваивается имя фактической функции Add. В результате этого на экран будет выведена таблица сложения от 1 до 10. Затем процедура Tab вызывается к исполнению для фактических параметров 10, 10 и параметра-функции Mult, в результате этого на экран будет выведена таблица умножения от 1 до 10. Аналогично вызов процедуры Tab с параметрами 10, 10 и Funny даст в результате на экране таблицу произведения суммы на разность чисел от1 до 10. Задание. Введите текст этой программы, запишите полученный файл на диск и откомпилируйте его. после того как компиляция выполнится успешно, исполните программу в пошаговом режиме с заходом в процедуры и пронаблюдайте за вызовом функций вычисления суммы, произведения двух чисел или произведения их суммы и разности. Обратите внимание на исполнение оператора write(Operation(x,y):5), как в зависимости от фактического значения параметра-функции Operation процедурного типа Func осуществляется вызов различных функций Add, Mult или Funny. Попробуйте удалить строку с директивой компилятору об использовании дальнего типа вызова или возьмите в фигурные скобки описание процедурного типа Func и пронаблюдайте за результатом. В случае появления ошибок нажатием клавиши F1 получите справку о причинах ошибки и рекомендацию на коррекцию. Не нашли, что искали? Воспользуйтесь поиском:
|