Механизм передачи параметров из основной программы в подпрограмму и наоборот.



 

Как видно из общего формата программы сложной структуры, ни оператор вызова подпрограммы 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

print

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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!