Для описания локальных переменных в процедуре применяется оператор LOCAL, например оператор LOCAL A%,B# формирует 2 локальные переменные: А% - целочисленная и B# - двойной точности.
Статистические и общие переменные. По умолчанию переменные, появляющиеся в описании процедур, содержат локальный атрибут. Но так как в процессе выполнения программ значения переменных могут изменяться, то в процедуре необходимо описывать переменные.
Глобальные переменные описываются с помощью оператора SHARED. Они могут применяться в основной программе. Статистические переменные, описанные оператором STATIC, не теряют свое значение при выходе из процедуры, но не могут применяться в программе.
Оператор EXIT SUB аналогичен END SUB, но может применяться в любом месте процедуры. Оператор END SUB должен быть последним оператором процедуры.
Если в процедуру нужно включить программу на Ассемблере, то
используется оператор: SUB progname INLINE.
Для вызова такой процедуры используется оператор:
CALL progname INLINE
Внутри процедуры нельзя применять операторы GOTO, GOSUB, RETURN, передающие управление за ее пределы. Описания процедур и функций не могут быть вложенными. Но внутри процедуры можно обращаться к другим процедурам и функциям.
|
|
Для вызова процедуры служит оператор CALL.
Формат оператора:
CALL имя (список фактических параметров)
Оператор CALL пересылает фактические параметры в процедуру
по ссылке или по значению. Возврат в основную программу выполняется автоматически в место вызова процедуры (специального оператора, как RETURN в подпрограмме пользователя не требуется).
Пример 5:
SUB WW(A,M,N,MAX)
IF A>M THEN MAX=A ELSE MAX=M
IF MAX>N THEN MAX=N
END SUB
……………………………………………..
CALL WW(18,3,6,MAX)
PRINT"MAX="MAX:END
В процедуре будет вычислено значение MAX=18.
Задача 2 Составить программу вычисления функции из задачи 1, используя процедуру пользователя.
Процедура вызывается оператором CALL, возврат в основную программу производится автоматически после выполнения процедуры.
Программа
CLS
REM программа с процедурой
INPUT "a=";a, "b=";b, "x=";x
IF a=b THEN m1
IF a>b THEN m2
REM Вычисление при b>a
n=b
CALL F(i)
Z=x*SIN(x)/F: GOTO m3
m1:REM Вычисление при a=b
n=a*x+2
CALL F(i)
Z=F: GOTO m3
m2: REM Вычисление при a>b
n=a
CALL F(i)
Z=F*b*x^2/(a^2+b^2)
m3: PRINT"Z="Z,"F="F
STOP
REM Процедура вычисления факториала
SUB F(i)
F=1
FOR i=2 TO n
F=F*i
NEXT i
END SUB
END
Контрольные вопросы
1 В каких случаях целесообразно вводить функции, подпрограммы и процедуры пользователя?
2 Что такое формальные и фактические параметры?
3 Что такое подпрограмма?
4 Какие операторы используются при обращении к подпрограмме
5 Что называется процедурой?
6 Какие операторы образуют формат процедуры?
7 Как выполняется возврат из подпрограммы и из процедуры в основную программу?
8 Что означают опции LOCAL, STATIC, SHARED в формате процедуры?