Целью работы функции, вообще говоря, является вычисление некоторой величины. Целью работы процедуры является выполнение самой последовательности действий, составляющих процедуру.
Допустим, например, что в нашей программе часто требуется определять площадь треугольника, зная координаты его вершин. Поскольку результатом работы является вычисление единственной величины — площади треугольника — естественно оформить наши действия в виде функции.
Предположим также, что нам часто требуется рисовать треугольник на экране па его вершинам. Поскольку в этом случае результатом работы является сам процесс выполнения, а не вычисление какой-либо величины, то логично создать уже не функцию, а процедуру рисования треугольника на экране.
В заголовке функции определяется ее имя, параметры (если они имеются ) и тип результата.
Для вызова функции необходимо указать ее имя и параметры (если они есть). Имя может использоваться в выражениях. При вычислении выражения имя функции замешается вычисленным значением.
В теле функции хотя бы один оператор должен имени функции присвоить некоторое значение, иначе значение, возвращаемое функцией, останется неопределенным. Если операторов, присваивающих имени функции значение, несколько, то результатом функции является последнее присвоенное значение.
{в этой программе используется функция Func, вычисляющая квадрат синуса заданного числа}
program Functions;
{описание переменных программы}
Var X, Rez:Real;
{описание функции}
function Func: Real;
var R: Real;
begin
R:= Sin(x)*Sin(x);
Func:=R; {этот оператор присваивает функции Func значение R }
end; {описание функции заканчивается "точкой с запятой" }
{сама программа}
begin
WriteLn(‘Введите число');
ReadLn(X);
Rez:=Func;
WriteLn (‘Квадрат синуса этого числа равен ', Rez); end.
Следующая программа вычисляет сумму геометрических средних всевозможных комбинаций двух целых чисел от 1 до 20. При вычислении используется функция, возвращающая геометрическое среднее двух данных чисел ( квадратный корень из их произведения ).
program SKub;
var S: Real;
j,i: integer;
function SR(x,y:integer):Real;
var K: longint;
begin
SR:=Sqrt(.x*y);
end;
begin
s:=0;
for i:=1 to 20 do
for j:=1 to 20 do
S:=S+SR(i,j);
WriteLn(S);
end.
В отличие от имени процедуры, имя функции может использоваться в выражениях.
Более того, функцию можно вызвать, только используя се имя в каком-либо выражении. В последнем примере имя функции SR присутствовало в выражении S:=S+SR(i,j); Значение SR(i,j) автоматически подсчитывалось каждый раз и использовалось при вычислении правой части.
Подпрограмма – это блок операторов выполняющих действия или вычисляющих значение какого-либо выражения, наиболее часто используемый в программе.
Подпрограмма являются основой модульного программирования. Разбивая задачу на части и формируя логически обособленные модули подпрограммы (процедуры и функции), программист реализует основные принципы широко пользуемого в практике системного подхода и методов нисходящего программирования.
Вот как выглядит в общем виде структура процедуры: