→ Пошук по сайту       Увійти / Зареєструватися
Знання Мова програмування Pascal

Процедуры и функции

Алгоритм решения задачи проектируется путем декомпозиции всей задачи в отдельные подзадачи. Обычно подзадачи реализуются в виде подпрограмм.

Подпрограмма - это последовательность операторов, которые определены и записаны только в одном месте программы, однако их можно вызвать для выполнения из одной или нескольких точек программы. Каждая подпрограмма определяется уникальным именем. В языке ПАСКАЛЬ существуют два типа подпрограмм - процедуры и функции.

Процедура и функция - это именованная последовательность описаний и операторов. При использовании процедур или функций ПАСКАЛЬ - программа должна содержать текст процедуры или функции и обращение к процедуре или функции. Тексты процедур и функций помещаются в раздел описаний процедур и функций.

procedure имя_процедуры(параметры:тип);
begin
тело процедуры;
end;
function имя_функции(параметры:тип):тип_возвращаемого значения;
begin
тело_функции;
end;

Процедура может содержать такие - же разделы описаний, что и ПАСКАЛЬ - программа, а именно: разделы описания модулей, меток, констант, типов, переменных, процедур и функций.

ПЕРЕДАЧА ИМЕН ПРОЦЕДУР И ФУНКЦИЙ В КАЧЕСТВЕ ПАРАМЕТРОВ. Во многих задачах, особенно в задачах вычислительной математики, необходимо передавать имена процедур и функций в качестве параметров. Для этого в TURBO PASCAL введен новый тип данных - процедурный или функциональный, в зависимости от того, что описывается.

Описание процедурных и функциональных типов производится в разделе описания типов:

   type
         FuncType = Function(z: Real): Real;
         ProcType = Procedure (a,b: Real; var x,y: Real);

Функциональный и процедурный тип определяется как заголовок процедуры и функции со списком формальных параметров, но без имени. Можно определить функциональный или процедурный тип без параметров, например:

type
         Proc = Procedure;

После объявления процедурного или функционального типа его можно использовать для описания формальных параметров - имен процедур и функций.

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

Пример. Составить программу для вычисления определенного интеграла
          tk
                       2t
             I= S--------------- dt
                   sqrt(1-sin2t)
                       tn

по методу Симпсона. Вычисление подинтегральной функции реализовать с помощью функции, имя которой передается как параметр. Значение определенного интеграла по формуле Симпсона вычисляется по формуле:

  ISimps=2*h/3*(0.5*F(A)+2*F(A+h)+F(A+2*h)+2*F(A+3*h)+...
                                              +2*F(B-h)+0.5*F(B))

где A и B - нижняя и верхняя границы интервала интегрирования, N - число разбиений интервала интегрирования, h=(B-A)/N, причем N должно быть четным.

Program INTEGRAL;
 type
    Func= function(x: Real): Real;
 var
    I,TN,TK:Real;
    N:Integer;
{$F+}
 Function Q(t: Real): Real;
   begin
     Q:=2*t/Sqrt(1-Sin(2*t));
   end;
{$F-}
 Procedure Simps(F:Func; a,b:Real; N:Integer; var INT:Real);
   var
      sum, h: Real;
      j:Integer;
   begin
     if Odd(N) then N:=N+1;
     h:=(b-a)/N;
     sum:=0.5*(F(a)+F(b));
     for j:=1 to N-1 do
       sum:=sum+(j mod 2+1)*F(a+j*h);
       INT:=2*h*sum/3
   end;
 begin
   WriteLn(' ВВЕДИ TN,TK,N');
   Read(TN,TK,N);
   Simps(Q,TN,TK,N,I);
   WriteLn('I=',I:8:3)
 end.
загрузка...
Сторінки, близькі за змістом