Информационные технологии

Меню

Реклама

Функция и ее вызовы

Рассмотрим задачу: вычислить минимальную из расстояний между точками плоскости AX1; Y1, BX2; Y2 и C1;2. Алгоритм решения этой задачи очевиден:

1 вычислить расстояния D1=AB, D2=AC, D3=BC;

2 вычислить M= min{D1, D2, D3}.

Расстояние между точками с произвольными координатами X; Y, X'; Y' выражается формулой D=, и для вычисления расстояний нам необходимо трижды написать Паскаливський вариант этой формулы с разными наборами координат : X1, Y1, X2, Y2, потом X1, Y1, 1, 2, потом X2, Y2, 1, 2. Эти выражения достаточно громоздки и задают по существу те же вычисления, только с разными наборами значений. Все это можно записать иначе.

Язык Паскаль позволяет описать повторяемые вычисления один раз, дать этому описанию имя и дальше не описывать сами вычисления, а только помечать их этим именем.

Следовательно, в языке Паскаль есть Описания вычислений и есть их Обозначение. Описание вычислений, как правило, есть Параметризующим, подобно алгоритму вычисления корешей квадратного уравнения, где параметрами были коэффициенты уравнения. Конкретные значения, с которыми надо сделать вычисление, указываются в обозначении вычислений вместе с именем этого описания и называются Аргументами. Описание вычислений некоторого значения называется Функцией, а их обозначение - Вызовом Функции.

В данном случае параметрами будут четыре координаты двух точек. Назовем их a1, b1, a2, b2. Описание вычислений задается в виде функции, которой мы дадим имя dd, :

Function dda1, b1, a2, b2: real: real;

Begin

Dd:=sqrt sqra1 - a2+sqrb1 - b2

End;

Это описание является определением имени dd, поэтому помещается среди других определений программы. Обозначение этой функции, то есть вызовы ее с конкретными аргументами записываются в теле программы :

Program minimdisinput, output;

Var x1, y1, x2, y2, d1, d2, d3, m: real;

Function dda1, b1, a2, b2: real: real;

Begin

Dd:=sqrt sqra1 - a2+sqrb1 - b2

End;

Begin

Writeln 'введите координаты двух точек :';

Readlnx1, y1, x2, y2;

D1:=ddx1, y1, x2, y2;

D2:=ddx1, y1, 1, 2;

D3:=ddx2, y2, 1, 2;

If d1d2 Then m:=d1 Else m:=d2;

If d3m Then m:=d3;

Writeln 'наименьшее расстояние: ', m

End.

При выполнении этой программы после чтения значений переменных выполняется вызов функции dd : значение переменных x1, y1, x2, y2 присваиваются соответствующим параметрам a1, b1, a2, b2 Как обычным переменным и потом вычисляется значение dd. Оно и является значением выражения ddx1, y1, x2, y2, что присваивается переменной d1.

Так же, только с другими аргументами, выполняются второй и третий вызовы функции, и другие значения присваиваются переменным d2 и d3.

Следовательно, мы видим, что язык Паскаль позволяет не только пользоваться вызовами стандартных функций, например, odd или sin, но и создавать свои собственные.

Функция имеет такой общий вид:

Function ИмяОпределение параметров: Имя типа;

Определение

Begin

Последовательность Операторов

End;

В первой строке функции записано Заглавие, где указано ее имя и Определение Параметров. В конце заглавия обязательно записывается имя типа значений, которые вычисляются в результате выполнения вызовов функции. Эти значения называются такими, что Возвращаются.

Параметров в функции может не быть, тогда и скобки отсутствующие, а вызов такой функции является просто ее именем.

После заглавия структура функции повторяет структуру программы за исключением лишь точки в конце. В функции можно определять свои переменные, стали и функции. Однако функция существенно отличается от программы тем, что :

1 функция записывается среди определений программы;

2 имя самой программы нигде в программе не указывается, тогда как среди операторов функции Обязательно должны быть операторы присвоения с именем функции в левой части, причем при выполнении вызова функции хотя бы один из них должен быть выполненным.

Вызов функции является выражением того типу, который указан в ее заглавии. И он, как всякое выражение, может быть частью более сложного выражения. Например, при необходимости мы могли бы написать d1:=sqrddx1, y1, 1, 2+1.

Вернемся к примеру. Несложно написать функцию вычисления меньшего из двух значений:

Function minx1, x2: real: real;

Begin

If X1x2 Then Min:=x1

Else min:=x2

End;

И поместить ее следом за функцией dd в программе minimdis. С ее использованием вычисления минимального из значений переменных d1, d2, d3 можно в теле программы задать так:

M:=mind1, d2; m:=minm, d3

Или даже так:

M:=minmind1, d2, d3

При вычислении последнего выражения сначала выполняется внутренний вызов mind1, d2. Значение, вычисленное при его выполнении, становится аргументом во внешнем вызове.