Механизм передачи параметров из основной программы в подпрограмму и наоборот.
Как видно из общего формата программы сложной структуры, ни оператор вызова подпрограммы gosub в основной, ни оператор возврата return в подпрограмме не содержит никаких сведений о параметрах (переменных), которые передаются из одного модуля в другой и наоборот. При этом надо пользоваться следующим правилом:
1. все переменные, вычисленные до gosub в основной программе, становятся известными и доступными в подпрограмме, то есть значениями этих переменных можно пользоваться как известными аргументами при выполнении различных операций. Идентификаторы переменных сохраняются.
2. все переменные, вычисленные в подпрограмме (до оператора return), становятся известными и доступными в основной программе после оператора gosub. Идентификаторы переменных сохраняются.
Пример построения программы сложной структуры с использованием подпрограмм.
Сформулируем задачу: составим программу сложной структуры по обработке элементов матрицы. Дана матрица размерностью 6 x 6, значения элементов матрицы целые положительные числа от 1 до 36. необходимо сформировать одномерный массив по маршруту:
rem формирование нового массива из старого с использованием подпрограммы
CLS
input “задайте размерность - n матрицы a”;n
DIM A(n,n),b(21) ‘a – исходная матрица;
|
|
‘ b – результирующий массив
K=1
lokate 10,10:print “Исходная матрица”
for i=1 to N
for J=1 to N
A(I,J)=K
if a(i,j)<10 then
print a(i,j);” “;
else
print a(i,j);” “;
end if
k=k+1
next J
next I
locate 10,50:print “контур”
for i=1 to n
s=70-i*4 ‘ s – переменная, определяющая вывод элементов
‘ матрицы а в соответствии с заданным курсором
for j=n+1-i to n
locate 10+I;s:print a(i;j)
s=s+4
next j
next i
gosub sort ‘ вызов подпрограммы
locate 20,30:print “вывод нового массива”
for i=1 to 1
print b(i);
next i
stop
sort:
rem подпрограмма формирования массива b из элементов контура матрицы а I=0’ I – переменная, отвечающая за порядок заполнения элементов в массиве b
for j=1 to n ‘внешний цикл – перебор столбцов
for j=n to (n+1)-j step-1 ‘ внутренний цикл – перебор
‘ строк снизу до побочной диагонали
I=I+1
b(I)=a(i,j)
next i
next j
return
Процедуры
Процедура – самое мощное средство для построения многомодульной программы. под процедурой будем понимать последовательность операторов языка программирования, заключенных между оператором заголовка процедуры – sub и оператором окончания процедуры – end sub.
Общая схема построения программы сложной структуры с использованием процедуры, а так же управление вычислительным процессом (связь между модулями) представлена на следующей схеме
|
|
rem основная (управляющая) программа
……
……
……
call a ‘вызов процедуры а
……
……
call b ‘вызов процедуры b
……
……
……
sub a ‘оператор заголовок процедуры а
……
……
end sub ‘конец процедуры а
……
……
……
Stop конец основной (управляющей) программы
rem процедура b
……
……
end sub ‘конец процедуры
На представленной схеме программные модули (основная программа, процедура а, процедура b) выделены прямоугольниками, справа в виде направленных стрелок показана связь между модулями (управление вычислительным процессом в такой сложной по структуре программе). Процедура а находиться целиком внутри основной программы, а процедура b – вне основной (за оператором stop). За такое положение они получили название внутренней и внешней процедур соответственно. Как видим, процедура, в отличие от подпрограммы, может быть внутренней, но при этом попасть внутрь можно только специальным вызовом – call.
|
|
Внешняя процедура может храниться на другом носителе (как жестком, так и гибком дисках) по отношению к основной программе.
Компилятор, встречая оператор call, прерывает вычислительный процесс в основной программе и передает управление процедуре (оператору-заголовку sub). Поиск процедуры осуществляется по имени. Затем вычисляются все операторы внутри процедуры до оператора sub. По завершении процедуры управление вновь переходит к основной программе (к оператору call).
Формат записи процедуры
sub <имя процедуры>[(список параметров)]
……
[local <список переменных>]
[static <список переменных>]
[shared<список переменных>]
……
[exit sub]
……
end sub
где
sub – оператор-заголовок процедуры (ключевое слово);
<имя процедуры> - идентификатор имени процедуры;
< список параметров > - список идентификаторов формальных параметров, среди параметров могут быть массивы, простые переменные;
local, static, shared – операторы области действия имен переменных в данном программном модуле;
exit sub – оператор дополнительной точки выхода из процедуры (может быть несколько в одном модуле);
end sub – оператор окончания процедуры.
Дата добавления: 2021-11-30; просмотров: 39; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!