Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Процедуры и функции лекция 4.docx
Скачиваний:
1
Добавлен:
14.04.2019
Размер:
34.04 Кб
Скачать

10

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

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

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

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

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

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

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

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

В главной программе все подпрограммы размещаются после раздела описания данных перед оператором Begin исполняемой части, а вызываются при необходимости в процессе выполнения главной программы или другой подпрограммы.

Любая подпрограмма состоит из заголовка (имени) подпрограммы, раздела описания данных и раздела операторов.

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

Структура подпрограммы процедуры имеет вид:

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

{раздел локальних данных}

begin {раздел выполняемых операторов}

. . .

end;

Имя подпрограммы выбирает программист, как и имя переменной. В заголовке процедуры после имени перечисляются формальные параметры. В списке формальных параметров перечисляются через «;» отдельные параметры и информация об их типе. Некоторые параметры предназначены для передачи данных в процедуру, другие – для возвращения результатов из процедуры в ту программную единицу, которая их вызывает.

Наличие слова Var перед параметром является внешним признаком его типа. Следует помнить, что в случае, когда параметр должен только передавать значения в процедуру, перед его именем Var можно не ставить (когда формальный параметр является параметром-значением). В случае использования параметра-переменной (если подпрограммы должна вернуть один или несколько результатов в ту программу, которая ее вызвала), перед именем параметра-переменной необходимо ставить слово Var.

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

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

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

В разделе локальных данных (который вообще может отсутствовать) описывают те данные, которые используются только для «служебных» целей в самой процедуре.

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

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

Необходимо обратить внимание на то, что между формальными и фактическими параметрами должны быть такие требования: количество, тип и порядок размещения фактических параметров должен отвечать количеству, типу и порядку размещения формальных параметров.

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

Следует обратить внимание на особенности использования массивов во время работы с подпрограммами. Массив может быть формальным параметром, при его описании в заголовке нужно ссылаться на заранее описанный тип в главной программе. В языке ТР (начиная с 7 версии) появилась возможность использовать открытый массив, то есть в заголовке подпрограммы указывать массив без задания его длины, а в разделе исполняемых операторов организовывать циклы по обработке такого массива с использованием функции Low и High. Эта функция определяет верхнюю границу массива, который передается в подпрограмму для обработки.

Рассмотрим несколько простейших примеров:

Пример 1

var a,b: integer;

Begin

a:=1; b:=2;

b:=a+b;

writeln(b);

a:=5; b:=9;

b:=a+b;

writeln(b);

readln;

End.

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