Файл: Вспомогательные алгоритмы.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 08.05.2024

Просмотров: 67

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

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

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

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

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

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

Примеры стандартных процедур: 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 – исходные, т.е. параметры-значения, а М - играет роль результата, т.е. параметр-переменная.



Алгоритм-процедура

- +

Используем этот алгоритм при описании основного алгоритма.

Ответы: max(a+b,a-b)=c

max(a2,b2 )= d

max(a,b)=c

При описании основного алгоритма

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

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

z

1)

2)

3)

p

M

a+b

a-b

c

a2

b2

d

a

b

c

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

Алгоритм-функция.

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

Пример: Напишем для рассмотренной выше задачи алгоритм-функцию, вычисляющий max(z,p). В отличие от процедуры значение результата присваивается имени функции.


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

2вариант:

-

z

p

1

a+b

a-b

2

a2

b2

3

a

b

Здесь 2 формальных параметра - z, p. Это параметры-значения. Результат присваивается имени.

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

Программирование с использованием процедур и функций. Описание подпрограммы-процедуры.

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