Найти в Дзене

Программирование на Бейсике. Подпрограмма

Оглавление

Еще одно очень важное понятие в программировании – подпрограмма. Это часть кода программы, который отвечает за выполнение какой-либо функции. Располагаться подпрограмма должна после основного кода программы. А основной код программы должен заканчиваться командой END.

Проще всего понять сущность и необходимость использования подпрограмм с помощью какого-то определенного примера. Предположим, наша программа должна нарисовать много квадратиков. Первый вариант решения будет таким:

Второй вариант (с использованием подпрограммы) – таким:

SCREEN 12
FOR x = 0 TO 620 STEP 20
FOR y = 0 TO 460 STEP 20
GOSUB 10
NEXT y
NEXT x
END
10:
LINE (x, y)-(x + 10, y + 10), , B
LINE (x, y)-(x + 10, y + 10)
LINE (x + 10, y)-(x, y + 10)
RETURN

Как видно, мы поместили три строки кода, отвечающие за рисование, после команды END. Но для того, чтобы все продолжало рисоваться, в том месте, где находились эти строки кода изначально, мы вставили команду GOSUB, которую можно перевести как «иди в подпрограмму». Далее указывается метка (в нашем случае это «10»), начиная с которой пишется сам код подпрограммы.

После того, как код подпрограммы сработал, команда RETURN возвращает выполнение кода в то место, откуда выполнение пришло – т.е. на строку с GOSUB. Иными словами, когда компилятор видит команду GOSUB, он вместо нее подставляет код из подпрограммы, на который GOSUB ссылается.

Для чего это все нужно? На первый взгляд, мы все только усложнили. На самом деле, если бы код рисования занимал несколько десятков строк, да еще и подобных вещей в коде программы было несколько, то легко запутаться, за что отвечает тот или иной блок кода. А здесь мы просто направляем выполнение нужного нам функционала в подпрограмму. А в основной части программы просто пишем GOSUB, плюс можно написать комментарий, куда и для чего мы отправляемся.

Подпрограммы очень сильно облегчают понимание больших программ, потому что в основном коде мы пишем логику, а всю «черную» работу переносим в подпрограммы – чтобы «не загрязнять код» мелочами всякими. Тогда становится проще отследить логику программиста, да и сам программист уже не отвлекается на кучу кода, теряя мысль в логике программы.

В больших программах бывает много подпрограмм, и все они выполняют какой-нибудь свой функционал, не завися друг от друга. Поэтому, если, к примеру, необходимо будет изменить функционал чего-то одного, то нет необходимости лезть в основной код программы. Достаточно изменить подпрограмму. Это очень удобно.

Например, давайте сделаем так, чтобы квадратики рисовались случайным цветом. Так как для рисования у нас используется подпрограмма, то ее и будем изменять. Основной код трогать не будем. Итак, код подпрограммы станет таким:

C = INT(RND * 15) + 1 ‘ получаем случайный цвет от 1 до 15
LINE (x, y)-(x + 10, y + 10), C, B
LINE (x, y)-(x + 10, y + 10), C
LINE (x + 10, y)-(x, y + 10), C

Кстати, не забудьте, что в начало программы нужно добавить команду RANDOMIZE TIMER – чтобы работал генератор псевдослучайных чисел.

Результат:

-2

Вообще, «подпрограмма» - это старое название. Наряду с этим термином раньше также употреблялись термины «функция» и «процедура».

По сути, и функция, и процедура – это подпрограммы. Разница между ними была в том, что в результате функции получалось какое-то значение, которое дальше использовалось в основной части программы, а процедура – это подпрограмма, которая выполняла какое-либо действие без возврата какого-либо нового значения в основной код. Вот конкретно в нашем примере подпрограмму можно назвать процедурой, т.к. она не возвращает никакого значения в основной код, а только что-то делает (рисует).

В настоящее время термины «подпрограмма» и «процедура» не используют. В употреблении остался только термин «функция». Функцией называют абсолютно любую подпрограмму. Это так, на будущее, когда мы с вами дойдем до Python или JavaScript.

Абсолютные и относительные координаты

Очень часто в программах, связанных с графикой, приходится реализовать так называемые «относительные координаты». Что это такое и зачем они нужны?

Простой пример. Предположим, нам необходимо нарисовать график функции. Мы знаем, что декартова система координат выглядит следующим образом:

-3

Но система координат экрана компьютера отличается, представляя собой лишь первую четверть декартовой системы, причем перевернутую вверх ногами:

-4

В связи с этим при построении графиков возникает необходимость «переделки» научных координат точек линии графика в реальные экранные. Потому что координата, к примеру, (10, 5) должна располагаться в правой верхней части экрана (в первой четверти декартовой системы координат), но если мы поставим точку PSET(10, 5), то она будет находиться в левой верхней части экрана. Это неправильно.

В общем, программистам, которые работают с графикой, играми и т.д. постоянно необходимо решать вопрос перевода «правильных» координат в координаты экрана. В этом и состоит суть относительности. Иными словами программист создает относительные координаты. Относительно реальным.

Другой пример использования относительных координат. Предположим, необходимо нарисовать достаточно сложную фигуру. Давайте вернемся к нашим квадратикам и проанализируем код подпрограммы:

LINE (x, y)-(x + 10, y + 10), , B
LINE (x, y)-(x + 10, y + 10)
LINE (x + 10, y)-(x, y + 10)

Мы, вместо того, чтобы указывать абсолютные координаты, пишем «X + 10» и «Y + 10». То есть указываем координату относительно имеющимся значениям X и Y. Зачем это понадобилось? Затем, что мы привязали квадрат к координате его левого верхнего угла. Координату правого нижнего угла мы получаем относительно левого верхнего. Это нужно для того, чтобы рисовать в цикле – достаточно зациклить только две переменные: X и Y.

Если непонятно, что мы сделали, рекомендуем перечитать это несколько раз.

Чтобы закрепить тему подпрограмм и относительных координат, рекомендуем выполнить задания из задачника. Вам придется хорошенько подумать, но, считаем, это благотворительно скажется на образовании новых нейронных связей в коре вашего головного мозга :-)

Комменты приветствуются, за палец вверх - отдельное спасибо. Удачи!

------------------------------

Список уроков Программирование на Бейсике для начинающих

Предыдущий урок Основные операторы графического режима

------------------------------

Задания

1. Создать звездное небо из 50 звезд:

-5

Требование к каждой звезде: находиться в случайном месте, быть случайного цвета (1-15), случайного размера (5-20 пикс), случайной формы (кружочки, квадраты, крестики, ромбы и т.д., несколько вариантов).

В подпрограммы вынести рисование конкретных вариантов звезд. То есть для каждого вида будет своя подпрограмма. Кроме того, должна быть подпрограмма, в которой будет определяться конкретный вариант звезды по вышеописанным требованиям.

2. Нарисовать флаг США:

-6

В подпрограммы отдельно вынести рисования:

  • полотнища флага
  • звезд

Рисование звезд будет происходить в циклах. Чтобы не «захламлять» код тела циклов, рекомендуем вынести рисование звезды в отдельную подпрограмму. То есть в итоге у вас должно получиться три подпрограммы: рисование полотнища флага, общая подпрограмма для рисования звезд, а из нее переход в подпрограмму рисования каждой звезды.

3. Нарисовать график функции y=x2:

-7

Сначала нарисовать координатные оси декартовой системы координат. Потом рисовать график.

В подпрограммы вынести процесс рисования осей и процесс рисования графика, отдельно - получение экранных координат относительно реальных, получаемых по формуле.