Подпрограммы. Процедуры и функции
СОДЕРЖАНИЕ:
- Подпрограммы
- Структура подпрограмм
- Описание процедур и функций. Формальные параметры
- Область действия имен
- Использование процедур и функций на примере
Подпрограммы (см. Рапаков стр.143-157!)
Понятие подпрограмма встречается во многих языках программирования, т.к. является основным средством структурирования языка. Очень часто в программах встречаются однотипные участки, которые выполняют одни и те же вычисления с различными данными. Такие части программ целесообразно выполнять с помощью подпрограмм.
Использование подпрограмм позволяет:
- сделать основную программу более наглядной и компактной;
- уменьшить объем используемой памяти ЭВМ;
- сократить время написания и отладки программы, т.к. различные подпрограммы могут быть написаны различными людьми параллельно.
Таким образом, подпрограмма – это часть операторов программы, выделенных в группу, оформленную в виде отдельной конструкции.
Вызов подпрограммы, т.е. выполнение действий, заданных в подпрограмме, может быть произведен в некоторой точке программы посредством указания имени этой подпрограммы.
Структура подпрограмм
Структура подпрограмм почти в точности повторяет структуру всей Pascal-программы.
При описании подпрограммы в общем случае необходимо задать три основные компоненты:
- интерфейс подпрограммы, т.е. информацию, необходимую для ее вызова;
- локальный контекст подпрограммы – совокупность описаний рабочих объектов, с которыми осуществляются действия;
- сами действия (операторы), составляющие смысл подпрограммы.
Интерфейс подпрограммы содержится в заголовке и говорит о том, что именно делает подпрограмма.
Две остальные компоненты называются телом подпрограммы и содержат информацию о том, как выполняется подпрограммой то, что описано в ее заголовке.
В языке Pascal выделяют два вида подпрограмм: процедуры и функции. Различия процедур и функций заключается в назначении и способе их использования.
Функции нужны для вычисления нового значения некоторого выражения, и вызов функции должен быть операндом в выражении.
Процедуры служат для задания последовательности действий и определения новых значений переменных в программе. Вызов процедуры играет роль оператора.
Описание процедур и функций. Формальные параметры
Описание процедур и функций в общем виде:
Заголовок процедуры:
PROCEDURE <имя> (список формальных параметров);
Заголовок функции:
FUNCTION <имя> (список формальных параметров) : <тип результата>;
Тело подпрограммы – это блок, состоящий из двух частей: описание объектов и группа операторов. Более полный общий вид процедуры (общий вид функции отличается только заголовком):
Procedure <имя> (список формальных параметров); {раздел описания переменных} begin {операторы} end;
Здесь <имя> — имя процедуры.
Раздел описаний, как и в основной программе, может включать разделы Label, Const, Type, Var и раздел процедур и функций.
Формальные параметры представляют собой список переменных с указанием их типа, которые отделяются друг от друга «;». Эти переменные не описываются в разделе описания процедур. Допускается использование процедур без параметров.
Если в качестве параметров используется массив, то предварительно нужно описать имя типа массива в разделе Type, а затем использовать это имя при описании массива в качестве формального параметра.
Параметры процедур бывают двух типов:
- параметры-значения (входные параметры или параметры, передаваемые по значению);
- параметры-переменные (выходные параметры). Эти параметры используются для передачи некоторых значений, вычисленных в подпрограмме, обратно в программу.
Описание входных параметров процедуры в списке формальных параметров имеет также вид:
Список переменных1: тип1; список переменных2: тип2;
Соответственно описание выходных параметров выглядит следующим образом:
Var Список переменных1: тип1; Var список переменных2: тип2;
Вызов процедуры в основной программе имеет следующий вид:
<имя процедуры> (список фактических параметров);
Фактические параметры перечисляются через запятую, без указания их типа. Идентификаторы формальных параметров можно считать условными обозначениями в теле подпрограммы тех реальных, фактических параметров, с которыми будет вызвана подпрограмма. При этом должны выполняться требования:
- количество фактических и формальных параметров должно быть одинаковым:
- соответствующие фактические и формальные параметры должны совпадать по порядку следования и по типу.
Имена соответствующих фактических и формальных параметров могут быть одинаковыми или разными.
Входными фактическими параметрами могут быть константы, переменные или выражения, выходными фактическими параметрами могут быть только переменные.
Другой вид подпрограммы в языке Турбо-Паскаль – функция – оформляется аналогично процедуре и отличается от нее по структуре только заголовком, общий вид которого выглядит следующим образом:
Function <имя> (список формальных параметров): тип;
Функции имеют несколько отличительных особенностей:
- Функция имеет только один результат выполнения (но может иметь несколько входных параметров, выходных параметров у функции нет).
- Результат обозначается именем функции. Поэтому в разделе операторов функции обязательно должен присутствовать оператор присваивания, в левой части которого стоит имя этой функции.
- Вызов функции в основной программе осуществляется непосредственно в выражениях по ее имени с указанием фактических параметров.
Область действия имен
Переменные, представленные в разделе описания основной программы, могут быть использованы в теле основной программы и в любой ее подпрограмме. Эти переменные называются глобальными.
Переменные, описанные в подпрограмме, действуют только в теле данной подпрограммы и в любой, объявляемой внутри нее, подпрограмме. Такие переменные называются локальными. Они недоступны для операторов основной программы и др. подпрограмм.
Наглядно схему программы, имеющей некоторые вложенные подпрограммы, можно представить следующим образом:
Самый внешний блок программы обозначен буквой A (имена этого блока «видны» во всех остальных блоках), B и D – подпрограммы, описанные во внешнем блоке, C – подпрограмма, описанная в блоке B (объекты этого блока известны только внутри самого блока).
При написании программ, имеющих вложенные подпрограммы, необходимо соблюдать следующие правила:
- описывать имена переменных в том блоке, где они используются;
- если одна и та же переменная используется в двух и более вложенных блоках, то описывать ее надо в самом внешнем из них;
- если переменная, используемая в подпрограмме, должна сохранять свое значение при следующем вызове подпрограммы, то она должна быть описана во внешнем блоке;
- каждый вызываемый блок должен быть описан до его вызова;
- в Турбо-Паскале в одном модуле может быть описано не более 512 процедур или функций;
- имена формальных параметров не должны совпадать с именами переменных внешнего блока.
Использование процедур и функций на примере
Пример 1: вычислить площадь выпуклого четырехугольника
Пример 2:
Program parametr; Var b, c, d: integer; {глобальные переменные} {Описание процедуры. Формальные параметры x и y, где x – параметр-значение, y - параметр-переменная.} Procedure TTT (x: integer; var y: integer); Var p: integer; { p - локальная переменная} Begin p := 10; x := x+p; y := y+p; {вывод на экран значения глобальной переменной b} Writeln (‘b in TTT=’, b); {вывод на экран измененных значений переменных x и y} Writeln (‘x in TTT=’, x); Writeln (‘y in TTT=’, y); End; {конец процедуры} Begin {начало основной программы} b := 8; c := 1; d := 2; TTT(c, d); {вызов процедуры TTT с фактическими параметрами c и d} {Вывод на экран значений переменных c и d, после возврата из процедуры в основную программу} Writeln (‘c=’, c); Writeln (‘d=’, d); Writeln (p); {} End. {конец программы}
В результате выполнения данной программы на экран будет выведено:
b in TTT=8 x in TTT=11 y in TTT=12 c=1 d=12