Функция, будучи аналогичной процедуре, отличается от нее тем, что результатом ее выполнения является только одно значение, которое возвращается в точку вызова. Второе отличие состоит в том, что имя функции может использоваться в выражении в качестве операнда.
Для возврата в главную программу вычисленного функцией значения в теле функции необходимо предусмотреть хотя бы один оператор присваивания, в котором слева от символа ’:=’ ставится имя функции, а справа – выражение, вычисляющее её значение.
Тип значения, вычисляемого функцией, задаётся в её заголовке, имеющем вид
Function имя функции (список форм. параметров) : тип результата;,
Пример 5.4.Вычисление площади треугольника (см. пример 5.2) оформить в виде функции.
function treug1(aa, bb, cc : real ) : real ;
Var
p : real ;
Begin
p:=(aa + bb + cc) / 2;
treug1:=sqrt(p * (p - aa) * (p - bb) * (p - cc))
end;
Обращение к функции аналогично обращению к процедуре, но самостоятельным оператором не является. В качестве операторов вызова функции используют операторы, содержащие выражения, например, оператор присваивания, условный оператор или процедуру вывода. При этом обращение к функции должно входить в выражение в качестве его операнда.
Пример 5.5.Используя функцию treug1 (пример 5.4), решить задачу, приведённую в примере 5.3 (т.е. вычислить площадь поверхности пирамиды).
var a, b, c, d, e, f, s : real;
function treug1(aa, bb, cc : real ):real;
var p : real;
Begin
p:=(aa + bb + cc) / 2;
treug1:=sqrt (p * (p - aa) * (p - bb) * (p - cc))
end;
Begin
readln (a, b, c, d, e, f);
s:=treug1(a, b, c) + treug1(a, d, e) + treug1(b, e, f) + treug1(c, f, d);
writeln ('s= ', s:10:2)
End.
Оператором вызова служит оператор присваивания. Операндами его арифметического выражения являются четыре обращения к функции.