Процедурные типыDelphi , Компоненты и Классы , Процедуры и ФункцииПроцедурные типыОсновное назначение процедурных типов - дать программисту гибкие средства передачи функций и процедур в качестве фактических параметров обращения к другим процедурам и функциям. Для объявления процедурного типа используется заголовок процедуры (функции), в котором опускается ее имя, например: type Proc1 = procedure(a, b, с: Real; var d: Real); Proc2 = procedure(var a, b); РгосЗ = procedure; Func1 = function: string; Func2 = function(var s: string): Real; Как видно из приведенных примеров, существует два процедурных типа: тип-процедура и тип-функция. В следующий программе иллюстрируется механизм передачи процедур в качестве фактических параметров вызова. Программа выводит на экран таблицу двух функций: sin1 (х) = (sin(x) + 1) * Ехр(-х) и cosi(x) = (Cos(x) + 1) * Ехр(-х) . Вычисление и печать значений этих функций реализуются в процедуре printFunc, которой в качестве параметров передается количество np вычислений функции в диапазоне х от 0 до 2*3.141592 и имя нужной функции. function Sinl(X: Real): Real; begin Result := (Sin(X) + 1) * Exp(-X) end; // Sin 1 function Cosl(X: Real): Real; begin Result := (Cos(X) + 1) * Exp(-X) end; // Cosi procedure TfmExample.bbRunClick(Sender: TObject); type // Процедурный тип Procedure PrintFunc(NP: Integer; F; Func); Func = function(X: Real): Real; var k: Integer; X: Real; begin for k := 0 to NP do begin X := k * 2 * pi / NP; mmOutput.Lines.Add(FloatToStrF(X, ffExponent, 10, 2) + #9#9+ FloatToStrF(F(X), ffExponent, 10, 2)); end; end; // PrintFunc begin // bbRunClick nmiOutput.Lines.Add(#9'Функция SINI:'); PrintFunc(10, Sini); mmOutput.Lines.Add(#9'Функция COSI:'); PrintFunc(10, Cosi); end; Обратите внимание: передаваемые подпрограммы не могут быть локальными, т. е. процедурами или функциями, объявленными внутри другой подпрограммы. Вот почему описание подпрогра^.' sini и cosi размещаются вне обработчика bbRunciick, но выше не." по тексту модуля. Замечу, что символ #9 - это символ табуляции. который вставляется в формируемые строки для разделения колонок с цифрами. В программе могут быть объявлены переменные процедурных типов, например,так: var p1: Proc1; fl, f2: Func2; ар: array[1..N] of Proc1; Переменным процедурных типов допускается присваивать в качестве значений имена соответствующих подпрограмм. После такого присваивания имя переменной становится синонимом имени подпрограммы. Статья Процедурные типы раздела Компоненты и Классы Процедуры и Функции может быть полезна для разработчиков на Delphi и FreePascal. Комментарии и вопросыМатериалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Процедуры и Функции ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |