Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

infa_1 / 2.Процедурные типы

..doc
Скачиваний:
31
Добавлен:
05.06.2015
Размер:
29.7 Кб
Скачать

2. Процедурные типы.

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

type

proc = procedure (var x: integer; n: unteger);

func = function (x: real): real;

var

p: proc;

f: func;

procedure proc1 (var m: integer; k: integer);

begin

m:= m*n;

end;

procedure proc2 (var k: integer; pow: integer);

var

i,w: integer;

begin

w:=1;

for i:=1 to pow do

w:= w*k;

k:=w;

end;

function func1 (var x: real): real;

begin

func1:= sin(x)*sqrt(abs(x));

end;

function func2 (var q: real): real;

begin

func1:= ln(sqrt(abs(lg));

end;

В результате переменная p типа proc может принять одно из двух значений proc1 или proc2, для чего требуется написать оператор присваивания p:= proc2.

После этого оператора при вызове p выполняется процедура proc2.

При использовании процедурных типов необходимо помнить:

  1. при присваивании переменной процедурного типа какой-либо процедуры или функции необходимо, чтобы число параметров и их типы присваиваемой функции совпадали с описанием процедурного типа;

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

  3. присваиваемые процедуры или функции не могут быть объявлены внутри другой процедуры;

  4. в этих подпрограммах не должны содержаться команды, записанные в машинных кодах;

  5. эти подпрограммы не должны обрабатывать прерывания.

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

Пример.

program many_fun;

type

func = function (x: real): real;

function f1 (x: real): real;

begin

f1:= x+sin(x);

end;

function f2 (x: real): real;

f2:= sin(x)/(1+sqrt(x))

end;

function f3 (x: real): real;

f3:= x-exp(x);

end;

const

ar_fun: array [1..3];

of func = (f1,f2,f3);

var

x,y: real;

k: integer;

f: func;

begin

writeln (‘Введите х’);

readln (x);

writeln (‘Введите функцию’);

writeln (‘1, y = x+sin(x)’);

writeln(‘2, y= sin(x)/(1-sqrt(x)’);

writeln (‘3, y=x-exp(x)’);

readln(10);

f:=ar_fun[k];

y:=f(x);

writeln(‘Результат’, y);

end.