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

Вспомогательные алгоритмы. Процедуры и функции.

Вспомогательным алгоритмом называется алгоритм, целиком используемый в составе другого алгоритма. Понятие «вспомогательный» не определяет какой-то особый класс алгоритмов, им может быть любой алгоритм, если он использован в составе основного алгоритма. При решении многих задач возникает необходимость в проведении одних и тех же вычислений на различных этапах выполнения программы при различных значениях данных. Повторение одной и той же последовательности действий может быть оформлено в виде подпрограммы (вспомогательного алгоритма). При этом повторяющиеся группы операторов записываются в подпрограмме по отношению к некоторым формальным параметрам, а в нужных местах основной программы обеспечивается лишь обращение к подпрограмме с указанием фактических параметров. Использование подпрограмм позволяет следовать принципам структурного программирования, т.е. разбивать сложную задачу на простые подзадачи, в результате основная программа собирается в виде обращения к подпрограммам.

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

«Любое имя до его использования должно быть описано или определено.»

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

Примеры стандартных процедур: Insert, Delete, Val, Str, Read, Readln, Write, Writeln…

Примеры стандартных функций: Sin, Cos, Ord, Chr, Pos, Length…

Алгоритмы-процедуры и алгоритмы-функции.

Формальные и фактические параметры.

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

  1. Параметры, играющие роль исходных данных

  2. Параметры, играющие роль результата

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

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

Стеком является структура данных типа LIFO(Last In First Out-последним вошел, первым вышел).

Если параметром является переменная или константа, то значение параметра сразу копируется из данных в стек. Таким образом, в этом случае значения фактического параметра находятся одновременно в двух местах:

  • В сегменте данных (оригинал)

  • В сегменте стека (копия)

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

2) Формальные параметры, играющие роль результата, записываются в заголовке после слова var. Они могут при выполнении вспомогательного алгоритма заменяться только на имена переменных. Все изменения такого параметра в подпрограмме автоматически происходят с соответствующей ему переменной. Это становится возможным благодаря тому, что в подпрограмму в стек передается только адрес, копия же переменной в стек не копируется. Поэтому такой способ передачи параметра называют передачей по адресу, а такие формальные параметры называются параметры-переменные.

Задача:

Вычислить функцию

max(a,b) + x, x<0

y= max(a+b,a-b)

max(a2,b2)

Решение:

Как видно из задания необходимо оформить подпрограмму для нахождения мaксимума, т.e. алгоритм-процедуру. Введем переменную М=max(z,p) и тогда дадим название алгоритму-процедуре max(z,p,М), где z,p и М – формальные параметры, но их роли разные: z,p – исходные, т.е. параметры-значения, а М - играет роль результата, т.е. параметр-переменная.