Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика (Delphi) (3 семестр) / лк3_2Подпрограммы – параметры других подпрограмм.ppt
Скачиваний:
5
Добавлен:
31.03.2015
Размер:
72.19 Кб
Скачать

Подпрограммы – параметры других подпрограмм

ПАСКАЛЬ: ОПИСАНИЕ ПРОЦЕДУР

Заголовок;

 

 

 

procedure ИмяПроцедуры [(CписокФормальныхПараметров)]

 

 

 

Блок

 

 

 

 

 

 

 

 

 

 

Описания (ConstTypeVar

 

 

 

 

 

 

 

 

 

 

 

 

процедуры и функции)

 

 

 

 

 

begin

 

 

 

 

 

Операторы

 

 

 

 

 

end;

 

«вход» и «выход» процедуры

ПАСКАЛЬ: ОПИСАНИЕ ФУНКЦИЙ

Заголовок;

function ИмяФункции [(CписокФормалПарам)] :ТипФункции

Блок

Описания (ConstTypeVar

 

 

процедуры и функции)

 

 

begin

 

 

 

Операторы

 

 

 

ИмяФункции :=результат

 

 

end;

 

 

Не разрешены операторы

 

Основное выходное значение

накапливания:

 

вход и неосновные результаты

ИмяФункции:= ИмяФункции+…

 

 

ПАСКАЛЬ: список формальных параметров подпрограммы

Секция1; Секция2;...;СекцияN Секция имеет вид:

[VAR] CписокПеременных :Тип;

если VAR имеется, то передача по ссылке (параметр-переменная); иначе

– по значению (параметр-значение)

стандартный или имя нестандартного

Секция

параметров-значений параметров-переменных параметров-подпрограмм

В каких задачах используются процедуры- параметры?

Использование параметра-подпрограммы необходимо, когда некоторый алгоритм, описанный как подпрограмма, применим к множеству алгоритмов, каждый из которых также задается подпрограммой.

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

Средства для использования параметров- подпрограмм имеются во всех алгоритмических языках, предназначенных для решения вычислительных задач (СИ, Фортран, MatLab).

Средства паскаля для работы с подпрограммами-параметрами

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

TYPE PROC1=PROCEDURE(a,b,c:real; var d:integer); FUNC1=FUNCTION : REAL;

G=FUNCTION (x,y,z:real);

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

Некоторые особенности использования подпрограмм-фактических параметров

Имена стандартных подпрограмм нельзя использовать в качестве фактических параметров.

Function sn(x:real):real; begin sn:=sin(x) end;

В языках Borland Pascal и Turbo Pascal подпрограммы, используемые как фактические параметры, должны компилироваться с использованием "дальней модели памяти" , поэтому в программу надо включить директивы компилятора {$F+} и {$F-} или поставить стандартную директиву far (для версий начиная с Turbo Pascal 6.0) cразу за заголовком подпрограммы.

Пример 1. Решение двух уравнений на отрезке [0,3] c погрешностью 0.0001.

program primer2_5;

Type fn=function(x:real):real;{функциональный тип, задающий вид уравнения}

Var r1,r2:real; {коpни уpавнений}

{$F+} {опция дальнего вызова, в Object Pascal не надо} function fx1(x:real):real; {fx1 задает первое уравнение} begin

fx1:=1.0/(1.2*sin(x)/cos(x)+sqrt(x+1));

end;

function fx2(x:real):real; {fx2 задает второе уравнение} begin

fx2:=(exp(-x)-sqrt(exp(x))+3.7)/3.0; end;

{$F-} { В Object Pascal не надо }

Продолжение примера 1

{root – подпрограмма вычисления корня}

{уравнения fx(x)=0 на [a,b] c погрешн.е методом простых итераций}

function root(fx:fn; a,b,e:real):real;

{fx - функция – формальный параметр} var x,x0:real;

begin

x0:=(a+b)/2; x:=fx(x0); while abs(x-x0)>e do begin

x0:=x; x:=fx(x0); end;

root:=x;

end;

Продолжение примера 1

begin

r1:=root(fx1,0,3,1.0e-4);{fx1 - функция - факт. параметр} r2:=root(fx2,0,3,1.0e-4);{fx2 - функция - факт. параметр} writeln('Коpень пеpвого уpавнения r1=',r1:7:4); writeln('Коpень втоpого уpавнения r2=',r2:7:4);

end.