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

 Алгоритм решения задачи проектируется путем декомпозиции всей за-

дачи в отдельные подзадачи. Обычно подзадачи реализуются в виде подп-

рограмм.

 Подпрограмма - это последовательность операторов,  которые опреде-

лены и записаны только в одном месте программы, однако их можно

вызвать для выполнения из одной или нескольких точек программы. Каж-

дая подпрограмма определяется уникальным именем. В языке ПАСКАЛЬ су-

ществуют два типа подпрограмм - процедуры и функции.

 Процедура и функция - это именованная последовательность описаний

и операторов.  При использовании процедур или функций ПАСКАЛЬ - прог-

рамма должна содержать текст процедуры или функции и обращение к про-

цедуре или функции.  Тексты процедур и функций помещаются в раздел

описаний процедур и функций.

{}

 Процедура может содержать такие - же разделы описаний, что и ПАС-

КАЛЬ - программа,  а именно: разделы описания модулей, меток, конс-

тант, типов, переменных, процедур и функций.

{}

 ПЕРЕДАЧА ИМЕН ПРОЦЕДУР И ФУНКЦИЙ В КАЧЕСТВЕ ПАРАМЕТРОВ. Во многих

задачах, особенно в задачах вычислительной математики, необходимо пе-

редавать имена процедур и функций в качестве параметров. Для этого в

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.

Электротехника курсовые, лабораторные, практика Математика, физика