Алгоритмы подпрограмм.

Лекция 7

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

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

Принцип действия подпрограмм поясняет рис.3.7.1. Когда вычислительный процесс достигнет блока обращения к процедуре PR1, управление передается в процедуру, формальные параметры W,B и Z получат значения фактических параметров A,B и Y и выполняется алгоритм процедуры. После завершения алгоритма процедуры управление возвращается в точку вызова процедуры в главной программе. Аналогично, когда в главной программе встретится обращение к подпрограмме функции FY (блок, в котором вычисляется значение Z) управление будет передано в подпрограмму функцию FY, формальные параметры P и Q получат значения фактических параметров P и T и будет выполнен алгоритм функции FY. При этом имя должно получить значение и это значение будет использоваться в выражении, из которого осуществлялось обращение к подпрограмме.


Замечание. Не только главная программа может использовать какую-либо подпрограмма, но и любая подпрограмма может использовать другие подпрограммы.

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

Рис.3.7.1

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

 

3.5.1. Подпрограмма процедура.

 

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

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

Рис.3.7.2.

и процедурой.

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

Пример 1. Пусть необходимо вычислять функцию

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

Схема алгоритма главной программы приведена на рис.3.7.3, а схема алгоритма процедуры РВХ представлена на рис.3.7.4.

 

Формальные и фактические параметры делятся на входные и выходные. Входные – это параметры, через которые в подпрограмму передаются значения данных из вызывающей программы (переменные А и Х на рис3.7.3).

Выходные – это параметры, через которые из процедуры возвращаются значения результатов (переменная У).

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

то обращение к подпрограмме запишется в виде

3.5.2. Подпрограмма функция.

 

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

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

2. Смысл фактических и формальных параметров для функции тот же, что и в случае процедуры, но все параметры функции являются входными.

3. Обращение к подпрограмме типа «Функция» в главной программе осуществляется по имени из выражения. После имени записывается список фактических параметров.

Пример 2. Оформим алгоритм предыдущего примера в виде главной программы и подпрограммы функции с именем PFY. В данном случае списки формальных и фактических параметров будут содержать только две переменные – А и Х, так как результат из подпрограммы функции возвращается через имя функции. Схема алгоритма главной программы приведена на рис.3.7.5, а схема алгоритма подпрограммы функции представлена на рис.3.7.6.

 

Правила и рекомендации.

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

2. Значения входных фактических параметров должны быть определены к моменту обращения к подпрограмме.

3. Не рекомендуется в подпрограммах использовать ввод и вывод данных (если это не подпрограммы ввода, вывода). Это затрудняет работу с подпрограммами и ограничивает область их применения.

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

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

где ln(x) – натуральный логарифм. Так как при Х <=0 значение логарифма не определено, то надо предусмотреть проверку Х и при Х<=0 программа должна выдавать сообщение "аргумент логарифма < 0".

Схемы алгоритмов главной программы и процедуры вычисления функции приведены на рис.3.7.7.

Рис.3.7.7.