Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
15-16 Працэдуры і функцыі.doc
Скачиваний:
4
Добавлен:
09.11.2019
Размер:
327.68 Кб
Скачать

Пераменныя – працэдуры і функцыі

Прымяненне працэдурнага тыпу не абмяжоўваецца толькі адным апі­сан­нем параметраў – працэдур ці функцый. Калі ёсць тып, значыць, могуць быць і пераменныя такога тыпу.

Працэдурныя пераменныя па фармаце сумяшчальныя з пераменнымі ты­пу Pointer і пасля прывядзення тыпаў могуць абменьвацца з імі зна­чэн­ня­мі.

Адносна папярэдняй праграмы могуць быць такія змяненні. Дабавім

VAR Oper : Func;

Cond : Char;

У галоўнай праграме выканаем наступныя дзеянні:

Writeln('задай аперацыю (*/+)');

Readln(Cond);

Writeln;

CASE Cond OF

'*' : Oper := Mult;

'+' : Oper := Add

END;

MakeTable(16, 16, Oper, Cond); ...

Заўвага. Падпраграма, якая надаецца працэдурнай пераменнай:

1) не павінна быць стандартнай працэдурай ці функцыяй.

Гэта абмежаванне можна абысці такім, напрыклад, прыёмам: выклік стан­дар­т­най падпраграмы заключыць у «абалонку».

VAR Func : FUNCTION(x : Real) : Real;

FUNCTION MySin(x : Real) : Real; FAR;

BEGIN

MySin:=Sin(x)

END;

Func:=MySin;

2) не можа быць укладзена ў другія падпраграмы;

3) не можа быць падпраграмай спецыяльнага віду, якая мае спе­цы­фі­ка­цыю INTERRUPT ці канструкцыю INLINE.

Пераменныя працэдурных тыпаў, каб быць сумяшчальнымі па на­дан­ні зна­чэн­ня, павінны мець:

аднолькавую колькасць фармальных параметраў;

параметры на адпаведных пазіцыях павінны належаць аднаму і таму ж ты­пу (супадаць).

У выніку функцый павінны супадаць тыпы значэнняў, якія вяр­та­юц­ца.

Разгледзім задачу падліку значэння вызначанага інтэграла, сэнс яко­га – плош­ча крывалінейнай трапецыі.

Прыклад. Саставіць падпраграму вылічэння значэння інтэграла па фор­му­ле трапецый.

дзе i = 1, 2, …, n – 1, – лік адрэзкаў разбіўкі інтэрвалу інтэгравання.

Па гэтай праграме падлічыць і для нейкага зададзенага n.

Рашэнне.

PROGRAM Int;

CONST n = 20;

TYPE

TFunc = FUNCTION(x : Real) : Real;

VAR fu: TFunc;

FUNCTION f1(x : Real) : Real; FAR;

BEGIN

f1 := (x * x * ln(x)) / (Sin(x) + x)

END;

FUNCTION f2(x : Real) : Real; FAR;

BEGIN

f2 := x * x / (Cos(x) + x)

END;

FUNCTION Trap(n : Integer; a,b: Real; f : TFunc) : Real;

VAR

h, s, x : Real;

i : Integer;

BEGIN

h := (b - a) / n;

s := (f(a) + f(b)) * 0.5;

x := a;

FOR i := 1 TO n - 1 DO

BEGIN

x := x + h;

s := s + f(x)

END;

Trap := h * s;

END;

BEGIN

Writeln('n=', n);

fu := f2;

Writeln(Trap(n,pi/4,pi/2, f1),Trap(n,pi/6,pi/3,fu));

END.

18

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