Глава 10. Программирование процессов с подпроцессами

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

Глава 10. Программирование процессов с подпроцессами - student2.ru

Рис. 10.1. Структура вычислительного процесса

Процесс – основные (главные) вычисления, реализующие общую цель задачи.

Подпроцесс – дополнительные (вспомогательные) вычисления детализации частных подзадач процесса.

По критерию назначение подпроцессы классифицируются на стандартные и индивидуальные (рис. 10.2).

Глава 10. Программирование процессов с подпроцессами - student2.ru Рис. 10.2. Классификация подпроцессов

Стандартный – подпроцесс реализации типовых громоздких вспомогательных вычислений.

Типичный пример – расчет тригонометрических и иных трансцендентных функций численным методом.

Индивидуальный – подпроцесс реализации одинаковых по структуре нестандартных расчётов, планируемых в разных точках задачи.

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

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

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

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

Глава 10. Программирование процессов с подпроцессами - student2.ru

Рис. 10.3. Классификация видов данных

Локальные – данные (параметры), используемые внутри процесса или подпроцесса без права передачи.

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

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

Локальные – реализуются полным набором данных (константы, переменные, функции, арифметические выражения). По месторасположению они жестко разделяются на используемые в процессе и в каждом подпроцессе.

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

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

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

Обращение – указание перехода из процесса в подпроцесс детализации некоторого фрагмента вычислений.

Структура обращения:

имя (фактические параметры)

где имя – буквенно-цифровое обозначение подпроцесса, к которому осуществляется обращение;

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

( ) – ограничители списка.

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

Например, в качестве обращений к стандартным подпроцессам могут использоваться sin(p), sin(p/2), sin(a+b), к индивидуальным подпроцессам – f(a), sum(a, b), f2(0.63, x ,cos(c)). В первых четырёх обращениях используются по одному фактическому параметру, в пятом – два, в шестом – три.

Список фактических параметров определяется математической моделью задачи.

Имена формальных параметров подпроцесса задаются программистом. Ввиду того, что подпроцесс оформляется отдельным модулем, некоторые формальные и фактические параметры могут иметь одинаковые обозначения, однако лучше этого не допускать. Так, в подпроцессе вычисления синуса, разложенного в степенной ряд, в качестве формального параметра выбрана переменная X. Поэтому при работе с процессом, в котором указаны три обращения: sin(p), sin(p/2), sin(a+b), в первом случае формальному параметру «x» будет присвоено численное значение фактического параметра «p», во втором – значение «p/2», в третьем – «a+b».

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

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

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

Так, записанное ранее для использования в процессе обращение sum(a, b), требует в подпроцессе двух формальных параметров, например, «x» и «y», для вычисления функции sum. Первому из них («х») будет присвоено численное значение a, второму («y») – b.

Внимание! Результаты проведённых в подпроцессе расчётов должны быть возвращены в процесс.

Схема взаимодействия процесса с подпроцессами имеет вид рис. 10.4.

В простейшем варианте взаимодействия используется процесс и один подпроцесс.

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

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

Глава 10. Программирование процессов с подпроцессами - student2.ru

Рис. 10.4. Схема взаимодействия процесса с подпроцессами

Основной – алгоритм реализации главного вычислительного процесса.

Вспомогательный (дополнительный) – алгоритм реализации конкретного вычислительного подпроцесса.

Внимание! Алгоритмизации подлежат индивидуальные подпроцессы. Стандартные подпроцессы пользовательской алгоритмизации не требуют.

Вспомогательные алгоритмы выполняются в виде отдельных схем. Их особенностями являются:

· надписи «вход» («наименование») в начале алгоритма и «выход» («возвращаемое значение») – в конце;

Глава 10. Программирование процессов с подпроцессами - student2.ru

· использование в качестве операндов запланированных формальных параметров и собственных локальных, если это необходимо.

Вторая – организация взаимодействий алгоритмов с помощью обращений.

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

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

специальным блоком «Предопределённый процесс» (подпроцесс с несколькими фактическими параметрами).

Глава 10. Программирование процессов с подпроцессами - student2.ru

Фрагменты основного алгоритма и требуемых ему дополнительных представлены на рис. 10.5.

Блок 3 основного алгоритма содержит два обращения – cos(a) и fakt(c). Первое – стандартное – будет реализовано соответствующей системной подпрограммой. Второе – индивидуальное – реализовано дополнительным алгоритмом именованным fakt (f), где «f» – формальный параметр, принимающий численное значение фактического – «с» – целой положительной константы.

Блок 4 организует из оператора присваивания одно обращение sum(Y(n)), для расчета суммы элементов одномерного массива Y(n) к дополнительному алгоритму 2, именованному sum(T(k)), определяя формальные параметры – одномерный массив Т размером k единиц.

Глава 10. Программирование процессов с подпроцессами - student2.ru

Основной Дополнительный 1 Дополнительный 2

Рис. 10.5. Пример алгоритмизации процесса с двумя подпроцессами

Первый дополнительный алгоритм реализует вычисления факториала по заданному в обращении (блок 3) фактическому параметру «с».

Подразумевается, что результаты проведённых в дополнительном алгоритме расчётов будут возвращены в основной.

В простейшем варианте процесс с подпроцессами использует основной и один вспомогательный алгоритмы.

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

Головная (главная) программа – программный модуль, реализующий процесс (основной алгоритм).

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

Внимание! Подпрограмма работает только по вызову головной программы или другой подпрограммы.

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

Подпрограммы, как и подпроцессы, условно делятся на:

стандартные;

индивидуальные.

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

В языке Си/Си++ основная базовая конструкция – функция.

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

Функция – универсальная конструкция программирования как головных, так и дополнительных алгоритмов (рис. 10.6).

Глава 10. Программирование процессов с подпроцессами - student2.ru

Рис. 10.6. Классификация функций Си/Си++ по назначению

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

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

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

По критерию взаимосвязь все функции Си/Си++ можно подразделить на вызывающие и вызываемые (рис. 10.7).

Глава 10. Программирование процессов с подпроцессами - student2.ru

Рис. 10.7. Классификация функций Си/Си++ по взаимосвязи

Вызывающая – функция, содержащая вызов (вызовы) любой другой.

Вызываемая – функция, к которой обращен вызов (активизируемая им).

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

Дополнительная функция может быть стандартной или пользовательской (рис. 10.8).

Глава 10. Программирование процессов с подпроцессами - student2.ru Рис. 10.8. Виды дополнительных функций

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

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

Каждая функция имеет заголовок. Заголовок определяет её основные элементы:

название (назначение);

формальные параметры;

тип возвращаемого результата.

Внимание! Программа в Си/Си++ есть совокупность последовательно расположенных пользовательских функций (головной и дополнительных), в любом варианте их взаимного расположения.

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

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

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

С учетом изложенного, программная реализация вычислительного процесса с подпроцессами на алгоритмическом языке Си/Си++ представлена на рис.10.9.

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

Глава 10. Программирование процессов с подпроцессами - student2.ru

Рис. 10.10. Структура фактических параметров

Рассмотрим программирование с использованием подпрограмм различной сложности на конкретных примерах.

Наши рекомендации