Операторы GOSUB и RETURN — QBasic(Бейсик)

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

Назначение :
Переходит в подпрограмму и возвращается из неё.
 
Как записывается :
gosub n
b
return n
 
Где :
gosub — оператор перехода в подпрограмму
b — тело программы
return — оператор возврата
n — номер строки
 
Например :
10 Cls
20 Input «Введите число»; s
30 Print s
40 Gosub 70
50 Print s
60 End
70 Rem Подпрограмма
80 S = S + 5
90 Return

В языке BASIC обращение к подпрограмме осуществляется оператором GOSUB.

Формат: GOSUB N

GOSUB — ключевое слово;

N — номер первой строки, с которой должно начаться выполнение подпрограммы (точка входа в подпрограмму).

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

Работа операторов GOSUB и RETURN происходит следующим образом. Интерпретатор языка BASIC формирует стек возврата. Когда в программе встречается оператор GOSUB, интерпретатор заносит в стек возврата адрес (номер строки) оператора, следующего непосредственно за GOSUB. Затем управление передается на точку входа, заданную номером строки в операторе GOSUB, и начинают выполняться операторы подпрограммы. Если в подпрограмме встречается оператор RETURN, то из вершины стека извлекается текущий адрес возврата, и интерпретатор передает управление в вызывающую программу на оператор, непосредственно следующий за оператором GO SUB.

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

10 REM основная программа

20 DIM A (100)

30 PRINT «Введите количество хозяйств»

40 INPUT M

50 FOR I=1 TO M

60 PRINT «Введите посевную площадь в хозяйстве» ;I

70 INPUT A(I)

80 NEXT I

90 PRINT «Введите нижнюю границу посевной площади» 100 INPUT D

110 GOSUB 200

120 PRINT «Количество хозяйств с посевной площадью >»; D;»=» ; K

130 STOP

200 REM Подпрограмма

210 K=0

220 FOR I=1 TO M

230 IF A(I)>D THEN K=K+1

240 NEXT I

250 RETURNОсновные правила написания подпрограмм

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

2. Для правильной работы подпрограммы перед обращением к ней ее входные переменные должны получить в вызывающей программе требуемые значения.

3. Вход в подпрограмму должен осуществляться только через оператор GOSUB, иначе при выполнении оператора RETURN интерпретатор не найдет точку возврата в вызывающую программу.

Использование стека возврата позволяет из одних подпрограмм обращаться к другим, т.е. организовывать вложенные друг в друга подпрограммы.