Функция программиста для вычисления кубического корня

Лабораторная работа № 10.

Использование процедур и функций при обработке массивов.

 

При выполнении работы необходимо знать:

  • Что такое подпрограмма и принципы использования подпрограмм
  • В чем отличие между подпрограммой-процедурой и подпрограммой-функцией
  • В чем отличие параметров-переменных и параметров-значений
  • Что такое локальные и глобальные переменные
  • Когда лучше использовать оформление подпрограммы в виде процедуры, а когда – в виде функции?

 

Теоретический минимум:

При разработке программ можно использовать стандартные, т. е. предоставляемые Turbo Pascal функции. Turbo Pascal позволяет программисту объявить свою собственную функцию и в дальнейшем использовать ее точно так же, как и стандартные функции. Например, можно определить (объявить) функцию вычисления факториала, назвав ее factor. Затем в том месте программы, где нужно вычислить факториал, вместо последовательности инструкции, вычисляющих факториал, написать у:=factor(х);

 

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

Function Имя (параметр1: тип1,… параметрК: типК):Тип;

Var

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

Begin

{здесь инструкции функции}

Имя:=Выражение;

end;

где function – зарезервированное слово языка Turbo Pascal, обозначающее, что далее следуют инструкции, реализующие функцию программиста; Имя – имя функции. Используется для перехода к инструкциям функции ( между begin и end) из программы, которая вызывает (использует) функцию; параметр – это переменная, значение которой используется для вычисления значения функции.

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

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

В качестве примера приведено объявление функции factor, которая вычисляет факториал числа, полученного в качестве параметра.

 

Функция программиста для вычисления факториала

FunctionFactor (n: integer): integer;

Var

f: integer {факториал числа n }

i: integer;

Begin

f:=1;

fori:=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 реализует алгоритм “ручного” метода приближенного вычисления кубического корня, при котором в качестве первого приближения,”на глаз“, выбирается наиболее подходящее число (в программе – это значение квадратного корня числа, кубический корень которого надо вычислить). Затем число, из которого надо извлечь корень, делится на выбранное приближение, и полученное таким образом значение еще раз делится на выбранное приближение. Если полученное число отличается от выбранного приближения на величину, не большую, чем допустимое значение погрешности, то выбранное приближение принимается за значение корня. Если погрешность превышает допустимое значение, то вычисляется новое приближение как среднее арифметическое удвоенного предыдущего приближения, и процесс вычисления повторяется.