Файл: regeda_v_v_regeda_o_n_osnovy_programmirovaniya_na_vba.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 02.12.2019
Просмотров: 3187
Скачиваний: 1
или
блочный
вариант
:
DEF FN
имя
[(
список
аргументов
)]
операторы
[EXIT
DEF]
FN
имя
=
выражение
]
END DEF
FN
имя
−
имя
присваиваемое
определяемой
функции
(
буква
,
за
кото
-
рой
следует
любое
число
букв
или
цифр
);
список
аргументов
−
не
-
обязательная
последовательность
разделенных
запятыми
формальных
па
-
раметров
(
не
более
16),
при
вызове
функции
им
присваивается
значение
соответствующих
(
по
порядку
в
списке
)
параметров
.
Оба
альтернативных
способа
позволяют
определить
в
программе
собственную
функцию
пользователя
,
которая
затем
может
вызываться
по
ее
имени
,
т
.
е
.
каждый
раз
,
когда
в
каком
-
либо
операторе
будет
использова
-
но
имя
,
присвоенное
данной
функции
,
будет
вычисляться
выражение
с
подстановкой
в
него
значений
аргументов
,
указанных
при
вызове
.
Имена
аргументов
в
однострочном
операторе
DEF FN
могут
совпа
-
дать
с
именами
переменных
в
программе
,
но
это
будут
не
одни
и
те
же
пе
-
ременные
.
В
выражении
можно
использовать
переменные
,
не
включенные
в
список
аргументов
.
Аргументы
могут
использоваться
только
в
выраже
-
нии
,
определяющем
функцию
.
Тип
значения
(
числовое
или
символьное
),
которое
получается
при
выполнении
функции
,
определяется
именем
функ
-
ции
(
по
тем
же
правилам
,
что
и
имя
переменной
).
Пример
:
IF FNdistance(2,3,4)<6 THEN PRINT "
Точка
внутри
_
сферы
радиуса
6"
...
REM
Вычисление
расстояния
от
точки
(x,y,z)
REM
до
центра
сферы
DEF FNdistan
с
e(x,y,z)=SQR (x^2+y^2+z^2)
Положение
в
программе
определения
функции
несущественно
,
в
ча
-
стности
,
она
может
находиться
после
тех
операторов
,
в
которых
она
ис
-
пользуется
.
В
отличие
от
подпрограмм
,
в
тело
функции
"
попасть
случай
-
но
"
нельзя
,
поскольку
при
выполнении
программы
строки
,
в
которых
рас
-
полагается
ее
определение
,
считаются
"
невидимыми
".
Войти
в
тело
функции
или
выйти
из
него
с
помощью
операторов
GOTO, GOSUB, RETURN
нельзя
,
хотя
внутри
тела
эти
операторы
допус
-
тимы
.
Определения
функций
не
могут
быть
вложенными
,
хотя
в
определе
-
нии
могут
встречаться
вызовы
других
или
этих
же
функций
(
и
процедур
).
В
последнем
случае
имеем
дело
с
рекурсивным
вызовом
.
Обычно
в
много
-
строчном
определении
функции
имеется
оператор
присваивания
,
в
кото
-
ром
в
левой
части
стоит
имя
функции
.
Если
такого
оператора
нет
,
то
зна
-
чение
,
возвращаемое
функцией
,
не
определено
.
Для
выхода
из
тела
функ
-
ции
до
оператора
END DEF
применяется
оператор
EXIT DEF
.
Пример
.
Определим
функцию
,
которая
рекурсивно
вычисляет
значе
-
ние
факториала
целого
числа
:
REM
Определение
функции
FNfact
%
DEF FNfact
%
(n
%
)
IF
n
%
=0 THEN FNfact
%
=1
EXIT DEF
IF n
%
=1 THEN FNfact
%
=1_
ELSE FNfact
%
=n
%
*FNfact
%
(n
%
-1
%
)
END DEF
REM
Использование
ранее
определенной
функции
FNfact
%
PRINT "
факториал
5=";FNfact
%
(5
%
)
2.8.3.
Процедуры
−
самое
мощное
средство
для
построения
модуль
-
ной
программы
−
определяются
с
помощью
оператора
SUB
и
END SUB
,
которые
служат
,
соответственно
,
началом
и
концом
группы
операторов
,
называемой
процедурой
:
SUB
имя
[(
список
параметров
)]
[LOCAL
список
переменных
]
[STATIC
список
переменных
]
[SHARED
список
переменных
]
операторы
[EXIT
SUB]
END SUB
имя
−
уникальное
имя
процедуры
,
отвечающее
тем
же
правилам
,
по
которым
образуются
имена
переменных
;
список
параметров
−
после
-
довательность
,
разделенных
запятыми
формальных
параметров
,
которые
служат
только
для
определения
процедуры
,
не
имея
никакого
отношения
к
другим
переменным
программы
с
тем
же
именем
.
Как
и
для
функции
,
по
-
ложение
процедуры
не
существенно
,
кроме
того
,
нельзя
"
случайно
"
по
-
пасть
в
процедуру
непосредственно
от
предыдущего
оператора
,
ни
с
по
-
мощью
операторов
GOTO
,
GOSUB
или
RETUN
,
хотя
внутри
процедуры
эти
операторы
действуют
.
Определения
процедур
не
могут
быть
вложенными
,
хотя
внутри
процедуры
могут
быть
вызовы
других
процедур
и
функций
.
Все
переменные
в
процедуре
по
умолчанию
являются
локальными
.
Локальные
переменные
являются
динамическими
:
место
под
них
выделя
-
ется
лишь
при
выполнении
процедуры
,
после
же
выполнения
процедуры
они
автоматически
пропадают
.
Однако
можно
объявить
или
с
помощью
оператора
SHARED
глобальные
переменные
(
переменные
,
которые
берут
свои
значения
из
предыдущих
программных
строк
),
или
с
помощью
опера
-
тора
STATIC
статические
переменные
(
переменные
,
для
которых
важно
,
чтобы
они
не
изменились
при
повторных
вызовах
).
Определение
процедуры
должно
заканчиваться
оператором
END
SUB
,
который
возвращает
управление
в
программу
,
передавая
его
к
опера
-
тору
,
следующему
за
вызовом
процедуры
.
Для
выхода
из
процедуры
в
про
-
извольном
месте
используется
оператор
EXIT SUB
.
Для
вызова
процедуры
используется
оператор
CALL
,
имеющий
фор
-
мат
:
CALL
имя
([
список
параметров
])
имя
−
это
имя
процедуры
,
определенной
с
помощью
оператора
SUB;
список
параметров
−
это
последовательность
разделенных
запятыми
переменных
,
выражений
или
констант
,
передаваемых
процедуре
,
в
качест
-
ве
фактических
параметров
(
по
типу
они
должны
соответствовать
фор
-
мальным
параметрам
в
определении
процедуры
).
Ниже
приведена
,
программа
для
вычисления
суммы
S
=
∑
=
−
6
1
i
2
i
i
)
b
a
(
i
,
где
⎩
⎨
⎧
−
−
=
нечетное
i
если
,
i
четное
i
если
,i
a
2
i
,
⎩
⎨
⎧
−
−
=
нечетное
i
если
,
i
четное
i
если
,
i
a
3
2
i
.
FOR i=1 TO 6
CALL
ab(i)
s=s+(a-b)^2
NEXT
"S=";
s
END
REM
Процедура
вычисления
a, b
SUB
ab(i)
SHARED
a,b
IF i MOD 2 <>0 THEN a=i^2:b=i^3 ELSE a=i:b=i^2
END
SUB
Обратите
внимание
,
что
оператор
END
необязателен
в
программе
,
т
.
к
.
в
процедуру
ab
можно
попасть
лишь
по
оператору
CALL ab(i)
.
2.8.4.
Составить
три
программы
для
вычисления
и
вывода
на
экран
монитора
значений
функции
из
таблицы
2.5
для
x
,
изменяющегося
от
-20
до
20
с
шагом
2.
Таблица
2.5
№
ва
-
рианта
Функция
№
ва
-
рианта
Функция
1
⎪
⎩
⎪
⎨
⎧
≥
<
<
−
−
≤
+
+
+
=
10
X
1
X
10
10
X
,
,
,
10
X
)
1
X
1
X
5
.
0
(
Z
2
3
7
⎪
⎪
⎩
⎪
⎪
⎨
⎧
≥
<
<
−
−
≤
+
+
−
=
1
X
1
X
1
1
X
,
,
,
x
11
x
)
1
X
12
X
2
(
Z
3
4
2
⎪
⎩
⎪
⎨
⎧
≥
<
<
−
−
≤
+
+
=
π
π
π
π
X
X
X
,
,
,
)
x
2
x
(
)
13
X
X
sin
(
Z
3
8
⎪
⎩
⎪
⎨
⎧
≥
<
<
−
−
≤
+
=
π
π
π
π
X
X
X
,
,
,
x
2
)
1
X
X
3
sin
(cos
Z
3
∑
=
+
=
Α
10
1
n
4
4
x
n
1000
9
k
3
x
n
1
k
+
=
Α
∏
=
4
∏
=
=
Α
n
1
k
k
2
X
cos
10
∏
=
+
=
Α
n
1
k
3
)
2
xk
(
5
∑
=
+
=
Α
n
1
k
4
)
k
4
X
(
11
∑
=
=
Α
10
1
n
n
n
x
6
kx
e
n
1
k
x
+
=
Α
∏
=
12
∑
=
+
=
Α
15
5
k
k
x
Номер
варианта
задается
преподавателем
.
В
первой
программе
для
организации
цикла
использовать
оператор
FOR/NEXT
,
во
второй
−
WHILE/WEND
,
а
в
третьей
−
DO/LOOP
.
Вывести
полученные
результаты
на
экран
монитора
и
на
принтер
:
в
первой
программе
в
строку
с
точностью
2
знака
после
запятой
;
во
второй
программе
−
в
столбец
с
точностью
1
знак
после
запятой
;
в
третьей
−
по
зонам
в
экспоненциальном
формате
.
Для
вы
-
числения
значений
функций
использовать
функцию
пользователя
.
2.8.5.
Составить
программу
для
вычисления
и
вывода
на
экран
мони
-
тора
наибольшего
и
наименьшего
значений
функции
(
Табл
. 2.6)
и
значения
аргумента
,
при
котором
оно
получено
.
Для
определения
наибольшего
зна
-
чения
использовать
подпрограммы
,
а
для
определения
наименьшего
значе
-
ния
−
процедуры
.
Таблица
2.6.
№
ва
-
рианта
Функция
Диапазон
изменения
Х
Шаг
изменения
Х
1
y=-sin(X
i
/2)
20
÷
40
2
2
y=13X
2
÷
7
1
3
y=cos(4x)
4
÷
24
2
4
4
X
1
Y
+
=
(-1)
÷
5
0.5
5
23
X
44
Х
Y
−
+
=
(-10)
÷
10
2
6
y=(3x
2
+43)
11
÷
19
1
Для
определения
,
наибольшего
значения
,
функции
и
соответствую
-
щего
ей
значения
аргумента
воспользуйтесь
следующим
алгоритмом
:
−
присвоить
переменной
YMAX
значение
,
заведомо
меньшее
значе
-
ния
функции
Y
для
заданного
диапазона
изменения
X
;
−
организовать
цикл
по
переменной
X
;
−
организовать
переход
в
подпрограмму
для
нахождения
наибольше
-
го
из
двух
значения
Y
,
сохранить
это
значение
в
переменной
YMAX
,
а
соот
-
ветствующее
ему
значение
X
в
переменной
XMAX
;
−
после
завершения
цикла
ввести
на
экран
полученные
значения
в
следующем
виде
:
YMAX=
число
при
XMAX=
число
.
2.9.
Использование
массивов
в
TURBO BASIC
Помимо
числовых
и
символьных
переменных
в
TB
используются
еще
и
индексные
переменные
или
массивы
.
Массив
−
это
последователь
-
ность
данных
одинакового
типа
,
имеющих
общее
имя
.
Элемент
массива
является
отдельной
переменной
.
Он
идентифицируется
путем
указания
в