Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции(ЯВУ)-Паскаль.doc
Скачиваний:
63
Добавлен:
31.03.2015
Размер:
1.08 Mб
Скачать

9.Разработка программ сложной структуры

9.1. Процедуры и функции

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

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

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

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

Описание процедуры или функции имеет такую же структуру, как и программа на Паскале, и может включать в себя разделы Label,Const,Type, Var, Procedure,Functionи раздел операторов. Любой из разделов, кроме раздела операторов, может отсутствовать. Процедуры и функции могут включать в себя другие, внутренние процедуры и функции.

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

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

Label

Constразделы описаний меток, констант, типов,

Typeпеременных

Var

Procedureразделы описаний внутренних

Functionпроцедур и функций

Begin

<операторы>

end;

Описание функции имеет следующий вид:

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

Label

Constразделы описаний меток, констант, типов,

Typeпеременных

Var

Procedureразделы описаний внутренних

Functionпроцедур и функций

Begin

<операторы>

end;

Описание процедуры или функции завершается точкой с запятой.

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

<имя функции>:=<выражение>;

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

Предложение Procedure(Function) называется заголовком процедуры (функции). В заголовке в круглых скобках указывается список формальных параметров, с помощью которого осуществляется обмен данными между вызывающей программой или подпрограммой и вызываемой процедурой или функцией. Обмен данными между программами и подпрограммами осуществляется тремя способами:

  • с помощью глобальных переменных;

  • с помощью списка формальных параметров;

  • с помощью возвращаемых значений в случае функции.

Рассмотрим подробно все три способа.

9.2. Область действия идентификаторов при использовании процедур и функций. Локальные и глобальные переменные

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

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

Понятие «локальный» или «глобальный» следует понимать относительно, т. е. по отношению к конкретной процедуре или функции.

Пример.

Program Scope;

Var a0,b0,c0: integer;

Procedure p1;

Var a1,b1,c1: integer;

Begin

{ допустимо использование локальных переменных a1,b1,c1

и глобальных переменных a0,b0,c0 }

……….

End;

……….

Begin

{ допустимо использование локальных переменных a0,b0,c0}

…….

End.

Общие правила определения области действия для идентификаторов таковы:

  • действуют все идентификаторы, определенные внутри процедуры или функции;

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

  • локальные идентификаторы процедуры и функции во внешнем окружении не будут действовать;

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

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

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