Описание подпрограммы SUB
Формат оператора:
SUB имя [(список параметров)] [STATIC]
блок операторов
[EXIT SUB ]
END SUB
где: SUB отмечает начало подпрограммы; имя задает имя подпрограммы, которое должно быть уникально; список параметров список переменных, разделенных запятыми. Он задает число и тип аргументов, передаваемых в подпрограмму; STATIC определяет способ размещения локальных переменных в памяти; END SUB завершает определение подпрограммы; EXIT SUB возвращает управление из подпрограммы; блок операторов содержит любые операторы кроме DEF FN...END DEF, FUNCTION...END FUNCTION, SUB...END SUB, COMMON, DECLARE, DIM SHARED, OPTION BASE, TYPE...END TYPE.
Вызов процедуры SUB выполняется двумя способами:
- оператором CALL, в котором задается имя процедуры и список передаваемых аргументов, который заключается в скобки, например, CALL ProcX (A, B%);
- указанием имени процедуры и ее аргументов (скобки опускаются), например, ProcX A, B%
Если использовано ключевое слово STATIC, то все локальные переменные становятся статическими, т.е. при следующем вызове подпрограммы они не будут инициализироваться вновь.
Пример 1. Использование ключевого слова STATIC
DCL SUB NUMBER ( )
REM ИСПОЛЬЗОВАНИЕ КЛЮЧЕВОГО СЛОВА STATIC
FOR TIME %=1 to 4
CALL NUMBER
NEXT TIME %
END
SUB NUMBER STATIC
NUMBER% =NUMBER% +1
PRINT NUMBER%
END SUB
Результат: (когда слово STATIC есть):
Результат: (когда слово STATIC опущено):
Пример 2. Транспонирование квадратной матрицы.
DECLARE SUB TRM (A%() ,B%())
DEFINT A-P
INPUT n%
DIM AM(n%,n%),BM(n%,n%)
IM=1
FOR i=1TO n%
FOR j=1TO n%
AM(i,j)=IM
IM= IM+ 1
NEXT j
NEXT i
CLS
‘Вывод исходной матрицы
Print “Исходная матрица”:
FOR i=TO n%
FOR j= TO n%
Print USING “# #”; AM(i,j);
NEXT j
NEXT i
‘Транспонирование матрицы
CALL TRAM(A(),B())
Print “Транспонированная матрица :”
FOR i=1TO n%
FOR j=TO n%
Print USING “# #”; ВM(i,j);
NEXT j
NEXT i
SUB TRM(A( ),B( ) )
IK = UBOUND (A)
FOR i=1 TO IK
FOR j=1 TO IK
B(j,i)= A(i,j)
NEXT j
NEXT i
END SUB
Результат: (пусть n = 4)
Исходная матрица:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
Транспонированная матрица:
1 5 9 13
2 6 10 14
3 7 11 15
4 8 12 16
Оператор DECLARE
Оператор DECLARE (DCL) используется для проверки числа и типа аргументов при вызове процедуры. Отсутствие оператора DECLARE вызывает ошибку компиляции, если вызов процедуры в программе встретился раньше ее описания, или процедура определена в другом модуле.
При сохранении программы в файл автоматически генерируется оператор DECLARE для каждой процедуры FUNCTION и SUB с ее именем и списком параметров в скобках.
Дата добавления: 2021-07-22; просмотров: 298;