Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
7.DOC
Скачиваний:
1
Добавлен:
09.11.2018
Размер:
59.39 Кб
Скачать

7.5. Параметры-значения и параметры-переменные в подпрограммах

Параметры подпрограмм делятся на параметры-значения и параметры-переменные.

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

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

Параметрам-значениям при обращении к подпрограмме отводится спе-циальное место в памяти ЭВМ, куда копируется текущее значение парамет-ра. При выходе из подпрограммы это место освобождается.

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

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

Использование подпрограмм в качестве параметров подпрограмм в языке Турбо Паскаль реализовано с помощью процедурного типа. Объявле-ние процедурного типа состоит из заголовка подпрограммы без ее имени, например:

TYPE proc = PROCEDURE (x,y:real; VAR z:integer);

func = FUNCTION (x,y:real) : Boolean;

fupr = FUNCTION (c:char; b:proc; a:func) : real;

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

Продемонстрируем использование процедурного типа.

Пример 7.6.1. Разработать функцию, вычисляющую определенный интеграл от любой функции. Вычислить

.

Для вычисления интеграла используем формулу прямоугольников:

,

где a,b - границы интегрирования; n - количество интервалов интегрирования; h = (b-a)/n - шаг интегрирования. PROGRAM Fint;

TYPE fun = FUNCTION(x:real):real;

FUNCTION Fs(x:real):real; FAR;

BEGIN

Fs:=x*x + 2.4*Cos(x)

END;

FUNCTION Integral(Fx:fun; a,b:real; n:integer):real;

VAR h,sum : real;

k : integer;

BEGIN

sum:=0;

h:=(b-a)/n;

FOR k:=0 TO n-1 DO

sum:=sum + Fx(a+k*h);

Integral:=h*sum

END;

BEGIN

WriteLn('Интеграл = ', Integral(Fs, 1.5, 3.2, 100))

END.

Отметим следующее:

Для того, чтобы подпрограмму можно было использовать в качестве параметра подпрограммы, после ее заголовка в описании необходимо записать служебное слово FAR (дальняя модель вызова);

Cтандартные подпрограммы языка не могут непосредственно исполь-зоваться в качестве параметров подпрогамм.

Задачи

7.6.1. Разработать функцию, определяющую наибольшее значение произвольной функции на отрезке.

7.6.2. Разработать функцию, определяющую размах значений произ-вольной функции на заданном отрезке.

7.6.3. Разработать процедуру, определяющую все корни произвольной функции на заданном отрезке.

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