Лекция: Организация программ

С использованием функций

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

Описание функции содержится в главной программе после раздела описания переменных (var) и перед началом (begin) программы.

В общем виде функция записывается следующим образом:

function имя(формальные параметры): тип результата;

Раздел описаний

Begin

Раздел операторов

end;

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

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

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

Например, описания вычисления функции тангенса угла:

 

function tg(x:real): real;

begin

tg := sin(x)/cos(x)

end;

 

Вызов и выполнение функции производится при вычислении указателя функции:

имя функции(фактические параметры ).

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

¾ по порядку следования,

¾ количеству,

¾ типам.

Например, вызов ранее описанной функции tg можно произвести так:

a := tg(y);

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

 

Пример. Заданы стороны двух треугольников MNK (стороны m, n, k) и PLF (стороны p, l, f ). Переменной s присвоить значение –1, если площадь треугольника MNK меньше или равнa площади треугольника PLF, и значение 1 в противном случае.

Вычисление площади треугольников по формуле Герона оформить в виде функции pl.

Примечание. Формула Герона для вычисления площади треугольника со сторонами a, b, c:

,

где, где p – полупериметр треугольника.

program pr1;

uses crt;

var m, n, k, l, p, f, h, q: real;

s: integer;

function pl(a, b, c: real): real;

var r: real;

begin

r:= ( a +b + c ) / 2;

pl:= sqrt (r*(r – a)*(r – b)*(r – c));

end;

begin clrscr;

writeln(‘Введите стороныm, n, k, p, l, f’);

readln(m, n, k, p, l, f );

h := pl(m, n, k);

q :=pl(p, l, f );

if h > q then s := 1 else s := –1;

writeln('s=', s :3);

readkey;

end.

 

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

Нельзя записать так:

function sum(a: array[1..5] of real; var: real):real;

 

Пример. Пусть заданы два вектора а(8) и b(12). Вычислить для каждого вектора произведение его элементов.

program pr2;

type vect = array [ 1… 12 ] of real;

var a, b: vect;

ta, tb: real;

............. .

function prl(var x: vect; n: integer): real;

var i: integer;

p: real;

begin p := 1;

for i:= 1 to n do

p := p * x[i ];

pr := p

end;

begin

.............. .

ta:= pr(a, 8);

tb:=pr(b, 12);

................ .

end.

еще рефераты
Еще работы по информатике