Процедуры управления программой. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Процедуры управления программой.



 

Delay (I:word) – задержка выполнения программы на I мс.

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

Halt (N:word) – прекращение выполнения программы и передача управления системе программирования (если выполнялся.PAS – файл) и DOS (если выполнялся.EXE – файл). N - код завершения программы, передаваемый в операционную систему.

RunError (ErrCode:word) – прекращение выполнения программы и генерация ошибки времени выполнения. Errcode – параметр типа word, содержащий номер ошибки.

 

Процедуры и функции пользователя.

 

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

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

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

 

Процедуры.

 

Описание процедуры включает заголовок (имя) и тело процедуры. Заголовок состоит из зарезервированного слова Procedure, идентификатора (имени) процедуры и необязательного, заключенного в круглые скобки, списка формальных параметров с указанием типа каждого параметра. Имя процедуры – идентификатора, уникально в пределах программы. Тело программы представляет собой локальный блок, по структуре аналогичный программе.

Общая структура описания заголовка процедуры:

 

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

Общий вид описания процедуры:

<Заголовок процедуры>;

<Тело процедуры>;.

 

Описание параметров аналогично описанию переменных и констант в программе: список имен однотипных параметров, двоеточие, тип данных. Описание параметров отделяются друг от друга точкой с запятой. Если мы описываем переменную, т.е. параметр, который может изменяться в теле подпрограммы, то перед ней необходимо поставить VAR, если описываем константу, то ничего не указывается. В заголовке подпрограммы нельзя указывать составной тип (например, тип – массив, или строковый тип). Если возникла необходимость передать параметр такого типа, то этот тип следует определить в разделе описания типов.

Функции.

Функция, определенная пользователем, состоит из заголовка и тела функции. Заголовок содержит зарезервированное слово Function, идентификатор (имя) функции, заключенный в круглые скобки, необязательный список формальных параметров и тип возвращаемого функцией значения. Тело функции представляет собой локальный блок, по структуре аналогичный программе.

Общая структура описания заголовка функции:

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

 

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

 

<Заголовок функции>;

<Тело функции>;.

 

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

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

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

Процедура будет выглядеть следующим образом:

 

Procedure SUMMA (Var A: VEKTOR; N: Byte; Var SUM: Integer);

{Процедура вычисления суммы элементов массива; входными параметрами являются: А – типа VEKTOR – массив, элементы которого необходимо суммировать; N - типа Byte – размерность массива; выходным параметром является SUM – типа Integer – сумма элементов массива}.

 

Var I: Byte;

Begin SUM:=Ø;

For I:=1 To N Do

SUM:=SUM+A[I];

End;

 

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

 

Function SUMМ (Var A: VEKTOR; N: Byte): Integer;

{Функция возвращает значение суммы элементов вектора; возвращаемое значение типа Integer; входными параметрами являются: А – типа VEKTOR – вектор, элементы которого необходимо суммировать; N – типа Byte - размерность массива}.

 

Var I: Byte;

S: Integer;

Begin S:=Ø;

For I:=1 To N Do

S:=S+A[I];

SUMМ:=S;

End;

Для вычисления суммы мы используем рабочую переменную S. Вместо нее нельзя использовать имя функции SUMМ, т.к. в операторе SUMМ:= SUMМ+ A[I], компилятор обнаружит имя функции в правой части, будет трактовать его как вызов функции и выдаст сообщения об ошибке, связанной с отсутствием параметров вызова функции.

Пример вызовов описанных выше подпрограмм. Пусть требуется вычислить сумму первых 30 элементов массива В типа VEKTOR. Это делается при помощи вызова процедуры:

 

SUMМ (В,30,S1);

или при помощи обращения к функции:

S1:= SUMМ (В,30);.

Бывают ситуации, когда подпрограммы вызывают друг друга. Тогда выполнение условия, при котором вызываемая подпрограмма должна быть описана ранее, невозможно. На этот случай предусмотрено так называемое предварительное описание подпрограммы, состоящее из ее заголовка и зарезервированного слова FORWARD.

Параметры подпрограмм.

 

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

Procedure поехать в отпуск (САНАТОРИЙ: место поездки;

СПОСОБ ПОЕЗДКИ: вид транспорта);

Begin

купить билеты на СПОСОБ ПОЕЗДКИ;

уехать в САНАТОРИЙ;

End;

Возможны различные вызовы этой процедуры:

поехать в отпуск (Сочи, авиа);

поехать в отпуск (Ялта, ж/д);.

Формальными параметрами будут СПОСОБ ПОЕЗДКИ и САНАТОРИЙ, а фактическими авиа, Сочи, ж/д, Ялта. При вызове процедуры фактические параметры подставляются на место формальных параметров, и именно над ними будут выполняться действия, указанные в процедуре. Например, вышеуказанные вызовы приведут к следующим действиям:

купить билеты авиа;

уехать в Сочи;

уехать в Ялта;

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

Параметры подпрограмм отличаются друг от друга не только типом, но и способом передачи. Параметры можно передавать двумя способами как параметры – переменные (по ссылке) или как параметры – значения. Если подпрограмма изменяет значение параметра и это изменение должно быть передано в основную программу, то перед описанием параметра ставится слово Var. Это передача параметра как параметра – переменной.

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

 



Поделиться:


Последнее изменение этой страницы: 2017-02-09; просмотров: 235; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 184.72.135.210 (0.069 с.)