Подпрограмма определяется как часть программы, к которой можно обращаться из разных точек основной программы любое число раз. При этом подпрограмма каждый раз решает одну и ту же задачу, но с разными значениями исходных данных.
− Возможность применения подпрограмм относит язык программирования к классу процедурных языков программирования.
− Подпрограммы в процедурных языках программирования обеспечивают возможность реализации принципов структурного или модульного программирования:
· Программа может быть представлена как структура, состоящая из основной программы и подпрограмм (модульность);
· Каждая подпрограмма отлаживается и действует отдельно, независимо от других;
· Подпрограмма может быть применена в основном модуле программы, в любой другой подпрограмме;
· Одни и те же подпрограммы могут использоваться в разных программах. Поэтому, оказалось целесообразно создавать внешние подпрограммы, которые можно использовать по мере необходимости.
Появилась идея объединять подпрограммы в отдельные пакеты, получившие название библиотеки внешних подпрограмм.
Практически во всех современных системах программирования существует встроенная библиотека стандартных подпрограмм. В её состав входят подпрограммы вычисления значений некоторых элементарных функций (синус, косинус, логарифм, экспонента и т.д.), подпрограммы обработки символьных величин и др.
Встроенная в систему программирования библиотека подпрограмм подключается к любой программе автоматически, в процессе трансляции последней.
Наличие подпрограмм позволяет вести разработку программы от общего к частному. Такой подход называют нисходящим программированием.
При этом сначала создается основная часть (main module).
Затем к нему подключаются подпрограммы решающие конкретные подпрограммы решающие конкретные задачи. К подпрограммам, в свою очередь, могут подключаться другие подпрограммы. И так до тех пор, пока вся программа не окажется реализованной.
Существуют различные виды подпрограмм. В зависимости от того как в них передается управление из основной программы и какие результаты возвращаются, различают два основных типа подпрограмм – функции и процедуры.
Функция отличается от процедуры в основном тем, что результатом её выполнения является одно значение (числовое, логическое, литерное).
Программист, чтобы осуществить вычисление, может создать функцию, дать ей имя, и она будет работать аналогично встроенной функции языка (SIN, COS, и др.). К такой функции можно будет обращаться с разными задаваемыми значениями. Так же как встроенные функции, она не будет работать без аргумента.
Процедура по своим свойствам похожа на операторы языка программирования. Основная программа передаёт ей управление, и далее выполняются команды находящиеся в коде процедуры. Процедура позволяет получать сложный результат в виде многих значений.
2.
Область действия переменных и констант
Большинство современных программ структурировано и построено по модульному принципу.
Когда из main module вызывается подпрограмма, в неё переходит не только управление, но и данные. В коде программы данные содержатся в виде констант, переменных и массивов. В модульном программировании переменные различаются как локальные и глобальные.
Если данные доступны во всех компонентах программы, то они называются глобальными (или совместно-используемыми). Если данные доступны (видны) в пределах одного модуля, то они считаются локальными.
Область доступности (видимости) данных определяется способом их объявления.
Глобальная переменная (массив) в QB объявляется в основной части программы (главном модуле) комбинацией операторов DIM и SHARED.
Пример: Объявить как глобальную переменную Х с типом INTEGER и матрицу B(3,4) с типом SINGLE.
DIM SHARED x AS INTEGER, B(3,4) AS SINGLE
Переменные и массивы, объявленные только оператором DIM, или не объявленные вовсе, будут локальными.
В QB можно объявить переменные ограниченной видимости. Такая переменная будет видна в определённой подпрограмме и в основном модуле. Для этого переменную нужно объявить в подпрограмме одним оператором SHARED, без DIM.
3.
Применение подпрограмм, относящихся к функциям, осуществляется разными способами:
1). Функции в составе тела программы:
Описание нестандартной функции пользователя однострочным оператором DEF.
Пример: Использовать однострочную функцию пользователя FNY(x), где X – формальный параметр. Выражение для расчета функции a * ex, интервал значений X – [A, B], шаг H.
![]() | DEF FNY(x) = a * EXP(x) ' объявление функции пользователя INPUT “A, B, H”; A, B, H FOR x=A TO B+H/10 STEP H Y = FNY(x) PRINT “x = ”; x, “y = ”; y NEXT x END |
Описание нестандартной функции пользователя многострочным оператором DEF.
Пример: Вычислить таблицу значений функции.
для значений X = {1,2,3,4,5}
![]() | DEF FNF(x) IF x < - 3.14159 THEN FNF = x/3.10159 + 1 ELSE IF x < = 3.14159 THEN FNF = SIN(x) ELSE FNF = - x/3.14159 – 1 END IF N = 5: DIM x(N), y(N) FOR i = 1 TO N INPUT x(i): Y(i) = FNF(x(i)) PRINT “x= ”; x(i), “y= ”; y(i) NEXT i END |
2). Функции вне тела программы:
Применение оператора GOSUB…RETURN
Задание: Найти значение математического выражения
·! в математике обозначается факториал – произведение натуральных чисел от 1 до … включительно.
· В заданном выражении три раза приходится вычислять факториал, т.е. производить одни и те же действия с разными количествами натуральных чисел.
Описать вычисление факториала можно в подпрограмме, присвоив ей название, например FACT. Затем нужно будет из основной программы трижды с разными параметрами обратиться к подпрограмме.