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

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);

Цикл – это повторение группы операторов на данном этапе обработки информации. Если же какую-то группу одних и тех же команд требуется посторенние в разных местах программы, меняя лишь параметры, то вводят понятия подпрограммы. Обычно подпрограммы оформляют в виде отдельной программной единицы и обращайтесь к ней из основной программы по мере надобности.

Графически работу с подпрограммой можно изобразить так.

Т1, Т2, Т3, Т4 – участки основной программы ПП - подпрограммы

 
 
Нач.

 


В языке Паскаль подпрограммы реализуются в виде процедур и функций и описываются в разделе описаний процедур и функций.

 

Процедура.

Описание процедуры состоит из заголовка, раздела описаний и определений и раздела операторов. Заголовок начинается со служебного слова 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. Определите понятия «функции», «процедуры».