Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
С использованием функций
В алгоритмических языках, в отличии от математического понятия функции, рассматриваются только такие функции, для которых можно задать алгоритм определения их значений. Самостоятельный алгоритм можно оформить как функцию в том случае, если в результате получается одно единственное значение простого типа. Функция, как и процедура, может содержать несколько операторов, несколько входных параметров, но результат ее выполнения только один. Этот единственный результат обозначается именем функции и передается в основную программу.
Описание функции содержится в главной программе после раздела описания переменных (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.
Дата публикования: 2014-11-28; Прочитано: 299 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!