Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Процедуры и функции.doc
Скачиваний:
3
Добавлен:
08.12.2018
Размер:
522.24 Кб
Скачать

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

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

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

зозвращает главной программе результат (подпрограмма-процедура не возвращает ibho результирующего значения).

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

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

7.3.1. Процедуры

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

Описание процедуры:

Описание функции:

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

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

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

В качестве примера опишем процедуру, которая прерывает, выполнение про­ граммы и выдает соответствующее сообщение об ошибке: г

В данной процедуре пользователя использована переменная Msg типа string, в которой хранится текст сообщения о характере ошибки, вызвавшей прерывание программы. Для прерывания выполнения программы используется стандартная процедура Halt из стандартного библиотечного модуля System.

Процедура не может выполниться сама, ее необходимо вызвать по имени и указать фактические параметры того же типа, что и формальные. Количество и тип формальных параметров равны количеству и типу фактических параметров. В ка­честве примера приведем фрагмент программы, в котором используется описанная выше процедура Abort:

В разделе описания программы описываются константа Limit, ограничиваю­щая количество вводимых чисел; в разделе описания переменных описываются пе­ременные Count, Item, Sum типа integer. Затем в блоке описания записана директи­ва компилятору {$1 ABORT.PAS}, указывающая, что при компиляции данной про­граммы в нее нужно включить в качестве процедуры программу ABORT.PAS.

В начале программы обнуляются значения количества введенных чисел Count и их сумма Sum. Потом выполняется цикл, пока очередное вводимое число меньше предельного, заданного значением константы Limit. Сначала устанавливается но­мер очередного числа, затем на экран выводится приглашение "Введите 1—е (2—е и т.п.) число", считывается значение числа с клавиатуры в переменную Item. Затем проверяется условие Item<0.

Если условие выполняется, то вызывается внешняя процедура Abort, которой передается фактический параметр-значение "введено отрицательное число". Это значение присваивается формальному параметру Msg процедуры Abort. Процедура Abort выводит на экран сообщение "Ошибка: и печатает текст сообщения — значе­ние параметра Msg "введено отрицательное число", после чего вызывает стандарт­ную процедуру Halt(l), которая прерывает выполнение программы.

Если условие Item<0 не выполняется, то значение суммы Sum увеличивается на значение введенного числа Item, и управление передается в заголовок цикла для проверки условия Count < Limit. Если условие соблюдается, то тело цикла выпол­няется еще раз, иначе цикл завершается, а управление в программе передается на оператор, следующий за циклом, т. е. за резервированным словом end;, обозначаю­щим окончание составного оператора в теле цикла. После этого на экран выводится

сообщение "Сумма введенных чисел равна" и печатается значение переменной Sum. На этом выполнение программы завершается.

Упражнение 1. Запустите интегрированную среду программирования. Введите в пер­вое окно редактора текст программы DemoProc, а во второе окно — текст процедуры Abort и запишите файлы на диск под соответствующими именами.

Примечание. Чтобы открыть новое окно в пункте File главного меню интегрированной среды программирования, выберите опцию New. Для перехода из одного окна в другое на­жимайте F6.

Откомпилируйте файл DemoProc. Если появятся сообщения об ошибке, внеси­те исправления и откомпилируйте вновь. После того как компиляция выполнится успешно, задайте для просмотра в окне отладчика величины Sum, Item и выраже­ние Count < Limit. Для того чтобы одновременно на экране наблюдать окна с тек­стами программы и процедуры, а также окно просмотра значений переменных в пункте Window главного меню интегрированной среды, задайте опцию Tile. На­жатием клавиши F7 запустите программу на исполнение в пошаговом режиме с за­ходом в процедуры. Экран компьютера будет выглядеть, как показано на рис. 7.1.

Нажимая клавишу F7, наблюдайте за значениями переменных и выражениями в окне просмотра.

В ответ на запрос "Введите число" введите отрицательное число и обратите внимание на соблюдение условия Item < 0, вследствие чего из основной программы вызывается процедура Abort. При этом в формальный параметр процедуры — пе­ременную Msg передается значение сообщения "Введено отрицательное число". Результатом действия процедуры будет вывод на экран сообщения "Ошибка: введе­но отрицательное число" и прерывание работы программы.

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

Если процедура возвращает в программу какие-то значения, соответствующие переменные должны быть описаны, как параметры-переменные с использованием :лова var (см. Параметры).