Понятие модульного программирования
В основе МП лежит процесс проектирования «сверху-вниз» (декомпозиция), т. е. разбиение решаемой задачи на относительно простые и более мелкие подзадачи. К каждой из полученных задач применяется этот метод. Процесс разбиения продолжается, пока программист не получит логически ясные для себя подзадачи (нисходящее проектирование). Поддержкой этой технологии является механизм подпрограмм, который наряду с управляющими структурами является частью структурного программирования.
Подпрограмма – одно из базовых понятий программирования, которое предназначено для реализации некоторой операции (алгоритма, способа обработки данных). Способ расширения множества операций, описывается как замкнутая (самостоятельная) конструкция. У неё есть:
· Имя
· Параметры (входные/выходные данные)
· Тело (набор операторов, которые реализуют алгоритм)
П/пделятся на:
· функции (всегда есть результат, как правило простого типа)
· процедуры (может не быть явного результата, м.б. результат любого типа или много результатов)
Подпрограмма-функция
Программа на языке Си – это совокупность подпрограмм-функций (в дальнейшем просто функций), среди которых выделяется одна обязательная (главная) с именем main.
Остальные функции вводятся в структуру программы для улучшения ее структурированности. Их выполнение инициируется прямо или косвенно вызовами из функции main. В простом случае определение функции на языке Си:
<Определение функции> ::= <заголовок функции> <блок> <заголовок функции> <составной оператор>
Таким образом, тело функции задается блоком(последовательность спецификаций переменных и операторов, заключенная в фигурные скобки) или составным оператором.
<Заголовок функции> :: = < тип результата функции> <имя функции> ( [ <cписок формальных параметров> ] ) | void <имя функции> ( [ <cписок формальных параметров> ] )
В заголовке функции задается тип ее результата, если функция имеет возвращаемый результат (будем называть его основным результатом), иначе тип void. Функция с типом void является подпрограммой-процедурой.
Список формальных параметров, если он не опущен, содержит перечисленные через запятую спецификации формальных параметров. В теле функции, если она возвращает результат, обязательно должен быть хотя бы один оператор возврата в точку вызова: return <выражение>;
Выражениеопределяет возвращаемый (основной) результат, его тип описан в заголовке функции. Если функция не возвращает никакого значения (т.е. имеет тип void), оператор возврата может опускаться.
Обращение к функции, возвращающей основной результат, это первичное выражение вида <имя функции>(<список фактических параметров>) или <имя функции> ( ) , если у функции нет формальных параметров. Вызов такой функции является операндом какого-либо выражения.
Способы передачи данных в подпрограмму
Одним из важных моментов при организации подпрограмм является задание данных, над которыми будут выполняться действия подпрограммы. Данные в подпрограмму можно передавать двумя способами:
1) используя для этого глобальные объекты,
2) используя формальные параметры.
Если используется только первый способ, то в определении подпрограммы (ее теле) непосредственно используются данные, определенные вне тела функции. Такие подпрограммы не имеют параметров. Пример определения функции без параметров:
int MAX ( )
{
return ( a > b ? a : b ) ;
}
Функция MAX может выполнять действия только над переменными a и b (входные данные функции). Переменные a и b должны быть определены вне функций и называются внешними или глобальными переменными. Тело функции MAX – составной оператор. Обращение к функции MAX – операнд выражения, например: x = MAX ( ); Переменной x будет присвоено значение функции MAX, т.е. наибольшее из значений a и b. В таких подпрограммах жестко зафиксированы объекты, над которыми выполняются действия подпрограммы. Если необходимо применить эту подпрограмму для других объектов, требуется изменение самих глобальных объектов (их имен) в теле подпрограммы.
Чтобы сделать подпрограмму более гибкой и обеспечить ее общность, данные в подпрограмму передаются через список формальных параметров.
Формальные параметры
Чтобы сделать подпрограмму более гибкой и обеспечить ее общность, данные в подпрограмму передаются через список формальных параметров. Формальные параметры не задают какие-то конкретные данные программы, а лишь условно определяют объекты подпрограммы. Это позволяет применять подпрограммы к различным объектам программы, конкретизируя при каждом обращении ее данные в списке фактических параметров. Все объекты подпрограммы можно разделить на входные данные, промежуточные и выходные. В список формальных параметров необходимо вводить только те объекты, которые изменяются при вызове подпрограммы, т.е. входные и выходные данные.
Формальные параметры в Си задаются в списке формальных параметров перечислением через запятую спецификаций отдельных пара-метров. Спецификация каждого параметра имеет вид: <спецификация типа> <имя параметра>