Опубликовано: 2021-10-25 20:00:00
Подпрограммы. Часть первая. Знакомство
В некоторых задачах возникает необходимость многократного использования одного и того же блока команд, что делает программу громоздкой. Создание программных модулей очень облегчает создание сложных программ. Очень удобно из разных точек программы обращаться к одному и тому же модулю с последующим возвратом в точку обращения. Программный модуль, к которому происходит обращение, часто называют подпрограммой.
В QB64 для организации подпрограмм существуют два оператора: GOSUB и RETURN.
В начале записывают основную программу, а потом подпрограмму. В одной программе могут быть обращения к нескольким подпрограммам.
Сказанное выше, может показаться вам непонятным с первого раза, поэтому разберем на примере, по мере необходимости возвращайтесь и вникайте в сказанный текст ещё раз.
Это сложная, для начинающих, тема. Она не является критически важной, но она сложная. В общем, программу не обязательно писать одним куском. Если вы в программе часто делаете одно и то же действие, например, делите на два и возводите в третью степень (просто для примера), то можно сделать деление и возведение в степень в отдельном как бы куске текста, вот пример:
- REM PODPROGRAMMY
- 'OSNOVNAYA PROGRAMMA
- INPUT "VVEDITE CHISLO: ", A
- GOSUB PEREHOD
- PRINT A
- END
- 'PODPROGRAMMA
- PEREHOD:
- REM PODPROGRAMMA_DELENIYA_I_VOZVEDENIYA_V_STEPEN
- A = (A / 2) ^ 3
- RETURN
Рисунок 1 – Исходный текст программмы
Рисунок 2 – Результат выполнения программы
Обратите внимание, что если вы используете подпрограммы, вы можете вести нумерацию строк, хотя это не является обязательным, главное чтобы были хотя бы метки для перехода на подпрограмму. Хорошим стилем считается начинать подпрограмму с комментария, который рассказывает, как подпрограмма называется.
Теперь смысл всего вышесказанного: подпрограммы нужны тогда, когда нужно что-то сделать много раз. Но их использование доставляет проблемы: начиная от того, что нужно нумеровать строчки или ставить метки, и заканчивая тем, что нужно отслеживать порядок выполнения программы.
Операторы GOSUB и RETURN предназначены для перехода на подпрограмму и возврата из нее.
Назначение оператора GOSUB – передача управления на выполнение подпрограммы. В отличие от оператора GOТО, оператор GOSUB не только осуществляет безусловный переход на выполнение программной строки с меткой, но и запоминает адрес точки, из которой произошел переход, в специальном участке памяти — стеке возврата.
После выполнения подпрограммы, компьютер возвращает управление по адресу, хранящемуся в стеке возврата, и следующей будет выполняться команда, стоящая после оператора GOSUB.
Синтаксис вызова подпрограммы:
GOSUB <номер строки>|<метка>
Синтаксис подпрограммы:
REM Подпрограмма для ...
...
<операторы>
...
RETURN [<номер строки>|<метка>]
, где RETURN это окончание подпрограммы.
<номер строки> или <метка> - представляют собой номер первой строки подпрограммы или ее метку.
В любой подпрограмме последней командой является оператор RETURN. Подпрограмма может быть вызвана из программы произвольное число раз. Кроме того, подпрограмма может быть вызвана из другой подпрограммы. Такая вложенность подпрограмм ограничивается только объемом доступной памяти.
Оператор RETURN (без метки) находится в подпрограмме и вызывает переход на оператор, следующий за последним выполненным оператором GOSUB. Подпрограмма может содержать несколько операторов RETURN, каждый из которых будет осуществлять выход из подпрограммы в определенной точке. Подпрограммы могут располагаться в различных местах программы, однако рекомендуется, чтобы подпрограммы были легко отличимы от основной программы.
Для того чтобы предотвратить случайный вход в подпрограмму, перед ней можно расположить оператор STOP, END, GOTO или расположить ее в конце программы. Если применяется оператор RETURN <метка|номер строки> то управление передается на указанный оператор. Основная программа обязательно должна заканчиваться оператором END.
Спасибо за прочтение этой статьи.