Курсовая, контрольная работа. Примеры выполнения

Атомная энергетика. Ядерные реакторы АЭС. Атомный флот. Ядерное оружие

Атомные станции
Реактор БН-800
ВВЭР-1000
РБМК-1000
Ледоколы
Подлодки
Флот
Гражданский суда
Ядерное оружие
Ядерная физика
Плавучие АЭС
Авиация

Высшая математика

1 семестр
2 семестр
3 семестр
Задачи
Интеграл
Курсовая
Контрольная
Практикум
Алгебра
Матанализ
Геометрия
Карта сайта

 

 

12.8. ПРОЦЕДУРЫ И ФУНКЦИИ

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

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

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

Процедура может содержать такие же разделы описаний, что и Паскаль-программа, а именно: разделы описания модулей, меток, констант, типов, переменных, процедур и функций. В заголовке функции определяется идентификатор функции, формальные параметры (если они имеются) и тип результата функции.

Приведем примеры описания процедуры и функции:

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.

7271f726
Основные понятия об информации и информатике