ГЛАВА 9
ФУНКЦИИ
Краткое содержание: DEF, LEN, STR$, VAL,
SGN, ABS, INT, SQR, FN
Функции - это зашитые в BASIC-систему подпрограммы, которые, полу-
чая на входе одни значения, называемые аргументами, возвращают другие
значения - результаты.
Функции используются в выражении простым включением в него
имени функции с последующими аргументами.
При вычислении выражения, вычисляется и значение функции.
Например, функция LEN возвращает длину заданного в ней строкового аргу-
мента. Вы можете записать:
PRINT LEN "SINCLAIR"
А компьютер введёт ответ "8", т.е. количество букв в слове "SINCLAIR"
(для ввода с клавиатуры имени функции LEN, Вы должны войти в необ-
ходимый режим, нажав клавиши (JAPS SHIFT и SYMBOL SHIFT, курсор
изменится с [L] на [Е], и нажать клавишу "К").
Если в одном выражении используются и функции и опера'ции, то
функции будут вычислены перед выполнением любых операций. Однако, Вы
можете изменить этот порядок, применяя скобки.
Функция STR$ преобразует число в символьный вид, подобный форма-
ту вывода чисел оператором PRINT:
LET A$=STR$ 1Е2
Аналогично по действию команде
' LET 100"
или выполните
PRINT LEN STR$ 100.0000
и получите ответ 3, так как STR$ 100.0000 - "100".
Функция VAL обратная к функции STR$ и преобразует строку в число.
Так,
VAL"3.5" =3.5
или
VAL "2*3" в 6
или даже так
VAL ("2"+"*3")=6
В последнем случае происходит вычисление двух выражений, сначала
строкового с получением строки "2*3", затем числового с получением
строки 6.
Можно попасть в затруднительное положение, например:
PRINT VAL "VAL""VAL".......2............
помня; что внутри строки кавычки удваиваются, мы видим, что в нашем
случае может понадобиться учетверение или даже увосьмирение.
Имеется ещё одна функция подобная VAL - это VALS. И аргументом и
результатом этой функции является строка символов. Она работает как VAL,
применяя дважды, раскрывая все кавычки в строках:
VAL$ """Fruit punch""" = "Fruit punch"
сделайте
LET a$«"99"
и затем выведите все следующие значения:
VAL а$
VAL "а$"
VAL"""a$"""
VAL$ "а$"
VAL$ """а$"""
некоторые из них сработают, а некоторые нет, проанализируйте все
ответы.
• Функция SGN - это так называемая математическая функция сигнум
(знак). И аргумент и результат её числовые. Результат равен:
X если результат положителен,
О, если результат равен О,
если результат отрицателен.
• Функция ABS преобразует аргумент в положительное число:
ABS -3.2 = ABS 3.2 - 3.2
• Функция INT (от integer part - целая часть) преобразует дробное
число к целому отбрасыванием дробной части числа:
INT 3.9-3
Сложности возникают при отрицательном аргументе, так как округ-
дение происходит к ближайшему целому, не большему, чем аргумент:
INT -3.9 «-4
• Функция SQR вычисляет корень квадратный из числа, например:
SQR4=2
SQR 0.25 в 0.5
SQR 2= 1.4142136 (приближенно)
Если аргумент отрицательный, то выдается сообщение:
"A INVALID ARGUMENT"
Вы также можете сами опреджелить для себя какую-нибудь функцию,
-указав FN и имя этой функции (букву, если аргумент числовой и $, если
строковый). Аргументы должны быть обязательно заключены в скобки.
Вы можете определить функцию вводом оператора DEF в некотором
месте программы. Например, зададим функцию, вычисляющую квадрат
числа:
10 DEF FN S(X) = Х*Х: REM THE SQUARE OF X
DEF вводится в соответствующем режиме (SYMBOL SHIFT И 1).
Теперь функция может использоваться в программе:
PRINT FN S(2)
PRINT FN S(3+4)
PRINT 1 + INT FN $(LEN "CHICKEN"/2+3)
Функция INT всегда округляет до целого; для округления с точностью
0.5 надо добавить к результату " .5". Вы можете задать дял себя такую
функцию
20 DEF FN R(X) - INT (X - 0.5): REM GIVES X ROUNDED
TO THE NEAREST INTEGER
и можете затем попробовать ввести:
FN R(2.9) = 3
FN R(-2.9) e -3
FNR(2.4)«2
FNR(-2.4) = -2
Введите и выполните следующее:
10 LET Х«0: LET Y«0: LET A-10'
20 DEF FN P(X,Y) = A + X*Y
30 DEF FNQ()«A + X*Y
40 PRINT FN P(2,3), FN Q()
Есть одна тонкость в этой программе. Во-первых, функция FN Q не
использует аргументов, но скобки при этом должны обязательно использо-
ваться. Во-вторых, операторы DEF не выполняемые, компьютер после выпол-
нения .строки 10 просто переходит к выполнению строки 40. Помните, что
DEF может быть только оператором, но не командой. В-третьих, "X" и "Y" -
имена целых переменных в программе и в то же время имена аргументов в
функции FN Р.
Функция FN Р использует в вычислении результата значения аргумен-
тов "X ,"Y" и переменной "А", не являющейся аргументом. Так, когда
вычисляется FN Р(2,3) занчение "А" равно 10, как и определено в програм-
ме, а значения "Xй, HYH соответственно 2 и 3, так как они аргументы и
результат будет 10 + 2*3 = 16.
При вычислении FN Q0 участвуют только переменные программы, так
как аргументов нет, и ответ в этом случае будет 10 + 0*0 = 10. Теперь
изменим строку 20 на
20 DEF FN P(X,Y) ■ FN Q()
В этом случае FN Р (2,3) будет возвращать значение 10. Некоторые
версии BASIC'a имеют функции LEFTS, RIGHTS и TLS:
• LEFTS (AS.N) - возвращает подстроку, содержащую "N" первых
символов строки "AS";
• RIGHTS (AS,N) - возварщает подстроку, содержащую HN" последних
символов в строке "AS";
• TLS (AS) - возвращает подстроку, содержащую все символы строки
"AS", кроме первого.
Вы можете определить такие функции на своем компьютере:
10 DEF FN TS (AS) * AS (2 ТО): REM TLS 20 DEF FN LS
(AS,N) - AS (TO N): REM LEFTS
Проверьте их работу со строками длиной 0 и 1.
ПРИМЕЧАНИЕ: функция может иметь до 26 числовых аргументов и в то же
время до 26 строковые-