Функции и процедуры, определенные пользователем
1. Собственные
функции
В предшествующих главах Вы
познакомились с некоторыми встроенными функциями QBASIC (например, MID$
или SQR). Теперь рассмотрим составление собственных функций.
Вернемся к математической функции
INT. INT — имя функции. Этим именем определяются некоторые программные
действия, невидимые программисту, и которые инициализируются автоматически
с появлением в программе имени функции. Иначе говоря, функцию можно
понимать как группу операторов в программе, объединенных под именем
функции. С помощью заключенного в круглые скобки аргумента (сравни INT
(3.34)) в подпрограмму, инициируемую именем функции, передаются конкретные
данные. Над этими данными производятся некоторые преобразования, и
результат, как правило, возвращается в основную программу.
Чтобы вызвать из программы
собственную функцию, нужно указать ее имя. Последний символ имени функции
определяет тип возвращаемого значения.
Пример:
STRICH$()-Возвращаемое значение - строка
RUNDEN%()-Возвращаемое значение - число типa INTEGER
WURZEL! ()-Возвращаемое значение — число типа SINGLE
В QBASIC пользовательские функции объявляются при вводе ключевого слова
FUNCTION и следующего за ним имени функции. В этом случае редактор
автоматически генерирует новое программное окно, в котором нет ничего,
кроме операторов, ограничивающих тело функции:
FUNCTION Имя_функции END FUNCTION
В пространство между ограничивающими ключевыми словами вносят операции
QBASIC,
обеспечивающие выполнение необходимых действий. Чтобы вернуться в главную
программу, надо нажать клавишу F2. На экране появляется поле списков со
всеми BIBL.BAS и сохраните его под новым именем ("Save as..."). Если Вы
будете составлять свою программу в этом файле, из нее можно вызывать все
процедуры и функции файла BIBL.BAS.
Покажем создание
функции извлечения корня,
упомянутой в главе "Математические вычисления",
функция должна извлекать из числа корень любой степени. Начнем с главной
программы:
'Главная программа для функции
извлечения корня
DIM argument!, wurz%
CLS
DO
INPUT "Ввести аргумент: ", argument!
INPUT "Ввести степень корня: ", wurz%
LOOP WHILE argument! < 0
PRINT
PRINT wurzel!(argument!, wurz%)
'Конец главной программы
Составим шаблон функции:
FUNCTION wurzel! (argument!, wurz%) END FUNCTION
Извлечение корня из аргумента можно представить функцией возведения
аргумента в степень, обратную степени корня. Функция извлечения
корня любой степени имеет следующий вид:
FUNCTION wurzel! (argument!, wurz%)
wurzell = argument! ^ (1 / wurz%)
END FUNCTION
Рассмотрим синтаксис определения функции в программе более детально:
FUNCTION Имя_функции (Параметр_1 [,
Параметр_2]...) [STATIC]
[Оператор]...
Имя_функции = Выражение
END FUNCTION
Имя_функции - Имя функции; последний символ обязательно определяет
тип возвращаемого значения (%,&,!, #или $).
Параметр - Параметр, который передается функции при вызове.
STATIC - Если в теле функции объявляются локальные переменные, то
они сохраняют свои значения в промежутке между вызовами функции.
Выражение- Возвращаемое значение
Смысл опции STATIC разъясним на небольшом примере. Составим главную
программу для вызова функции zlen:
'Главная программа
PRINT "Длина 'test' "; zlen%("test")
PRINT "Длина 'test' "; zlen%("test")
Функцию zlen объявим следующим образом:
FUNCTION zlen%(text$)
DIMi%
i%-i%+LEN(text$)
zlen%-i% END FUNCTION
После запуска программы дважды получим на экране сообщение "Длина 'тест'
4". Изменим заголовок функции:
FUNCTION zlen% (text$) STATIC
После первого запуска программы получаем сначала значение длины 4, затем
8. Так как при объявлении функции используется ключевое слово STATIC, то
значение локальной переменной i% сохраняется после окончания выполнения
функции. Поэтому при последующих вызовах к значению переменной i%
добавляется число 4, и при втором обращении к функции возвращаемое
значение уже не 4, а 8.

2. Собственные
процедуры
В процедурах, как и в функциях, под
одним именем процедуры объединяются логически самостоятельные фрагменты
программы.
Для начала рассмотрим пример:
'Программа, иллюстрирующая понятие процедуры
PRINT "A"
PRINT "В"
PRINT "B1"
PRINT "B2"
PRINT "С"
PRINT "В"
PRINT "B1"
PRINT "B2"
PRINT "erf"
PRINT "B"
PRINT "B1"
PRINT "B2"
PRINT "ugh"
'Конец программы
Программа носит чисто иллюстративный характер, однако полезна для внесения
ясности в представление о процедурах. Можно заметить, что некоторые
фрагменты программы часто повторяются.
Такие повторения необоснованно удлиняют программу и затрудняют работу с
ней. Процедуры позволяют объединять под одним именем повторяющиеся
фрагменты программы. Процедуру, как и функцию, можно вызвать из главной
программы.
Задайте в программе команду "SUB beispiel" и получите
пустой шаблон процедуры:
SUB beispiel
END SUB
Внесите туда операторы, которые повторяются в главной программе.
SUB beispiel
PRINT "В"
PRINT "B1"
PRINT "B2"
END SUB
Теперь достаточно из главной программы вызвать процедуру там, где это
требуется. Таким образом, получаем новый вариант программы в таком виде:
beispiel
PRINT "C"
beispiel
PRINT "erf"
beispiel
PRINT "ugh"

|