Листинг основной программы.
Var n, k: Integer;
a1, a2, a3, c: Longint;
Function factorial (n:Integer): Longint;
Var i: Integer;
rez: Longint;
Begin
rez:=1;
For i:=1 To n Do rez:=rez*i;
factorial:=rez;
End;
Begin
Writeln('Ввод n и k:');
Readln(n,k) ;
a1:= factorial(n); {вычисление n!}
a2:= factorial(k); {вычисление k!}
a3:= factorial(n-k);{вычисление(n-k)!}
c:= a1 div (a2*a3) ; {результат}
Writeln(c);
Readln;
End.
Пусть n=5, k=3. Когда в программе встречается оператор a1:= factorial(n), выполняются следующие действия:
- выделяется память для переменных, описанных в функции factorial;
- формальному параметру присваивается значение фактического: n:=n (n=5);
- выполняется функция, вычисляется факториал числа 5;
- значение функции передается в место обращения к этой функции, то есть присваивается переменной а1.
В операторах a2:= factorial(k) и a3:= factorial(n-k) еще дважды вызывается функция factorial с параметрами k=3 и n-k=2. Всего в программе имеется 3 обращения к функции factorial, столько же раз выполняются и описанные выше действия.
Еще раз подчеркнем, что функция − это самостоятельная часть программы, имеющая собственные переменные, которым отводится отдельное место в памяти ЭВМ. Этим объясняется тот факт, что переменные с одинаковыми именами, используемые в функции и в основной программе, являются разными (в рассмотренном примере - переменная n основной программы и параметр n функции). При выполнении программы машина "не путает" имена этих переменных, так как области их действия не совпадают.
Это особенно важно при написании больших программ.
Пример 2
Написать функцию, подсчитывающую количество цифр натурального числа. Используя ее, определить, в каком из двух данных чисел больше цифр.
Решение
Надо выделять последнюю цифру числа до тех пор, пока число не станет равным нулю. При этом каждый раз счетчик увеличивается на 1 (начальное значение счетчика − 0).
Function Quantity(x: Longint): Byte;
Var k: Byte;
Begin
k:=0;
While x <> 0 Do
Begin
Inc(k) ;
x:=x div 10;
End;
Quantity:= k;
End;
В заголовке функции указано ее имя − Quantity. Функции передается только один параметр − целое число, количество цифр которого надо найти. Результат − тоже целое число. В разделе переменных описана переменная k − счетчик цифр. В теле функции с помощью цикла While выполняются указанные выше действия (увеличивается значение счетчика и удаляется последняя цифра).
Еще раз заметим, что память для переменной k, которая является локальной, выделяется только тогда, когда начинает свою работу функция. После завершения работы функции эта часть памяти освобождается и значение k будет не определено.
Дата добавления: 2017-11-04; просмотров: 393;