Тема №9. Подпрограммы-функции
Тема №9. Подпрограммы-функции
При решении сложных задач разумно разбить алгоритм на несколько более простых составляющих. В языке Pascal существуют специальные средства для этого – подпрограммы. Есть два вида подпрограмм: процедуры и функции. Функция получает информацию от вызывающей программы через свои параметры. Параметры, описанные в заголовке функции, называются формальными параметрами. Параметры, указанные при вызове функции называют фактическими. Типы и число фактических параметров должны соответствовать типу и числу формальных параметров. Следующий пример иллюстрирует работу функций.
Program Table;
Uses CRT; // Подключение модулей
// Описания функций, требующихся в программе
function cube(x:real):real; // возведение в куб
begin
cube:=x*x*x; // имени функции присваивается значение
end;
function sign(x:real):integer; // вычисление знака числа
begin
if x>0 then sign:=1
else if x=0 then sign:=0
else sign:=-1;
end;
// ==== Начало главной программы ==========
var a : real; // блок описания переменных
const a1 = -5.0; // блок описания констант (постоянных)
a2 = +5.0;
st = 0.5;
begin
a:=a1;
while (a<=a2) do
begin
writeln(a:4:1,cube (a):10:3,sign(a):3); // вызов функций
a:=a+st;
end;
end.
Обратите внимание, что внутри тела функции (заключенного в операторные скобки begin … end) вы обязаны хотя бы один раз имени функции присвоить значение. В этой программе также используется новый материал, не связанный с функциями, – это константы. Значение констант задается через знак равенства (а не присваивания). Тип константы определяется из типа присваиваемого значения. Константы, в отличие от переменных, не могут менять свое значение.
- 27 -
Рассмотрим еще один пример, в котором функция имеет два параметра разного типа.
Program Power2;
Uses CRT;
function power(x : real; n : integer) : real; // возведение в степень
var i : integer; // локальные переменные r : real;
begin
r:=1.0;
for i:=1 to n do r:=r*x; // накопление произведения
power:=r; // результат присвоить имени функции
end;
// ==== Начало главной программы ================
var i : integer; // блок описания переменных
begin
for i:=1 to 10 do
writeln(i:2,power (2.0,i):6:0);
end.
В данном примере функция имеет два формальных параметра (типа real и типа integer), а также две локальных переменных. Имена локальных переменных действуют только внутри тела функции. Переменная i в главной программе, и переменная i внутри функции – это две разных переменных. При вызове функции первый фактический параметр соответствует первому формальному параметру. Второй параметр – второму.
Задание 9 1. Модифицируйте последний пример таким образом, чтобы функция power вычисляла правильно не только натуральные степени, но и отрицательные.
Напоминание:
x-n = 1 / xn.
Подсказка: следует использовать оператор if, а также функцию abs(n), которая вычисляет модуль числа.
(5 баллов)
2. Напишите функцию, вычисляющую факториал числа n! =1•2•3• ... •n.
Подсказка: ее несложно сделать, путем модификации функции power.
(5-8 баллов)
- 28 -