Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

информатика / Инф1_Л 7_Подпрограммы

.docx
Скачиваний:
29
Добавлен:
08.04.2015
Размер:
29.79 Кб
Скачать

Тема: Подпрограммы.

Учебные вопросы:

  1. Понятия подпрограмма и структурное программирование.

  2. Области действия переменных и констант.

  3. Подпрограммы, относящиеся к функциям и процедурам.

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). Функции вне тела программы:

Применение оператора GOSUBRETURN

Задание: Найти значение математического выражения

  • ! в математике обозначается факториал – произведение натуральных чисел от 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 по своим свойствам похожа на работу операторов. Программа передаёт ей управление, и далее выполняются команды, расположенные в коде процедуры.

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