Скачать презентацию ПОДПРОГРАММЫФУНКЦИИ Описание подпрограммыфункции В математике понятие функции Скачать презентацию ПОДПРОГРАММЫФУНКЦИИ Описание подпрограммыфункции В математике понятие функции

лекция 8.pptx

  • Количество слайдов: 11

ПОДПРОГРАММЫФУНКЦИИ ПОДПРОГРАММЫФУНКЦИИ

Описание подпрограммыфункции В математике понятие функции хорошо известно - с помощью функций задаются зависимости Описание подпрограммыфункции В математике понятие функции хорошо известно - с помощью функций задаются зависимости одних значений (значений функций) от других значений, называемых аргументами. В языке Pascal вводится понятие подпрограммы-функции, которые часто называют просто функциями. Вы уже знакомы с этим на практике, т. к. наверняка использовали стандартные функции, такие как sin(x), cos(x), abs(x) и т. д. Помимо использования стандартных функций, можно создавать свои, пользовательские функции. Подпрограмма-функция предназначена для вычисления какоголибо параметра. Описание функции похоже на описание процедуры, но имеется и два важных отличия от процедуры. Function <имя>(<список формальных параметров>): тип;

Заголовок функции состоит из слова function, за которым следует имя функции, далее в круглых Заголовок функции состоит из слова function, за которым следует имя функции, далее в круглых скобках - список формальных параметров, затем через двоеточие записывается тип функции тип возвращаемого параметра. Функция может возвращать параметры следующих типов: 1)любого порядкового, 2) любого вещественного, 3) стандартного типа String, 4) любого указателя (рассмотрим позднее). Второе отличие заключается в том, что в теле функции хотя бы раз имени функции должно быть присвоено значение.

Пример 1 Написать программу, в которой определена функция для возведения числа в степень. Program Пример 1 Написать программу, в которой определена функция для возведения числа в степень. Program Stepen; . . . {Разделы описания меток, констант, типов и переменных}. . . Function power(num, pow: integer): integer; var i: integer; a: real; Begin {Начало тела функции} a: =1; for i: =1 to pow do a: =a*num; power: =num end; {Конец тела функции}. . . Begin {Начало тела программы}. . . read(a, b); x: =power(a, b)+y; {Вызов функции}. . . End.

Пример 2 Рассмотрим пример вычисления факториала числа N. Известно, что N! = N*(N-1)*(N-2)*(N-3)*. . Пример 2 Рассмотрим пример вычисления факториала числа N. Известно, что N! = N*(N-1)*(N-2)*(N-3)*. . . *2*1 Подпрограмма-функция для вычисления факториала может иметь следующий вид: Function Factorial(N: Byte): Longint; var Fact: Longint; i: Byte; begin Fact: =N; for i: =N-1 downto 2 do Fact: =Fact*i; Factorial: =Fact end;

Вызов подпрограммыфункции Для вызова функции из основной программы или другой подпрограммы следует в выражении, Вызов подпрограммыфункции Для вызова функции из основной программы или другой подпрограммы следует в выражении, где необходимо использовать значение функции, указать имя функции со списком фактических параметров, которые должны совпадать по количеству и типам с формальными параметрами. Так вызов вышеописанной функции Factorial может иметь следующий вид: Part: =Factorial(20)/b; Вызывается функция Factorial с фактическим параметром 20 (параметр-значение) Part: =Factorial(M)+c/2; Вызывается функция Factorial с фактическим параметром М (параметр-переменная) Part: =Factorial(M+L); В качестве параметра передается выражение, значение которого должно иметь тот же тип, что и описанный в функции формальный параметр.

Пример 3 Составить программу, в которой будет функция для вычисления кинетической энергии движущегося объекта. Пример 3 Составить программу, в которой будет функция для вычисления кинетической энергии движущегося объекта. program Energy; var m, v, f: real; function En(a, b: real): real; Begin En: =a*sqr(b)/2; end; begin writeln('Ввод массы тела'); readln(m); writeln('Ввод скорости тела'); readln(v); f: =En(m, v); writeln('Значение кинетической энергии'); writeln(f: 4: 1, 'Дж'); Readln; End.

Рекурсивные процедуры и функции Язык Pascal допускает, чтобы подпрограмма вызывала саму себя рекурсивное обращение. Рекурсивные процедуры и функции Язык Pascal допускает, чтобы подпрограмма вызывала саму себя рекурсивное обращение. Эта возможность связана с тем, что при каждом новом обращении к подпрограмме параметры, которые она использует, заносятся в стек, причем параметры предыдущего обращения тоже сохраняются. В некоторых случаях рекурсивное оформление программы может быть более компактным и эффективным, но не следует забывать об опасности переполнения стека. Алгоритм, вычисляющий значение факториала числа N, может быть записан в виде рекурсивной функции следующим образом: Function Factorial(N: Byte): Longint; begin if N in [0. . 1] then Factorial: =1 else Factorial: =N*Factorial(N-1) end.

Рассмотрим работу данной функции на примере вызова функции Factorial(3) в основной программе. При входе Рассмотрим работу данной функции на примере вызова функции Factorial(3) в основной программе. При входе в подпрограмму-функцию по этому вызову фактический параметр равен 3. При выполнении функции выполняется оператор Factorial: =3*Factorial(2). При этом происходит вызов функции Factorial c фактическим параметром 2 (Factorial(2)) При выполнении функции выполняется оператор Factorial: =2*Factorial(1). При этом происходит вызов функции Factorial с фактическим параметром 1 (Factorial(1)). При выполнении функции выполняется оператор Factorial: =1. После этого завершается выполнение оператора Factorial: =2*Factorial(1), что дает значение Factorial(2)=2 и, наконец, завершается выполнение оператора Factorial(3): =3*Factorial(2), что дает значение Factorial(3)=3*6=18.

Как вы видите на данном примере, рекурсивный алгоритм выглядит короче и нагляднее. Отрицательные стороны Как вы видите на данном примере, рекурсивный алгоритм выглядит короче и нагляднее. Отрицательные стороны рекурсивных функций: 1) на вычисление рекурсивной функции уходит больше машинного времени (за счет повторных обращений к подпрограмме); 2)требуется больше времени (за счет дублирования локализованных в процедуре переменных); 3) существует возможность переполнения стека. Поэтому при выборе способа описания функции следует решить, чему отдать предпочтение - эффективности или ее компактности. Пример 4 Составить программу вычисления и печати таблицы значений двух заданных функций при указанных с клавиатуры начальном и конечном значениях и шаге изменения аргумента. Вычисление первой функции Y=sin 2 x оформить при помощи процедуры, второй y=1. 5*x^3 --- при помощи функции.

program pr; var a, b, c, y, m: real; procedure F 1(x: real; var program pr; var a, b, c, y, m: real; procedure F 1(x: real; var y: real); Begin y: =sin(2*x); end; function F 2(x: real): real; begin F 2: =1. 5*sqr(x)*x; end; Begin writeln('Ввод начального значения параметра'); readln(a); writeln('Ввод конечного значения параметра'); readln(b); writeln('Ввод шага функции'); readln(c); m: =a; writeln('================='); writeln('Функция номер 1');