Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / Pascal и Delphi / Иллюстрированный самоучитель по Delphi 6 / Часть II . Язык Object Pascal / Процедуры и функции /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


Процедурные типы - Программирование от RIN.RU
Процедурные типы

Основное назначение процедурных типов - дать программисту гибкие средства передачи функций и процедур в качестве фактических параметров обращения к другим процедурам и функциям.


Для объявления процедурного типа используется заголовок процедуры (функции), в котором опускается ее имя, например:


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
Func = function (X: Real): Real; // Процедурный тип Procedure PrintFunc(NP: Integer; F; Func) ;
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;


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




 8  Комментарии к статье  8 8  Обсудить в чате

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь