Процедуры и функции
End.
Begin
Begin
<тело процедуры>
<имя>:=<значения>;
end;
Пример:
Составить программу, подсчитывающую число сочетаний без повторения из N элементов по К элементов.
Число сочетаний без повторения считается по формуле:
Cnk=n! /k!(n-k)!
Обозначим:
n,k-переменные для хранения введенных чисел;
C- переменная для хранения результата.
Чтобы подсчитать количество сочетаний без повторения, необходимо вычислить n!, (n-k)!, k!.
Опишем функцию, вычисляющую факториал числа n
(n!=1*2*…*n).
functionfactorial(m:Integer):Longint;{заголовок функции}
Var i: Integer; {описанная часть}
rez: Longint;
Begin {тело функции}
rez:=1;
For i: I to m Do
rez:= rez*i;
factorial: = rez;{присвоение значения имени функции}
End;
Первая строчка в описании функции - это заголовок функции. Служебное слово Function(функция) указывает на то, что именем factorial названа функция. В скобках перечислен список формальных параметров функции, указаны их имена и задан их тип. Функция factorial имеет один параметр n (число, факториал которого мы будем находить), который является целым числом. Далее в заголовке указывается тип значения функции, ее результата. В данном примере результат функции factorial-целое число.
За заголовком функции следует описательная часть функции, которая, как и у программы, может состоять из раздела описаний переменных, констант, типов и т.д. В данном примере нам понадобится только раздел переменных. Опишем переменные i (переменная для управления циклом) и rez, (для накопления значения факториала).
Далее идет раздел операторов (тело функций), в котором подсчитывается значение факториала числа. Результат этого вычисления присваивается имени функции, таким образом она и получает свое значение.
В тексте программы описание функции всегда следует за описанием переменных и до начала основной части, как и описание процедур. После того как функция описана, ее можно использовать в программе.
Вся программа для нашей задачи может иметь следующий вид:
ProgramEx_2;
Varn,k: Integer;
C, facn, fack, facnk: Longint;
functionfactorial(m:Integer):Longint;{заголовок функции}
Var i: Integer; {описанная часть}
rez: Longint;
Begin {тело функции}
rez:=1;
For i: I to m Do
rez:= rez*i;
factorial:= rez;{присвоение значения имени функции}
End;
Writeln (′введите два числа n.k′);
Readln (n, k) ;{ ввод с клавиатуры значений переменных n, k}
facn:= factorial(n);
fack:= factorial(k){обращение к функции};
facnk:= factorial(n-k);
C: = facn/ fack*facnk;
Writeln (′Число сочетаний =′, С); {вывод значения С}
Readln;
Три основных правила:
à если надо что-то вычислить и получить в точке вызова результат - используйте для этого функцию;
à если надо что-то сделать: данные с диска, очистить часть экрана,
à закрасить экран в другой цвет и т.п., используйте процедуру;
à при вызове процедуры или функции тип фактических параметров должен совпадать с типом формальных параметров.
Пример 1. Программа вычисления суммы 2-х чисел с помощью функции.
PROGRAM Demo Param_1;
VAR A, B, Sum: integer;
FUNCTION Work(X, Y: integer): integer) ;{ описание функции}
VAR S: integer;
BEGIN
S: =X+Y;
Work: =S;
END;
BEGIN {начало основной программы}
WRITE (‘Введите А=’);
READLN (A);
WRITE (‘Введите B=’);
READLN (B);
Sum: = Work (A, B) :{ вызов функции Work, A, B-передаются}
WRITELN (′Сумма=′, Sum R);
END.
2.Программа вычисления суммы и разности 2-х чисел с помощью процедуры.
PROGRAM Demo Param;
VAR A, B, Sum, Razn: integer;
PROCEDURE Work(X, Y: byte; VAR S, R: integer) ;{ описание функции}
BEGIN
S: =X+Y;
R: =X-Y;
END;
BEGIN
WRITE (‘Введите А=’);
READLN (A);
WRITE (‘Введите B=’);
READLN (B);
Work (A, B, Sum, Razn) ;{ вызов процедуры Work, A, B-передаются,
Sum и Razn-принимаются}
WRITELN (′Сумма =′, Sum);
WRITELN (′Разность =′, Razn);
Цикл – это повторение группы операторов на данном этапе обработки информации. Если же какую-то группу одних и тех же команд требуется посторенние в разных местах программы, меняя лишь параметры, то вводят понятия подпрограммы. Обычно подпрограммы оформляют в виде отдельной программной единицы и обращайтесь к ней из основной программы по мере надобности.
Графически работу с подпрограммой можно изобразить так.
|


|
В языке Паскаль подпрограммы реализуются в виде процедур и функций и описываются в разделе описаний процедур и функций.
Процедура.
Описание процедуры состоит из заголовка, раздела описаний и определений и раздела операторов. Заголовок начинается со служебного слова PROCEDUR, после которого пишут имя процедуры, затем в скобках список параметров с их типами, после всего этого ставится точка с запятой. Список параметров – это имена переменных исходных и выходных данных. Перед выходными данными пишут слово VAR.
Например: PROCEDURA PRIM (I, N: INTEGER; X,Y: REAL VAR Z,T: BOOLEAN)/
Параметры в заголовке называются формальными. Заголовок процедуры может быть без параметров.
Например: PROCEDURA имя.
В этом случае параметры описываются в основной программе в разделе описания переменных и называются глобальными.
Раздел описаний и определений состоит из тех же разделов, что и у основной программы. Переменные, которые здесь описываются, называются локальными. Локальные переменные недоступны основной программе.
Раздел операторов начинается словом BEGIN? Кончается словом END с точкой запятой.
Функция.
Функция – частный случай процедуры. Если в процедуре выходных значений может быть несколько, то у функций одно. Кроме того процедура «выносит» в основную программу значения присвоенные переменным, функция – присвоенные имени функции.
Описание функции состоит из заголовка, раздела описаний и определений и раздела операторов. Заголовок начинается ключевым словом FUNCTION (фанкшен), затем имя, затем в скобках список параметров с типами, затем после двоеточия указывается тип функции, после чего ставится точка с запятой.
В список параметров входят лишь входные переменные. Заголовок может быть без списков параметров, т.е. иметь вид:
FUNCTION имя: тип;
Обращение к процедуре и функциям.
Описание процедур и функций в разделе описаний не влечет за собой каких либо действий.
Чтобы исполнить процедуру или функцию нужно в соответствующем месте программы к ним обратиться. Обращение к процедуре осуществляется оператором процедуры, который имеет следующий вид.
Список параметров – это перечень параметров, которые реально участвуют в вычислениях. Эти параметры называются фактическими.
Порядок, тип и число фактических параметров должно соответствовать списку параметров в заголовке подпрограммы (процедура, функция).
Если вызывается процедура без параметров, называется ее имя. Функции вызываются аналогично вызову элементарных функций.
Примеры:
1. Вычислитьв точке b=1,7, если f(x)=
, где q(x)=
Исходные данные: x, h=0,01
Процедуры.
Program zd1;
var в, f1, q1: real;
procedure fan (x:real; var f: real; var q:real);
begin
f:=sqr(x)
q:=sqrt(x)
end;
begin
write (‘b=”); readln(b);
fan(b,f1,q1);
writeln(‘f=’; f1:5:3);
writeln(‘q=’; q1:5:3);
writeln(‘f/q=’; f1/q1);
end.
2. Вычислить y=, где f(x) =
Исходные данные: x, h=0,01
Процедуры.
Program zd2;
var x, y, f: real;
function fan (x1:real; f1: real);
begin
if (x1<0.4) then fan:=cos(x1)-x1 else
if (x1>=0.49) then fan:=sqrt(x1) else
fan:=0.14*x1;
end;
begin
x:=0.3
while x<=0.5 do
begin y:=sqr(x)+fan(x,f);writeln(‘y=’,y:6:3);
x:=x+0.01 end;
end.
Контрольные вопросы.
1. Определите понятие «подпрограммы».
2. Когда используются подпрограммы?
3. Каковы правила использования процедур и функций?
4. Определите понятия «функции», «процедуры».