информатика / Инф1_Л 7_Подпрограммы
.docxТема: Подпрограммы.
Учебные вопросы:
-
Понятия подпрограмма и структурное программирование.
-
Области действия переменных и констант.
-
Подпрограммы, относящиеся к функциям и процедурам.
1.
При решении объёмных задач такой способ организации кода программы, с каким мы работали ранее, не всегда рационален. Его недостатком является необходимость повторения одинаковых фрагментов кода, если в разных частях программы надо писать повторяющиеся логические блоки операторов. В результате увеличивается объём программы и затрудняется её понимание.
По этой причине в большинстве ЯПВУ была реализована возможность выкоса части кода из тела программы в отдельные блоки.
-
Каждый такой блок получает собственное название.
-
Чтобы блок задействовать в работе программы нужно в её основной части указать название блока и передаваемые блоку параметра (данные, с которыми будет осуществляться работа).
Такой блок или отдельный фрагмент кода стал называться подпрограммой.
-
Код подпрограммы располагают за последним оператором основной части программы (чаще всего за оператором END).
-
В QB подпрограммы редактируются в отдельном окне. Между ними и основной частью программы переключение осуществляется с помощью специальных команд.
Подпрограмма определяется как часть программы, к которой можно обращаться из разных точек основной программы любое число раз. При этом подпрограмма каждый раз решает одну и ту же задачу, но с разными значениями исходных данных.
-
Возможность применения подпрограмм относит язык программирования к классу процедурных языков программирования.
-
Подпрограммы в процедурных языках программирования обеспечивают возможность реализации принципов структурного или модульного программирования:
-
Программа может быть представлена как структура, состоящая из основной программы и подпрограмм (модульность);
-
Каждая подпрограмма отлаживается и действует отдельно, независимо от других;
-
Подпрограмма может быть применена в основном модуле программы, в любой другой подпрограмме;
-
Одни и те же подпрограммы могут использоваться в разных программах. Поэтому, оказалось целесообразно создавать внешние подпрограммы, которые можно использовать по мере необходимости.
Появилась идея объединять подпрограммы в отдельные пакеты, получившие название библиотеки внешних подпрограмм.
Практически во всех современных системах программирования существует встроенная библиотека стандартных подпрограмм. В её состав входят подпрограммы вычисления значений некоторых элементарных функций (синус, косинус, логарифм, экспонента и т.д.), подпрограммы обработки символьных величин и др.
Встроенная в систему программирования библиотека подпрограмм подключается к любой программе автоматически, в процессе трансляции последней.
Наличие подпрограмм позволяет вести разработку программы от общего к частному. Такой подход называют нисходящим программированием.
При этом сначала создается основная часть (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. Затем нужно будет из основной программы трижды с разными параметрами обратиться к подпрограмме.
CLS “Введите значения N и M”; N, M
K = N
GOSUB FACT
X1 = P
K = M
GOSUB FACT
X2 = P
K = (N – M)
GOSUB FACT
Z = X1/(X2*P)
PRINT “Z = ”; Z
END
FACT:
P = 1
FOR i = 1 TO K
P = P*i
NEXT i
RETURN N
-
Переменная K будет параметром подпрограммы.
-
GOSUB – слово для обращения к подпрограмме.
-
RETURN означает, что работа подпрограммы закончилась и управление передается в основную программу.
-
Результатом выполнения подпрограммы является переменная Р.
3). Подпрограммы вне тела программы, редактируемые в отдельном окне:
В зависимости от того, как в них передаётся управление, и какие результаты возвращаются, различают два основных типа – функции (FANCTION) и процедуры (SUB).
В отличие от встроенных функций языка QBasic, функцию FANCTION пишет сам программист и присваивает ей имя. Такая функция будет работать аналогично встроенным.
Процедура SUB по своим свойствам похожа на работу операторов. Программа передаёт ей управление, и далее выполняются команды, расположенные в коде процедуры.
После завершения работы этих подпрограмм управление возвращается в следующую за точкой вызовастроку основной программы.


