Функция является второй разновидностью подпрограммы. Вызов функции является выражением (числовым, булевим и т.п.). Значением этого выражения становится значение, которое исчисляется при выполнении вызова функции и в некоторый специальный способ возвращает в программу.
Пример 1. Вспомним вычисление минимального с двух целых значений. Результатом этого вычисления есть одно скалярное значение (число), которое удобно использовать как выражение, например, указать его как аргумент в вызове процедуры writeln.
В приведенной выше процедуре min нужное значение возвращало в память программы как значение аргумента, соответствующего параметр-сменной. Тем не менее это возвращение можно организовать иначе. Рассмотрим программу вычисления минимального с двух заданных целых чисел с помощью функции.
program MinOfTwoNumbers; var a, b : integer;
{ функция вычисления минимума }
function min(x,y : integer) : integer;
begin
if x<y then min:=x else min:=y
end;
Begin
wrіteln(‘Задайте два целых числа:’)
readln(arb);
{вызов функция-аргумент в вызове процедуры}
writeln(‘Минимальное Из них: ‘, min(a,b));
End.H
Подпрограмма, что является функцией, начинается служебным словом function. После дужек с параметрами записывается двоеточие и тип значения, которое возвращает из вызова функции.
Возвращение значения происходит по помощи специальной сменной, которую обозначает имя функции (в приведенном примере это min). В теле функции обязательно должны быть операторы присваивания с именем функции в левой части, причем при выполнении вызова должны выполняться хотя бы один из них. Окончательное значение этой сменной возвращает из вызова функции.
Проиллюстрируем выполнение приведенной программы, считая, что сменные а таЬ во время введения получают значение 1 и 2. Сменная, одноименная с функцией, имеет «собственную» участок пам ‘яти и в таблице обозначенная min. min. Когда заканчивается вызов min, п значения присваивается дополнительной сменной, которая есть в «машинной» программе и обозначенная «Аргумент writeln» (см. табл. на с. 106).
Вызов функции является выражением и может быть частью более сложного выражения (мы видели это раньше, используя стандартные функции).
Примеры использования вызовов min
1. Если с какой-то целью нам надо вычислить квадрат значения, которое возвращает из вызова min, или прибавить к нему 1, можно написать выражение sqr (тел (a,b)) или, соответственно,min (a,b) +1.
2. Для вычисления минимального с трех целых значений a, b, с можно записать такие вызовы функции min.
m:=min(a,b); m:=min(m,c)
Вместе с тем, минимальное с трех целых значений a, b, с является значением выражения min (min (а,b) , с). При его вычислении, когда начинает выполняться «внешний» вызов min, надо вычислить значения первого аргумента, а им есть «внутренний» вызов min (a,b). Поэтому выполняется этот «внутренний» вызов. Лишь потом значения, которые возвращает из него, присваивается первому параметру в выполнении «внешнего» вызова.
Аналогично минимальное с четырех значений задает выражение min (min (a,b) ,min (c,d)).
Пример 2. Прочитать длины четырех отрезков (гарантированиный, что это попарно разные додатні целые числа) и вычислить количество треугольников, которые из них можно образовать.
Чтобы вычислить количество треугольников, надо для каждой с четырех возможных троек отрезков проверить, можно ли образовать из них треугольник. Итак, нам надо одни и те самые вычисления провести четыре раза, только с разными числами.
Напишем функцию, которая вычисляет признак, можно ли с трех отрезков образовать треугольник. Но возвращать из нее будем не булеве значение этого признака, а целое (0 отвечает false, 1 — true). Это разрешит просто напечатать сумму этих признаков:
program NumberOfTriangles;
var a, b, c, d : integer; function triangle(x, y, z : integer) : integer; begin
triangle:=ord{(x+y>z) and (x+z>y) and (y+z>x)) end; Begin
wrіteln(‘Задайте четыре додатних целых числа:’) readln(a,b,crd);
wrіteIn(‘Количество треугольников: ‘, triangle(a,b,c)+triangle(a,b,d)+ triangle(a,c,d)+triangle(b,c,d)) End.
Имя функции, записанное на месте выражения (по правую сторону в операторе присваивания, в условии разветвления или цикла, как аргумент в вызове и т.п.), обозначает вызов этой функции. Если эта функция имеет параметры, а в выражении записано лишь ее имя, это является синтаксической ошибкой.
Записывать имя функции в вызовах процедур введение запрещено (в отличие от записи в левых частях операторов присваивания).
If you're looking to earn the best possible grade on your research paper, you need…
To write my essay, first you need to think of the major topic of your…
Writing term paper is not a simple endeavor. It involves huge efforts, that need to…
It's possible to purchase term papers and textbooks on the internet at a discount price,…
The main reason essay writing is so powerful is because it's a general subject and…
A couple of years ago I received an email from a student asking for information…