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

 

СОДЕРЖАНИЕ:

  1. Подпрограммы
  2. Структура подпрограмм
  3. Описание процедур и функций. Формальные параметры
  4. Область действия имен
  5. Использование процедур и функций на примере

 

 

Подпрограммы (см. Рапаков стр.143-157!)

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

Использование подпрограмм позволяет:

  1. сделать основную программу более наглядной и компактной;
  2. уменьшить объем используемой памяти ЭВМ;
  3. сократить время написания и отладки программы, т.к. различные подпрограммы могут быть написаны различными людьми параллельно.

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

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

 

Структура подпрограмм

Структура подпрограмм почти в точности повторяет структуру всей Pascal-программы.

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

  • интерфейс подпрограммы, т.е. информацию, необходимую для ее вызова;
  • локальный контекст подпрограммы – совокупность описаний рабочих объектов, с которыми осуществляются действия;
  • сами действия (операторы), составляющие  смысл подпрограммы.

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

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

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

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

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

 

Описание процедур и функций. Формальные параметры

Описание процедур и функций в общем виде:

123

Заголовок процедуры:

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

Заголовок функции:

FUNCTION  <имя> (список формальных параметров) : <тип результата>;

 

Тело подпрограммы – это блок, состоящий из двух частей: описание объектов и группа операторов. Более полный общий вид процедуры (общий вид функции отличается только заголовком):

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

                        {раздел описания переменных}

begin

                        {операторы}

end;

Здесь <имя>  — имя процедуры.

Раздел описаний, как и в основной программе, может включать разделы Label, Const, Type, Var и раздел процедур и функций.

Формальные параметры представляют собой список переменных с указанием их типа, которые отделяются друг от друга «;». Эти переменные не описываются в разделе описания процедур. Допускается использование процедур без параметров.

Если в качестве параметров используется массив, то предварительно нужно описать имя типа массива в разделе Type, а затем использовать это имя при описании массива в качестве формального параметра.

Параметры процедур бывают двух типов:

  • параметры-значения (входные параметры или параметры, передаваемые по значению);
  • параметры-переменные (выходные параметры). Эти параметры используются для передачи некоторых значений, вычисленных в подпрограмме, обратно в программу.

Описание входных параметров процедуры в списке формальных параметров имеет также вид:

Список переменных1: тип1; список переменных2: тип2;

Соответственно описание выходных параметров выглядит следующим образом:

Var Список переменных1: тип1; Var список переменных2: тип2;

Вызов процедуры в основной программе имеет следующий вид:

<имя процедуры> (список фактических параметров);

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

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

Имена соответствующих фактических и формальных параметров могут быть одинаковыми или разными.

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

Другой вид подпрограммы в языке Турбо-Паскаль – функция – оформляется аналогично процедуре и отличается от нее по структуре только заголовком, общий вид которого выглядит следующим образом:

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

Функции имеют несколько отличительных особенностей:

  1. Функция имеет только один результат выполнения (но может иметь несколько входных параметров, выходных параметров у функции нет).
  2. Результат обозначается именем функции. Поэтому в разделе операторов функции обязательно должен присутствовать оператор присваивания, в левой части которого стоит имя этой функции.
  3. Вызов функции в основной программе осуществляется непосредственно в выражениях по ее имени с указанием фактических параметров.

 

Область действия имен

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

Переменные, описанные в подпрограмме, действуют только в теле данной подпрограммы и в любой, объявляемой внутри нее, подпрограмме. Такие переменные называются локальными. Они недоступны для операторов основной программы и др. подпрограмм.

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

123

Самый внешний блок программы обозначен буквой A (имена этого блока «видны» во всех остальных блоках), B и D – подпрограммы, описанные во внешнем блоке, C – подпрограмма, описанная в блоке B (объекты этого блока известны только внутри самого блока).

При написании программ, имеющих вложенные подпрограммы, необходимо соблюдать следующие правила:

  1. описывать имена переменных в том блоке, где они используются;
  2. если одна и та же переменная используется в двух и более вложенных блоках, то описывать ее надо в самом внешнем из них;
  3. если переменная, используемая в подпрограмме, должна сохранять свое значение при следующем вызове подпрограммы, то она должна быть описана во внешнем блоке;
  4. каждый вызываемый блок должен быть описан до его вызова;
  5. в Турбо-Паскале в одном модуле может быть описано не более 512 процедур или функций;
  6. имена формальных параметров не должны совпадать с именами переменных внешнего блока.

 

Использование процедур и функций на примере

Пример 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