Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Определение нестандартной функции DEF FN



Формат определения нестандартной однострочной функции:

DEF FNимя [(список параметров)] = выражение

где: имя вместе с FN задает имя функции; список параметров состоит из идентификаторов, разделенных запятыми; выражение определяет вычисляемое значение функции.

В многострочных функциях для вычисления значения функции можно задать несколько операторов.

Формат определения нестандартной многострочной функции:

DEF FNимя [(список параметров)]

блок_операторов

FNимя = выражение

[EXIT DEF]

END DEF

Для возврата из функции служит оператор EXIT DEF. До его выполнения имени функции должно быть присвоено возвращаемое значение. Если оператор EXIT DEF не задан, то возврат из функции выполнит оператор END DEF.

Тип функции определяется ее именем аналогично переменной: знаком типа в конце имени или неявно операторами DEFtype.

Определение функции FUNCTION

FUNCTION имя [(список параметров)] [STATIC]

блок операторов

[EXIT FUNCTION]

END FUNCTION

где: FUNCTION отмечает начало функции; имя задает имя функции, которое должно быть уникально; список параметров список переменных, разделенных запятыми. Он задает число и тип аргументов, передаваемых в функцию; STATIC определяет способ размещения локальных переменных в памяти; END FUNCTION завершает определение функции; EXIT FUNCTION возвращает управление из функции; блок операторов содержит любые операторы кроме DEF FN...END DEF, FUNCTION...END FUNCTION, SUB...END SUB, COMMON, DECLARE, DIM SHARED, OPTION BASE, TYPE...END TYPE.

Вызов FUNCTION производится путем задания ее имени и аргументов в выражении. Функция FUNCTION возвращает одно значение, которое подставляется вместо имени процедуры. Процедура FUNCTION также может возвращать значение, изменяя значения переменных, передаваемых в качестве аргумента.

Пример 1. Использование функции.

DECLARE FUNCTION TEST. RSLT $ ( ANSWER % )

Print “ В каком году Колумб открыл Америку? ”

Print “ 1) 1492 “

Print “ 2) 1528 “

Print “ 3) 1544 “

Print “ Введи номер правильного ответа “

INPUT NUMBER %

TXT $ = TEST.RSLT $ (NUMBER %)

Print TXT $

END

FUNCTION TEST.RSLT %(ANSWER %)

IF ANSWER%=1 THEN

TEST.RSLT$= “ПРАВИЛЬНО”

ELSE

TEST.RSLT$= “НЕВЕРНО”

END IF

END FUNCTION

Пример 2. Вычисление факториала.

DECLARE FUNCTION FACT (n%)

INPUT NM%

Print NM%; FACT(NM%)

END

FUNCTION FACT (n%) STATIC

IF n%> 0 THEN

FACT=n%*FACT(n%-1)

ELSE

FACT=1

END IF

END FUNCTION

Оператор вызова подпрограммы GOSUB

Оператор вызова подпрограммы:

[m1] GOSUB n

где: m1 - номер строки или метка; n - номер строки заголовка подпрограммы.

n REM SUB имя п/п - заголовок подпрограммы

операторы п/п

m RETURN m2

где m2 – номер строки (метка) возврата после выхода из подпрограммы.

Одна подпрограмма может иметь несколько операторов RETURN. При этом RETURN не может использоваться для передачи управления из одной подпрограммы другой. GOSUB и RETURN должны находиться в одном модуле.

Пример. Подготовка данных для подпрограммы.

N=A(1, 1): M= A(2, 2)

‘ Вызов подпрограммы MAX-2

GOSUB 18

‘ Записываем результат работы подпрограммы

R=Q

‘ Готовим новые данные для подпрограммы

N=R; M= A(3, 3)

‘ Вызов подпрограммы MAX-2

GOSUB 18

Y=Q

PRINT “Y=“; Y: STOP

18 REM SUB MAX-2

IF N> M THEN Q=N: GOTO 19

Q=M

19 RETURN

END

Описание подпрограммы 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 с ее именем и списком параметров в скобках.

Передача параметров в подпрограмму

Параметр (формальный параметр) — имя переменной в операторах определения функции или процедуры. Параметр может быть именем переменой любого типа или именем массива (только для процедуры). Массив задается именем, левой и правой скобками, в скобках указывается число размерностей.

Аргумент (фактический параметр)— константа, переменная или выражение, передаваемые в функцию или процедуру при вызове. Аргумент может быть константой, выражением, именем переменной или именем массива.

Число и тип аргументов при вызове процедуры или функции должно совпадать с числом и типом соответствующих параметров.

Массив, передаваемый процедуре, должен соответствовать параметру-массиву. Массив, задаваемый в качестве аргумента, состоит из имени, левой и правой скобки. Запрещается передавать массив при вызове функции. Элемент массива, передаваемый в качестве аргумента, должен соответствовать параметру - простой переменной и задается именем массива со списком индексов, заключенных в скобки.

Если в процедуру в качестве аргумента передаются границы изменения индексов массива, то используют функции LBOUND и UBOUND.

Передача аргументов по ссылке

По умолчанию простые переменные, массивы, элементы массивов передаются в процедуру по ссылке. Это означает следующее:

— каждая переменная имеет адрес, по которому в памяти размещается ее значение;

— при вызове процедуры и передаче переменной по ссылке передается адрес переменной, который становится адресом соответствующего параметра;

— если процедура изменяет значение параметра, то одновременно изменяется и значение переданной переменной.

Передача аргументов по значению

Это означает, что передается не адрес аргумента, а его значение. Все аргументы при вызове функции передаются по значению. Для передачи переменной в процедуру по значению ее превращают в выражение, заключая в скобки. В этом случае изменение значения параметра в процедуре не изменит значения соответствующей переменной.

Пример.

A=5: B=8

CALL PROC1 (A, B)

PRINT “A=”; A, ”B=”; B

END

SUB PROC1 (X, Y)

X=0: Y=0

END SUB

Результат:

А = 0 В = 8


Поделиться:



Популярное:

  1. II – Предопределение, избрание и свобода воли
  2. III. Полномочия и функции Комиссии
  3. IХ.Определение рыночной стоимости затратным подходом
  4. А.1 Определение условий выполнения проекта
  5. АНАЛИЗ РЕЗУЛЬТАТОВ ПРОРАЩИВАНИЯ СЕМЯН. Заполнение документов на анализ семян. определение жизнеспособности семян хвойных пород методом йодистого окрашивания
  6. Анализ электрокардиограммы: определение интервалов, зубцов, положения электрической оси сердца в грудной клетке.
  7. Аналитические абстрактные функции и ряды Тейлора.
  8. Атрофия: 1) определение и классификация 2) причины физиологической и патологической атрофии 3) морфология общей атрофии 4) виды и морфология местной атрофии 5) значение и исходы атрофии.
  9. Банковская система. Центр. и ком-кие банки, их задачи и функции.
  10. Библейское определение покаяния
  11. Билет 1. Сущность финансов, их функции
  12. Билет 10. Дать определение минерала. Расскажите о происхождении минералов.


Последнее изменение этой страницы: 2016-04-09; Просмотров: 931; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.028 с.)
Главная | Случайная страница | Обратная связь