Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Praktikum_po_programmirovaniyu.doc
Скачиваний:
23
Добавлен:
09.12.2018
Размер:
2.5 Mб
Скачать

5.2. Процедуры и функции пользователя

Технология программирования с использованием процедур и функций, организованных пользователем, дает ряд преимуществ:

- обеспечивает одновременную работу нескольких программистов над одной программой;

- позволяет проводить независимую отладку каждой подпрограммы в автономном режиме;

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

Язык Паскаль предоставляет пять основных способов использования и размещения подпрограмм:

- основная программа, процедуры и функции расположены в одном файле;

- подпрограммы расположены в отдельных файлах и включаются в основной файл с помощью директивы компилятора $I;

78

- подпрограммы организуются как оверлейные структуры и поочередно загружаются в одно и то же место памяти;

- подпрограммы пишутся на машинном коде и включаются в программу одним из перечисленных способов;

- подпрограммы оформляются как внешние и вызываются из основной программы.

Описание процедуры пользователя включает заголовок процедуры и тело процедуры.

Заголовок состоит из зарезервированного слова Procedure, имени процедуры и необязательного списка параметров с указанием типа каждого параметра:

Procedure Sum(x, y : integer; z:real);

Procedure Ort; {Заголовок процедуры без параметров}

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

Имя процедуры – идентификатор, уникальный в пределах программы. Тело процедуры – локальный блок, по структуре аналогичный программе.

Для обращения к процедуре используется оператор вызова процедуры:

Sum (a,b,c);

Ort;

Параметры в операторе вызова процедуры, заключенные в скобки, называются фактическими параметрами. Эти параметры передаются в процедуру.

Между фактическими параметрами в операторе вызова процедуры и формальными параметрами в заголовке описания процедуры устанавливается взаимнооднозначное соответствие путем перебора слева направо. Количество и тип формальных и фактических параметров должно совпадать. Механизм параметров позволяет вызывать процедуру с различными начальными условиями.

79

Если процедура должна возвратить в вызвавшую ее программу какие-то параметры, то эти параметры в заголовке процедуры пишутся со словом var.

Prozedure Delta(x: real; y: real; var z: boolean);

Параметр z возвращается в программу, вызвавшую процедуру Delta.

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

Program Dem;

var a, b: integer;

Prozedure Ras(x,y : integer); {Заголовок процедуры}

var z: real;

begin

z: = (x+y)/2;

writeln(‘Среднее арифметическое = ‘, z);

end;

begin

writeln(‘Введите значения a и b’);

readln(a,b);

Ras(a,b); {Оператор вызова процедуры}

end.

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

Program Dem;

var a, b: integer; c : real;

Prozedure Ras(x, y : integer; var z: real);

begin

z: = (x+y)/2;

end;

80

begin

writeln(‘Введите значения a и b’);

readln(a,b);

Ras(a,b,c);

writeln(‘Среднее арифметическое = ‘, c);

end.

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

Function Swot(x: real; y: integer): integer;

Function Zast: real; {Функция без параметров}

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

Решим предыдущую задачу с использованием функции.

Program Dem;

var a, b: integer;

Function Ras(x,y : integer): real; {Заголовок функции}

begin

Ras: = (x+y)/2;

end;

begin

writeln(‘Введите значения a и b’);

readln(a,b);

writeln(‘Среднее арифметическое = ‘, Ras(a,b));

end.

81