Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КНИГА_Учимся программировать TURBO PASCAL 7.doc
Скачиваний:
32
Добавлен:
19.08.2019
Размер:
1.62 Mб
Скачать

Тема 9 Процедуры и функции

В языке PASCAL определяются два типа подпрограмм - про­цедуры и функции. Любая подпрограмма обладает той же структу­рой, который обладает и вся программа.

При вызове подпрограммы выполнение основной программы приостанавливается и управление передается в подпрограмму. По окончании работы подпрограммы управление возвращается ос­новной программе.

Основное, не формальное, различие между процедурой и функ­цией состоит в том, что процедура только выполняет какую-либо за­конченную последовательность действий, не возвращая результата работы в основную программу, а функция и выполняет действия, и возвращает результат. Например, вызов функции М := MIN (X, Y) вернет в основную программу значение наименьшего из двух чисел и это значение будет присвоено переменной М.

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

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

Любая процедура начинается с заголовка, который является обязательным. Он состоит из зарезервированного слова PROCEDURE, за которым следует идентификатор имени проце­дуры, а далее в круглых скобках - список формальных параметров: PROCEDURE <ИМЯ ПРОЦЕДУРЫ> (<СПИСОК ФОРМАЛЬНЫХ ПАРАМЕТРОВ>);

За заголовком следуют такие же разделы, что и в основной программе. Завершается процедура точкой с запятой.

Досрочный выход из подпрограммы возможен только с помо­щью EXIT.

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

Все формальные параметры можно разбить на 4 категории:

- параметры-значения (эти параметры в основной программе подпрограммой не изменяются);

- параметры-переменные (эти параметры подпрограмма может изменить в основной программе);

- параметры-константы (используются только в версии 7.0);

- параметры-процедуры и параметры-функции.

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

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

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

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

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

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

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

В TURBO PASCAL можно использовать параметры-перемен­ные и параметры-константы без указания типа. В этом случае фактический параметр может быть переменной любого типа, а от­ветственность за правильность использования того или иного па­раметра возлагается на программиста.

В версии 7.0 можно в качестве параметров-переменных ис­пользовать массивы и строки открытого типа, у которых не зада­ются размеры.

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

Директива FORWARD позволяет как бы разбить на две части одну из подпрограмм. В этом случае сначала записывается полный заголовок первой подпрограммой. Тело этой подпрограммы заме­няется директивой FORWARD. Затем полностью описывается вторая подпрограмма, а уже после этого полностью описывается первая подпрограмма.

Рассмотрим следующие задачи.

Задача 9.1 Написать процедуру ввода элементов матрицы Т.

Описание процедуры можно построить следующим образом:

PROCEDURE TAB(VAR L, К : INTEGER);