Атомная энергетика. Ядерные реакторы АЭС. Атомный флот. Ядерное оружие |
|||
| РБМК-1000 | |||
| Гражданский суда | |||
| Авиация | |||
Высшая математика |
|||
| Задачи | |||
| Практикум | |||
| Карта сайта | |||
Алгоритм решения задачи проектируется путем декомпозиции всей задачи в отдельные подзадачи. Обычно подзадачи реализуются в виде подпрограмм.
Подпрограмма – это последовательность операторов, которые определены и записаны только в одном месте программы, однако их можно вызвать для выполнения из одной или нескольких точек программы. Каждая подпрограмма определяется уникальным именем. В языке Паскаль существуют два типа подпрограмм — процедуры и функции.
Процедура и функция — это именованная последовательность описаний и операторов. При использовании процедур или функций Паскаль-программа должна содержать текст процедуры или функции и обращение к процедуре или функции. Тексты процедур и функций помещаются в раздел описаний процедур и функций.
Процедура может содержать такие же разделы описаний, что и Паскаль-программа, а именно: разделы описания модулей, меток, констант, типов, переменных, процедур и функций. В заголовке функции определяется идентификатор функции, формальные параметры (если они имеются) и тип результата функции.
Приведем примеры описания процедуры и функции:
procedure
NumString(N: integer; var S: string);
var V: integer;
begin
V := Abs(N);
S := ' ';
repeat
S := Chr(N mod 10 + Ord('0')) + S;
N := N div 10;
until N = 0;
if N < 0 then S := '-' + S;
end;
function
Max(a: Vector; n: integer): real;
var x: real; i: integer;
begin
x
:= a[1];
for i := 2 to n do if x < a[i] then x := a[i];
Max := x;
end;
Процедура активизируется с помощью оператора процедуры, в котором содержатся имя процедуры и необходимые параметры. Операторы, которые должны выполняться при запуске процедуры, содержатся в операторной части модуля процедуры. Если в содержащемся в процедуре операторе внутри модуля процедуры используется идентификатор процедуры, то процедура будет выполняться рекурсивно (будет при выполнении обращаться сама к себе).
Пример вызова процедуры и функции:
NumString(25432,
str);
rMax := Max(rV, 10);
Передача имен процедур и функций в качестве параметров. Во многих задачах, особенно в задачах вычислительной математики, необходимо передавать имена процедур и функций в качестве параметров. Для этого в Турбо Паскаль введен новый тип данных — процедурный или функциональный, в зависимости оттого, что описывается.
Описание процедурных и функциональных типов производится в разделе описания типов:
type
FuncType
= Function(z: Real): Real;
ProcType = Procedure (a,b: Real; var x,y: Real);
Функциональный и процедурный тип определяется как заголовок процедуры и функции со списком формальных параметров, но без имени. Можно определить функциональный или процедурный тип без параметров, например:
type Proc = Procedure;
После объявления процедурного или функционального типа его можно использовать для описания формальных параметров — имен процедур и функций.
Кроме того, необходимо написать те реальные процедуры или функции, имена которых будут передаваться как фактические параметры. Эти процедуры и функции должны компилироваться в режиме дальней адресации с ключом {$F+}.
Пример. Составить программу для вычисления определенного интеграла

по методу Симпсона. Вычисление подынтегральной функции реализовать с помощью функции, имя которой передается как параметр. Значение определенного интеграла по формуле Симпсона вычисляется следующим образом:
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.
| Основные понятия об информации и информатике |