Функция — подпрограмма вычисления значения, нужного в выражении
Автор: Основной язык сайта | В категории: Изучаем информатику
Функция является второй разновидностью подпрограммы. Вызов функции является выражением (числовым, булевим и т.п.). Значением этого выражения становится значение, которое исчисляется при выполнении вызова функции и в некоторый специальный способ возвращает в программу.
Пример 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.
Имя функции, записанное на месте выражения (по правую сторону в операторе присваивания, в условии разветвления или цикла, как аргумент в вызове и т.п.), обозначает вызов этой функции. Если эта функция имеет параметры, а в выражении записано лишь ее имя, это является синтаксической ошибкой.
Записывать имя функции в вызовах процедур введение запрещено (в отличие от записи в левых частях операторов присваивания).
Сочинение! Обязательно сохрани - » Функция — подпрограмма вычисления значения, нужного в выражении . Потом не будешь искать!