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

1.4 Процедуры

Формат спецификации процедуры:

procedure <имя>(<список формальных параметров>);

Входные параметры (аргументы) процедуры передаются значением или по адресу, а выходные параметры (результаты) – по адресу.

Вызов процедуры – это отдельный оператор, который содержит имя процедуры и список фактических параметров.

Например:

P(x); {это вызов процедуры P(x) }

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

procedure power( base, exponent: real; var pow: real);

begin

pow:= exp( exponent * ln(base));

end;

Пример вызова процедуры power:

power(3, 4, j);

writeln(j);

1.5. Передача массивов в качестве параметров

В качестве примера будем использовать подпрограмму вычисления суммы значений элементов одномерного массива.

1.5.1. Формальные параметры как массивы с фиксированными размерами

В данном примере для описания типов параметров используется заранее определенный тип massiv с фиксированной размерностью.

uses crt;

const N=3;

type

massiv = array[1..N] of integer;

function sum_1( x: massiv ): integer;

var

i : integer; sum: integer;

begin

sum:= 0;

for i:= 1 to N do sum:= sum+x[i];

sum_1:= sum;

end;

Var {main – главная программа }

i:integer; a:massiv;

begin

clrscr;

writeln('massiv a');

for i:=1 to N do readln(a[i]);

writeln('summa= ', sum_1(a));

end.

1.5.2. Формальные параметры как массивы со «свободными» размерами

Существует несколько возможностей передавать массивы в подпрограмму, не указывая их размеры. В языке Pascal для этого можно использовать функции low, high и sizeof. Использование функций low, high и sizeof требует подключения модуля crt.

Функции low и high возвращают соответственно наименьшее и наибольшее значение индекса массива. Использование функции high для определения размера массива в подпрограмме приведено на рисунке 2.

Рисунок 2 – Использование функции high

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

Использование функции sizeof для определения размера массива в подпрограмме приведено на рисунке 3. Функция sizeof возвращает размер объекта данных в байтах.

Рисунок.3 – Использование функции sizeof

Обратите внимание, что в данных примерах описание размеров фактического массива a начинается с 0.

1.6. Передача подпрограммы как параметра

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

В качестве примера рассмотрим программу, которая строит таблицу сумм и произведений целых чисел. Для построения таблицы используется процедура PrintTable, которая для вычисления значения таблицы вызывает функцию add (вычисление суммы) или функцию Multiply (вычисление произведения). Имя вызываемой функции процедура получает как параметр Operation.

В программе описание процедурного типа имеет вид:

type

Func = function (x,y;integer):integer;

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

Пример передачи подпрограммы как параметра приведен на рисунке 4.

Рисунок 4. – Пример передачи подпрограммы как параметра