Функция — подпрограмма вычисления значения, нужного в выражении

Функция является второй разновидностью подпрограммы. Вызов функции является выражением (числовым, булевим и т.п.). Значением этого выражения становится значение, которое исчисляется при выполнении вызова функции и в некоторый специальный способ возвращает в программу.

Пример 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.

Имя функции, записанное на месте выражения (по правую сторону в операторе присваивания, в условии разветвления или цикла, как аргумент в вызове и т.п.), обозначает вызов этой функции. Если эта функция имеет параметры, а в выражении записано лишь ее имя, это является синтаксической ошибкой.

Записывать имя функции в вызовах процедур введение запрещено (в отличие от записи в левых частях операторов присваивания).

Основной язык сайта

Share
Published by
Основной язык сайта

Recent Posts

Three Factors to Consider When Choosing a Leading Term Papers US Service

If you're looking to earn the best possible grade on your research paper, you need…

12 месяцев ago

How to Write My Essay

To write my essay, first you need to think of the major topic of your…

1 год ago

Term Paper Writing Services

Writing term paper is not a simple endeavor. It involves huge efforts, that need to…

1 год ago

Purchase Term Papers and Books Online

It's possible to purchase term papers and textbooks on the internet at a discount price,…

2 года ago

Essay Topic — Important Ideas to Write Essays

The main reason essay writing is so powerful is because it's a general subject and…

2 года ago

The Best Research Paper Available — Try These Tips

A couple of years ago I received an email from a student asking for information…

2 года ago