Лабораторная работа № 10.
Использование процедур и функций при обработке массивов.
При выполнении работы необходимо знать:
- Что такое подпрограмма и принципы использования подпрограмм
- В чем отличие между подпрограммой-процедурой и подпрограммой-функцией
- В чем отличие параметров-переменных и параметров-значений
- Что такое локальные и глобальные переменные
- Когда лучше использовать оформление подпрограммы в виде процедуры, а когда – в виде функции?
Теоретический минимум:
При разработке программ можно использовать стандартные, т. е. предоставляемые Turbo Pascal функции. Turbo Pascal позволяет программисту объявить свою собственную функцию и в дальнейшем использовать ее точно так же, как и стандартные функции. Например, можно определить (объявить) функцию вычисления факториала, назвав ее factor. Затем в том месте программы, где нужно вычислить факториал, вместо последовательности инструкции, вычисляющих факториал, написать у:=factor(х);
Объявление функции. Объявление функции в общем виде выглядит так:
Function Имя (параметр1: тип1,… параметрК: типК):Тип;
Var
{здесь объявление внутренних переменных функции}
Begin
{здесь инструкции функции}
Имя:=Выражение;
end;
где function – зарезервированное слово языка Turbo Pascal, обозначающее, что далее следуют инструкции, реализующие функцию программиста; Имя – имя функции. Используется для перехода к инструкциям функции (между begin и end) из программы, которая вызывает (использует) функцию; параметр – это переменная, значение которой используется для вычисления значения функции.
Отличие параметра от обычной переменной программы состоит в том, что он объявляется не в разделе переменных функции, который начинается словом Var, а в заголовке функции. Конкретное значение параметр получает при вызове функции из основной программы; тип – тип значения, которое функция возвращает в вызвавшую ее программу.
Следует обратить внимание, что последовательность инструкций, реализующих функцию, завершается инструкцией, которая присваивает имени функции значение. Тип выражения, определяющего значение функции, должен совпадать с типом функции, указанном в ее объявлении.
В качестве примера приведено объявление функции factor, которая вычисляет факториал числа, полученного в качестве параметра.
Функция программиста для вычисления факториала
Function Factor (n: integer): integer;
Var
f: integer {факториал числа n }
i: integer;
Begin
f:=1;
for i:=2 to n do
f:=f*i;
Factor:=f;
end;
У функции Factor один параметр – переменная n типа integer. Параметр задает число, факториал которого надо вычислить. Конкретное значение n получит при вызове функции. Возвращает функция вычисленное значение факториала – число типа integer.
Другой пример: в Turbo Pascal нет стандартной функции вычисления кубического корня. Приведем ее возможное определение.
Функция программиста для вычисления кубического корня
function Cub (x:real): real;
Var
pr:real; {приближенное значение кубического корня}
Begin
pr:=sqrt(x); {первое приближение}
{ в качестве второго приближения выбираем (x:pr):pr }
Whileabs (pr-x/(pr*pr))>0.001do
Begin
{ новое приближение – среднее арифметическое }
{ удвоенного приближения на прошлом шаге и текущего }
pr:=(2*pr+x/(pr*pr))/3;
end;
Cub:=pr;
end;
Функция Cub реализует алгоритм “ручного” метода приближенного вычисления кубического корня, при котором в качестве первого приближения,”на глаз“, выбирается наиболее подходящее число (в программе – это значение квадратного корня числа, кубический корень которого надо вычислить). Затем число, из которого надо извлечь корень, делится на выбранное приближение, и полученное таким образом значение еще раз делится на выбранное приближение. Если полученное число отличается от выбранного приближения на величину, не большую, чем допустимое значение погрешности, то выбранное приближение принимается за значение корня. Если погрешность превышает допустимое значение, то вычисляется новое приближение как среднее арифметическое удвоенного предыдущего приближения, и процесс вычисления повторяется.
Использование функции.
Если вы собираетесь использовать в программе свою функцию, то в простейшем случае объявление функции следует поместить в текст программы, перед разделом инструкций (обычно объявление функции помещают после раздела 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