При написании программ часто возникает необходимость в вы полнении одних и тех же действий в различных местах программы. Во многих случаях эти действия должны производиться с различными исходными данными. Написание такой программы упростится, если записать повторяющийся участок вычислений один раз, а потом обращаться к нему из различных мест программы. Такую возможность обеспечивает использование подпрограмм.
Назначение :
Переходит в подпрограмму и возвращается из неё.
Как записывается :
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 интерпретатор не найдет точку возврата в вызывающую программу.
Использование стека возврата позволяет из одних подпрограмм обращаться к другим, т.е. организовывать вложенные друг в друга подпрограммы.