Использование функции.

Если вы собираетесь использовать в программе свою функцию, то в простейшем случае объявление функции следует поместить в текст программы, перед разделом инструкций (обычно объявление функции помещают после раздела Var– раздела объявления).

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

Следующая программа использует определенную программистом функцию Nod для вычисления наибольшего общего делителя (НОД) двух целых положительных чисел. У функции Nod два параметра – числа, НОД которых надо вычислить. Возвращает функция наибольший общий делитель – значение типа integer. В основе вычисления НОД лежит алгоритм Евклида.

 

Пример использования функции программиста

program p;

Var

c1,c2: integer; {числа НОД которых надо найти }

nd; integer; {наибольший общий делитель}

 

(функция программиста)

function Nod (a: integer; b: integer;): integer;

Var

r: integer; {остаток от деления числа a на b}

Begin

while(a mod b)<>0 do

Begin

r:= a mod b; {остаток от деления}

a:=b;

b:=r;

end;

nod:=b;

end;

{основная программа}

Begin

writeln (‘Вычисление наибольшего общего делителя (НОД)’)

Write (‘Введите в одной строке два целых положительных числа через пробел’);

Readln (c1, c2);

nd:=Nod (c1, c2);

Writeln(‘НОД чисел ’, c1, ’ и ’, c2,’ это ’,nd);

end;


Процедуры.

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

В Turbo Pascal процедурой называется имеющая имя последовательность инструкций, предназначенная для решения определенной задачи.

Основная программа и определенная программистом процедура взаимодействуют следующим образом (рис. 10). Если во время работы основной программы встречается инструкция вызова процедуры, то выполнение инструкции основной программы приостанавливается и выполняются инструкции процедуры. После того, как будут выполнены все инструкции процедуры, продолжается выполнение основной программы с той инструкции, которая следует за инструкцией вызова процедуры.

 

Рис.10. Взаимодействие основной программы и процедуры программиста

Объявление процедуры.В общем виде объявление процедуры программиста выглядит так:

 

procedure Имя (varпараметр1:тип1;var

параметр1:тип1;…; varпараметрК:типК; )

Var

{здесь объявление внутренних переменных процедуры}

Begin

{здесь инструкция процедуры}

end;

 

где procedure – зарезервированное слово языка Pascal, обозначающее, что далее следует объявление процедуры программиста; Имя – имя процедуры, используется для вызова инструкций, находящихся междуbegin иend, реализующих процедуру; параметр1 – переменная, которая используется в инструкциях процедуры. Параметры используются для передачи в процедуру информации, а так же для передачи информации из процедуры в вызвавшую ее программу.

Указанные в объявлении процедуры параметры являются формальными параметрами. Словоvar стоящее перед именем параметра, не является обязательным. Однако если оно стоит, то это означает, что при вызове процедуры параметром должна быть переменная основной программы, при этом изменение параметра внутри процедуры приведет к изменению значения переменной основной программы, указанной в качестве фактического параметра при вызове процедуры.

Ниже приведено объявление процедуры Line, которая выводит на экран строку символов. У процедуры два параметра: первый (n) задает длину выводимой строки (количество символов), второй (с) – символ, которым рисуется строка.

 

procedure Line (n:integer;c:char);

Var

i:integer;

Begin

fori:=1tondo Write(c);

Writeln;

end;

 


Использование процедуры.

 

Инструкция вызова процедуры в общем виде выглядит так:

Имя{Список Параметров};

где Имя– имя вызываемой процедуры; Список Параметров – разделенные запятыми фактические параметры, в качестве которых, в зависимости от описания параметров в объявлении процедуры, могут быть использованы константа, переменная или выражение. Например, инструкции вызова приведенной выше процедуры Line могут быть такими:

Line (30,’-‘); Line (n+2,’*‘); Line (n,ch);

 

Следующая программа выводит таблицу квадратных корней. Для оформления таблицы используется процедура программиста Line.