Организация подпрограмм на Бейсике
Подпрограммы в языках программирования служат для реализации вспомогательных алгоритмов. Использование подпрограмм необходимо при создании больших и сложных программ для того, чтобы упростить их чтение, понимание и внесение изменений.
В качестве примера программ использования подпрограмм рассмотрим задачу рисования графиков функций на экране ЭВМ.
Задача построения графика функции у = f (x) на экране ЭВМ предполагает расчет и вывод последовательности точек с координатами (xk, yk), где xk = f (xk). Расчет должен производиться на некотором заданном отрезке [a, b] с шагом h = (b - a) / n между точками, где п - это заданное число разбиений.
В качестве конкретного начального примера рассмотрим построение на экране ЭВМ графиков функций у = х2.
Представленные ниже алгоритм и программа состоят из трех частей: первая часть строит график на экране, вторая вычисляет значения функций, третья организует ввод данных - параметров графика (области определения [a, b], числа разбиений п и области значений функций [c, d]).
АЛГ «ГРАФИКИ ФУНКЦИЙ» НАЧ ВВОД ДАННЫХ ГРАФИКА UM: = 255; YM: = 191 h: = (b - a) / n от к = 0 до n цикл х: = a + h * k ВЫЧИСЛЕНИЕ: У = f(x) u: = (x - a) * um / (b - a) y: = (d - y) * vm / (d - c) ТОЧКА (u, v), ЗЕЛЕНАЯ КЦИКЛ КОН | 10 ¢ графики функций 20 GOSUB 400 ¢ ввод данных 30 C1 = 2 ¢ цвет графика 40 ¢ графика 50 UM = 255: VM = 191 ¢ размеры экрана 60 H = (B - A) / N 70 FOR K = 0 TO N 80 X = A + N * K 90 GOSUB 200 ¢ y = f(x) 100 U = (X - A) * UM / (B - A) 110 V = (D - Y) * VM / (D - C) 120 PSET (U, V), C1 130 NEXT 140 END |
Основная часть алгоритма и программы, как видно из их описаний, организуют ввод данных, а затем осуществляют в цикле от k = 0 до n вычисление координат точек графика некоторой функции y = f(x) и вывод их на экран. Конкретный вид функций в этой части программы и алгоритма не определяется. Описание способа вычисления значений функции выделяется во вспомогательный алгоритм. В программе на Бейсике появляется соответствующая подпрограмма:
АЛГ «ВЫЧИСЛЕНИЕ: y = f(x)» АРГ Х: ВЕЩ РЕЗ У: ВЕЩ НАЧ У: = Х2 КОН | 200 ¢ ВЫЧИСЛЕНИЕ ФУНКЦИЙ 210 Y = X * X 230 RETURN |
В данном примере строится график функции у = х2. На экране ЭВМ мы должны увидеть фрагмент параболы появится на экране, зависит от исходных данных, ввод которых выделен в отдельный вспомогательный алгоритм и соответствующую подпрограмму:
АЛГ «ВВОД ДАННЫХ» РЕЗ a, b, c, d: ВЕЩ, n: ЦЕЛ НАЧ ВЫВОД ПАРАМЕТРЫ ГРАФИКА ЗАПРОС СЛЕВА: а =, а ЗАПРОС СПРАВА: b =, b ЗАПРОС СНИЗУ: c =, c ЗАПРОС СВЕРХУ: d =, d ЗАПРОС n =, n КОН | 400 ¢ ввод данных 410 PRINT «параметры графика» 420 INPUT «слева: а =»; А 430 INPUT «справа: b =»; B 440 INPUT «снизу: c =»; C 450 INPUT «сверху: d =»; D 460 INPUT«n =»; N 470 RETURN |
ЭВМ, как видно из этого алгоритма, запросит числа a, b - концы отрезка [a, b], c и d - нижние и верхние границы области значения функции, а также n - число точек графика, которые ЭВМ нарисует на экране. Для рассмотрения графика функции на другом отрезке или получения на графике большого числа точек необходим запуск программы с новыми исходными данными.
Главная особенность этого алгоритма - возможность его применения для построения графиков любых функций в любой части их области определения. Выделение вычисления значений функции в отдельную подпрограмму значительно упрощает замену функции. Для построения графика функции, например y = x sin x, необходимо будет заменить подпрограмму на новую:
АЛГ «ВЫЧИСЛЕНИЕ: y = f(x) АРГ Х: ВЕЩ РЕЗ У: ВЕЩ НАЧ У: = Х * SIN X КОН | 200 ¢ вычисление функции 210 Y = X * SIN (X) 230 RETURN |
Вызов подпрограмм в зыке Бейсик реализуется оператором GOSUB <номер>, где <номер> указывает начало подпрограммы. Например, оператор GOSUB 200 означает переход к подпрограмме, начинающейся с 200-го оператора.
Правила выполнения подпрограмм можно проиллюстрировать следующей схемой:
50 . . . . . . . . . 60 GOSUB 200 70 <оператор> | 200 ¢ подпрограмма . . . . . . . . . . . . . . . . . . 280 RETURN |
Вычисление оператора GOSUB состоит в переходе к выполнению первого оператора подпрограммы, а ее завершении оператор RETURN осуществляет переход к выполнению оператора, следующего за оператором GOSUB в основной программе.
Описание подпрограммы должно начинаться с ее названия - названия решаемой подзадачи или реализуемой функции. Концом подпрограммы в Бейсике должен быть оператор возврата из подпрограммы RETURN (RETURN - возврат).
Аргументы и результаты вспомогательных алгоритмов в подпрограммах называются параметрами. Передачу параметров-аргументов вспомогательных алгоритмов в подпрограммах на Бейсике оформляются в следующем виде:
<ПОДЗАДАЧА> (x1 = a, x2 = b) | 100 X1 = A: X2 = B 110 GOSUB 600: ¢ подзадача |
где х1, х2 - аргументы вспомогательного алгоритма. Аналогично на языке Бейсик приходится оформлять и передачу результатов выполнения вспомогательных алгоритмов, если таковы есть.
Примером составления и использования подпрограмм с выделенными параметрами-аргументами могут служить программы построения изображений зданий. В этих программах и алгоритмах вспомогательные алгоритмы и подпрограммы вычерчивают на экране отдельные блоки - стены, окна, двери, крыши и т. п. Роль параметров-аргументов в этих подпрограммах и вспомогательных алгоритмах играют геометрические размеры этих блоков.
Изображение двухэтажного дома на экране ЭВМ в соответствии с ранее составленным алгоритмом построит следующая программа на Бейсике:
АЛГ «ДВУХЭТАЖНЫЙ ДОМ» НАЧ L1: = 60; H1: = 5 ОТ К = 1 ДО 3 ЦИКЛ СТЕНА С ОКНОМ (Х = L1 * K, Y = H1, L = L1, H = H1, C = ЗЕЛЕНЫЙ) СТЕНА С ОКНОМ (X = L1 * K, Y = 2 * H1, L = L1, H = H1, C = ЗЕЛЕНЫЙ) КЦИКЛ КРЫША (Х = L1, Y = H1, L = 3 * L1, H = H1, C = БЕЛЫЙ) КОН | 10 ¢ двухэтажный дом 20 ¢ графика 30 L1 = 60: H1 = 50: C1 = 3: C2 = 4 40 FOR K = 1 TO 3 50 X = K * L1: Y = H1: L = L1: H = H1: C = C1 60 GOSUB 200 ¢ стена с окном 70 X = K * L1: Y = H1: L = L1:: H = H1: C = C1 80 GOSUB 200 ¢ стена с окном 90 NEXT K 100 X = L1: Y = H1: L = 3 * L1: C = C2 110 GOSUB 400 ¢ крыша 120 END |
Для выполнения этой программы необходимы две подпрограммы. Первая из них рисует в заданном месте изображение стены с окном заданных размеров, а вторая - изображение крыши заданного размера в заданном месте:
АЛГ «СТЕНА С ОКНОМ» АРГ x, y, l, h :ВЕЩ, С: ЦЕЛ НАЧ РАМКА (x, y) - (x + l, y + h), c РАМКА (x+3 * l / 5, y + h / 4) - (x +4 * l / 5, y + h / 2), c КОН | 200 ¢ стена с окном 210 ¢ арг: х, у, 1, h: вещ 220 ¢ с - цвет 230 LINE (X, Y) - (X + L, Y + H), C, B 240 LINE (X + 3 * L / 5, Y + H / 4) - (X + 4 * L / 5, Y + H / 2), C, B 250 RETURN |
АЛГ «КРЫША» АРГ x, y, l, h: ВЕЩ, С: ЦЕЛ НАЧ ЛИНИЯ (x, y) - (x + l, y), c ЛИНИЯ (x, y) - (x + l / 2, y - h), c ЛИНИЯ (x + l / 2, y - h) - (xx + l, y), c КОН | 400 ¢ крыша 410 ¢ арг: X, Y, L , H,: вещ 420 ¢ С - цвет крыши 430 LINE (X, Y) - (X + L, Y), C 440 LINE (X, Y) - (X + L / 2, Y - H), C 450 LINE (X + L / 2, Y - H) - (X + L, Y), C 460 RETURN |
Работу с этой программой на ЭВМ можно начать с построения изображения крыши. Для этого необходимо ввести операторы 30, 100, 110, 120 - вызовы подпрограммы рисования крыши с соответствующими координатами, которые задаются в подпрограмме параметрами операторы 400-460 - операторы самой подпрограммы.
Далее можно ввести подпрограмму рисования стены с окном - операторы 200-250 - и операторы вызова этой подпрограммы 50 и 60, а также часть оператора 40 в таком виде: 40 К = 1. Затем после ввода и отладки обеих подпрограмм можно ввести полный вариант построения двухэтажного дома целиком. Для этого осталось ввести операторы 40, 70, 80 и 90.
Добавляя к этой программе новые подпрограммы рисования других блоков, или перестраивая программу, можно получать на экране ЭВМ изображения разнообразных домов, улиц и даже целых поселков. Существенным при этом является использование уже имеющихся вспомогательных алгоритмов и подпрограмм. В тоже время, усовершенствуя вспомогательные алгоритмы и подпрограммы, можно получать более красивые изображения и искать гармонию между отдельными частями здания и композицией в целом.
Вопросы и упражнения и задания для самопроверки
ВОПРОСЫ:
Как на Бейсике записывается вызов подпрограмм?
Как в языке Бейсик оформляются подпрограммы?
Каков механизм выполнения подпрограмм в языке Бейсик?
Как на Бейсике оформляется передача параметров-аргументов?
УПРАЖНЕНИЯ:
Составьте вспомогательный алгоритм и подпрограмму на языке Бейсик для вычисления функции:
а) у = х при х > 0, б) у = sin x при х ≥ 0,
0 при х ≤ 0; 0 при х < 0;
2. Составьте программу на Бейсике для построения:
а) трех домиков; б) трехсекционного дома;
ЗАДАНИЯ:
1. Составьте план ввода и испытаний программы рисования графика функции. Введите и отладьте программу по составленному плану. Проведите исследование функции - найдите по графику корни функции или ее максимумы и минимумы.
2. Составьте план ввода и испытаний программы построения изображения выбранного задания. Введите и отладьте составленную программу по выбранному плану.