Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Paskal_metodichka.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
807.42 Кб
Скачать

Тема 7 Организация программ с использованием функций

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

Описание функции содержится в главной программе после раздела описания переменных (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.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]