Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМКД-Паскаль-2012.docx
Скачиваний:
38
Добавлен:
01.05.2015
Размер:
561.45 Кб
Скачать

Тема 10. Процедуры и функции Подпрограммы

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

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

Весьма поэтичное объяснение понятия подпрограмма дал В.Ф. Очков: "Подпрограмма - это припев песни, который поют несколько раз, а в текстах песен печатают только один раз".

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

Таким образом, подпрограмма - это в первую очередь программа. Со всеми полагающимися полноценной программе атрибутами: именем, разделами описания меток (label), констант (const), типов (type), переменных (var) и даже со своими (вложенными) функциями и процедурами.

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

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

Объявление и описание

Подпрограммы объявляются и описываются в начале Pascal-программы, до ключевого слова begin, означающего начало тела программы.

Различия между процедурами и функциями начинаются уже с момента их объявления.

Объявление функции

Функции объявляются следующим образом:

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

Объявление процедуры

Процедуры следует объявлять так:

Если объявление процедуры оторвано от ее описания, нужно поставить после него ключевое слово forward:

Описание подпрограммы

Описание подпрограммы должно идти после ее объявления. Оно осуществляется по следующей схеме (единой для процедур и функций):

[ uses <имена_подключаемых_модулей>;]

[ label <список_меток>;]

[ const <имя_константы> = <значение_константы>;]

[ type <имя_типа> = <определение_типа>;]

[ var <имя_переменной> : <тип_переменной>;]

[ procedure <имя_процедуры> <описание_процедуры>]

[ function <имя_функции> <описание_функции>;]

begin {начало тела подпрограммы}

<операторы>

end; (* конец тела подпрограммы *)

Если объявление подпрограммы было оторвано от ее описания, то описание начинается дополнительной строкой с указанием только имени подпрограммы:

или

Описания двух различных подпрограмм не могут пересекаться: каждый блок должен быть логически законченным. Однако внутри любой подпрограммы (она ведь тоже является программой, помните?) могут быть описаны другие процедуры или функции - вложенные. На них распространяются все те же правила объявления и описания подпрограмм.