[an error occurred while processing this directive]
─HM0
─TM0
─PL70
│.........*.......*.......*.......*.......*.......*.......*.......*<
─PE5
|||/CHAIN/ |||
/Назначение/
|||CHAIN||| делает возможным разбивку программы на несколько небольших
частей.
Оператор |||CHAIN||| позволяет одной программе загрузить (|||LOAD|||) и
автоматически запустить (|||RUN|||) другую программу. Например, одна
программа может позволить пользователю ввести информацию о том,
сколько времени работали служащие, а затем передать управление
(|||CHAIN|||) второй программе, которая распечатает ведомость с
заработной платой. В свою очередь эта программа может запустить
(|||CHAIN|||) третью программу, которая выдаст информацию о том,
сколько каждый из служащих заработал в среднем за один час.
|||CHAIN||| также полезен в играх с большим обьемом инструкций.
Инструкции можно поместить в отдельную программу, которая затем
вызывает (|||CHAIN|||) основную программу, и таким образом высвободить
память компьютера.
/Примеры/ 900 CHAIN"GAME_1" 1234 CHAIN"NEWPROG" CHAIN A¤
|||/Описание/ |||
Оператор, который позволяет загрузить и запустить программу, чье
имя указано в качестве аргумента. Все переменные, за исключением
% и от A% до Z% инициализируются.
|||/Синтаксис/ |||
CHAIN <string>
-----------------------------------------------------------------
─PE5
|||/CHR¤/ ||| символ
/Назначение/ Преобразование заданного числа в символ (букву, цифру
и т.д.). Символ генерируется в соответствии с таблицей ASCII
кодов.
Оператор VDU имеет тот же эффект, что и PRINT CHR¤, но имеет
более универсальный характери применения.
/Примеры/
220 RED¤=CHR¤(129)
1070 PRINT CHR¤(8);
перемещает курсор на одну позицию влево.
PRINT CHR¤ (7)
вызывает подачу звукового сигнала.
|||/Описание /||| Символьная функция, возвращающая одиночный символ.
Аргумент функции является ASCII кодом символа.
|||/Синтаксис /||| <string-var> = CHR¤(<numeric>)
-----------------------------------------------------------------
─PE5
|||/CLEAR /|||
/Назначение/
Заставляет компьютер забыть все переменные, которые были до
этого использованы, включая символьные переменые и массивы, за
исключением "резидентных целых переменных" % и от A% до Z%
значения которых остаются без изменений.
/Примеры/
350 CLEAR
CLEAR
|||/Описание/ |||
Оператор, который уничтожает все переменные, за иключением
резидентных целых переменных % и от A% до Z%.
|||/Синтаксис/ |||
CLEAR
-----------------------------------------------------------------
─PE5
|||/COLOUR/ |||
/Назначение/
Этот оператор выбирает цвет в котором компьютер будет печатать
текст, а также цвет фона. Если задается номер цвета <128, то
изменяется цвет текста на экране на указанный цвет. Для изменения
цвета фона нужно выполнить этот оператор с параметром, равным
номеру нужного цвета + 128.
/Примеры/
COLOUR 4 - выбор синего цвета текста (4-й цвет)
COLOUR 129 - выбор черного цвета фона (129-128=1-й цвет)
|||/Описание/|||
Оператор, который позволяет изменять фоновый и основной цвета.
|||/Синтаксис|||/
COLOUR <num-expr>
-----------------------------------------------------------------
─PE5
|||/COUNT/|||
/Назначение/
|||COUNT||| считает все символы, напечатанные с помощью оператора
|||PRINT|||, в отличие от функции |||POS|||, которая возвращает позицию
курсора на экране.
/Примеры/
290 A=COUNT
75 FRED=COUNT
PRINT COUNT
|||/Описание/ |||
Функция, возвращающая число символов, напечатанных с момента
последнего перевода строки.
|||/Cинтаксис/ |||
<num_var>=COUNT
/Демонстрационная программа/
|||Не самый простой способ печати 16 звездочек!|||
10 X=16
20 REPEAT PRINT "*";
30 UNTIL COUNT=X
-----------------------------------------------------------------
─PE5
|||/DEF/||| определить
/Назначение/
Слово |||DEF||| служит для информирования компьютера о том, что сейчас
начнется определение функции или процедуры. Описанная таким
образом процедура или функция может быть вызвана по имени в
любом месте программы.
Определения процедур и функций могут находиться в любом месте
программы, но вне тела программы. Удобнее всего помещать их в
конце программы,- например, после последнего оператора |||END|||. Это
также улучшает читаемость программы.
Язык |||Бейсик||| имеет много встроенных функций о которых компьютер
уже знает. Например, функция |||SQR||| позволяет ему извлекать
квадратные корни.
Однако, довольно часто возникает необходимость определить свои
собственные функции. Например, Вам может понадобиться функция,
которая вычисляет факториал. Назовем ее |||fact|||.
Приведем два варианта - рекурсивный и нерекурсивный:
а) Рекурсивный вариант сразу следует из формального определения
факториала:
1, если n=0
n! =
n*(n-1)!, иначе
/Описание функции:/
1000 DEF FNfact(n%)
1010 IF n%=0 THEN =1
1020 =n%*FNfact(n%-1)
б) Нерекурсивный вариант получается из эквивалентного
предыдущему, но уже нерекурсивному описанию факториала:
1, если n=0
n! = 1*2*...*(n-1)*n, в противном случае
/Описание функции:/
1000 DEF FNfact(n%)
1010 IF n%=0 THEN =1
1020 f%=1
1030 FOR i%=1 TO n%
1040 f%=f%*i%
1050 NEXT i%
1060 =f%
Функция всегда возвращает результат, поэтому Вы можете написать
|||X=FNST|||. Процедура же отличается тем, что обычно выполняет
несколько действий, и, в общем случае, может не производить ни
какого числового результата. Например, может быть определена
процедура, которая просто очищает экран и печатает какой-то текст
на экран.
Возможно Вы не все поняли, но не отчаивайтесь! Применение
процедур и функций может, сначала, показаться трудным для
понимания, но это стоит Ваших усилий. Их использование
значительно улучшит читаемость и надежность программ.
Дальнейшее изложение содержит более детальное объяснение, как
пользоваться процедурами и функциями. Кроме текста будут
приведены несколько примеров, которые Вам надо обязательно
разобрать.
И процедуры и функции могут содержать локальные переменные,
которые объявляются оператором |||LOCAL|||. В третьем примере К
объявлена как локальная переменная. Это значит, что хотя К
используется внутри прцедуры, ее значение неопределено после
выхода из процедуры. На самом деле переменная К может быть
использована также в любой другой части программы. Но значение
переменной К, используемой где-то в программе, не будет меняться
при использовании локальной переменной К внутри процедуры. Любая
переменная, которая не объявлена как локальная (|||LOCAL|||) будет
доступна вне процедуры, т.е. для остальной части программы.
Кроме этого, при вызове процедур и функций им можно передавать
параметры. Посмотрите на первый из приведенных примеров: в строке
1010 выглядит следующим образом
1010 DEF FNST(g)=1.15*g
|||'g'||| называется 'формальным параметром' функции |||FNST|||. Это
указывает компьютеру, что при вызове данной функции ей необходимо
передать одно число, и что внутри функции мы решили использовать
букву g для обозначения переменной.
Функция 'вызывается' или используется, например, следующим
образом :
230 PRINT "За один год Ваши проценты составят ";
236 PRINT FNST(P)
и, в этом случае, 'Р' - это 'фактический параметр' для функции
|||FNST|||. Какую бы переменную Вы не использовали вместо Р Вы все
равно ссылались бы на формальный параметр 'g' внутри функции. Это
очень удобно, так как позволяет использовать произвольные имена
для обозначения переменных внутри процедуры, и затем вызывать ее
с параметрами, имеющими совершенно другие имена. Очень часто одна
и таже процедура вызывается несколько раз из разных мест
программы и при каждом вызове фактические параметры могут иметь
различные имена.
Если процедура или функция определяется, скажем, с тремя
формальными параметрами, то при вызове ей необходимо предоставить
три фактических параметра. Смотрите четвертый пример ниже, где
функции передаются три параметра.
Конец процедуры помечается оператором |||ENDPROC|||. Конец функции,
состоящей из нескольких строк, помечается оператором, который
начинается со знака |||=|||. Функция примет значения выражения,
стоящего справа от знака |||=|||.
/Примеры/
/Первый пример - законченная программа:/
210 REPEAT
220 INPUT "Величина вклада ",Р
230 PRINT "За один год Ваши проценты составят ";
236 PRINT FNST(P)
240 UNTIL P=0
250 END
1000 REM "числовая функция из одной строки"
1010 DEF FNST(g)=0.03*g
/Второй пример - фрагмент программы:/
Многострочная строковая функция с одним строковым параметром.
1000 DEF FNreverse(A¤)
1010 REM "переставляет символы в A в обратном порядке"
1015 LOCAL d%,B¤
1030 FOR d%=1 TO LEN(A¤)
1040 B¤=MID¤(A¤,d%,1)+B¤
1050 NEXT d%
1060 =B¤
/Третий пример:/
Многострочная процедура с одним параметром.
200 DEF PROCbye(X)
210 REM "печатает До свидания! X раз"
220 LOCAL K
230 FOR K=1 TO X
240 PRINT "До свидания!"
250 NEXT K
260 ENDPROC
/Четвертый пример - законченная программа/
110 INPUT X,Y,Z
120 M=FNmean(X,Y,Z)
130 PRINT "среднее арифметическое для ",X,Y,Z
140 PRINT "есть ";M
150 END
8990 REM "Числовая функция из одной строки"
8995 REM "с тремя параметрами"
9000 DEF FNmean(A,B,C)=(A+B+C)/3
|||/Описание/ |||
Программный объект, который должен предшествовать определению
функции или процедуры пользователя. Возможно не только числовые,
но и строковые функции. Разрешается определение функций и
процедур, состоящих более, чем из одной строки. Все процедуры и
функции должны быть помещены в неисполняемую часть программы,
например, после оператора |||END|||. Возможно использование локальных
переменных, разрешена рекурсия.
|||/Синтаксис/ |||
DEF FN | PROC<variable name>
[ ( <string> | <numeric> { , <string> | <numeric> } ) ]
-----------------------------------------------------------------
─PE5
|||/DEG/||| градусы
/Назначение/
Эта функция переводит значение величины угла, заданного в
радианах, в градусы. Один радиан равен приблизительно 57
градусам.
/Примеры/
100 X=DEG(PI/2)
300 angle=DEG (1.36)
PRINT DEG(PI/2)
|||/Синтаксис/|||
<num-var>=DEG<numeric>
-----------------------------------------------------------------
─PE5
|||/DIM/||| размер массива
/Назначение/
Вы можете работать не только с простыми переменными, такими как
'X' или 'name¤', но и с 'массивами' переменных. Это очень полезно
при работе с группами чисел или слов. Например, если Вам
предстоит работать с некоторой информацией о номерах в
четырехэтажной гостинице с 30 номерами на каждом этаже то массив
из 4 на 30 ячеек можно создать следующим образом:
DIM hotel(4,30)
Создав таким образом массив, Вы можете занести необходимую
информацию в любой из его 'элементов'. Например стоимость номера
на одну ночь может быть равной 26.50 и 165.00
hotel(1,22)=26.50
hotel(4,1)=165.00
На самом деле оператор |||DIM hotel(4,30)||| создает массив из 5 на 31
ячеек, так как наименьший элемент массива это hotel(0,0).
Массив /hotel/ - это пример 'числового двумерного массива'. Другой
массив может содержать имена тех, кто остановился в гостинице:
DIM name¤(4,30)
name¤(1,22)="Иванов И.И."
name¤(4,1)="Петров П.П."
Такой массив называется 'двумерным числовым массивом'.
Массивы могут быть одно- или многомерными. Одномерный массив
подойдет для всех зданий на улице, например :
DIM MainStreet(150)
Такой массив называется 'одномерным числовым массивом'. Все
массивы обычно объявляются в самом начале программы. Попытки
изменить размеры или размерность ранее объявленного массива -
'незаконны'. Число элементов массива, также как и его размерность
ограничиваются только объемом памяти компьютера. При объявлении
массива оператором |||DIM||| следите за тем, чтобы между |||DIM||| и скобкой
не было пробелов. Таким образом |||DIM A(10)||| - это правильно, а |||DIM
A (10)||| - не будет объявлять массив.
/Примеры/
100 DIM partnumbers(1000)
3000 DIM employeename¤(35)
240 DIM ALL_hours_in_the_week(24,7)
100 DIM A(X)
|||/Описание/|||
Оператор, который объявляет массив. Массивы должны быть
объявлены прежде чем Вы будете ими пользоваться. После объявления
все элементы числовых массивов принимают нулевое значение, а
элементы символьных массивов заполняются 'пустыми строками'.
Младший элемент массива - это нулевой элемент. Таким образом |||DIM
X(4)||| создает массив из пять элементов (от 0 до 4 включительно).
Есть второй, существенно отличающийся, вариант использования
оператора |||DIM|||. Он может быть использован для резервирования
байтов в памяти для специальных приложений. Для того, чтобы
зарезервировать 25 байт, напишите :
DIM X 24
Обратите внимание на то, что между переменной X и (числом байт
минус 1) ставится пробел (во всяком случае должен присутствовать
любой допустимый разделитель отличный от скобки). Адрес начала
группы из 25 байт будет помещен в переменной X для этого примера.
Такая форма оператора |||DIM||| находит очень широкое применение при
работе со ссылочными структурами данных и вообще при прямых
обращениях к памяти (см. операции ?, ! и ¤), а также при
резервировании места для размещения машинных кодов, получаемых с
помощью встроенного в |||BBC BASIC||| транслятора ассемблера (см.
соответствующий разделы).
|||/Синтаксис/|||
DIM <num-var> | <str-var> ( <numeric> { , <numeric> } ) или
DIM <num-var> <numeric>
-----------------------------------------------------------------
─PE5
|||/ELSE/|||
/Назначение/
Для обеспечения альтернативных действий. |||ELSE||| может быть
использовано в операторах |||IF...THEN|||, |||ON...GOTO||| и |||ON...GOSUB|||.
/Примеры/
560 IF length>0 THEN PRINT "Отлично" ELSE PRINT "Не
правильно"
100 IF A<>B THEN C=D ELSE PRINT "Совпадают!"
|||/Описание/|||
Часть структуры |||IF ... THEN ... ELSE|||.
|||/Синтаксис/|||
IF <num-expr> [ THEN ] [ <statement> ]
[ ELSE [ <statement> ] ]
или
ON <num-var> GOTO <numeric> { , <numeric> }
[ ELSE [ <statement> ] ] или
ON <num-var> GOSUB <numeric> { , <numeric> }
[ ELSE [ <statement> ] ]
-----------------------------------------------------------------
─PE5
|||/END/|||
/Назначение/
Информирует компьютер о том, что достигнут конец программы.
|||END||| - необязательный оператор, но может быть использован в
программе столько раз, сколько нужно.
/Пример/
9000 END
|||/Описание/|||
Необязательное обозначение места окончания программы (может
размещаться где угодно в программе и сколько угодно раз).
Команда |||END||| выполняет также следующую специальную функцию: она
заставляет |||BASIC||| просмотреть программу в памяти на предмет поиска
маркера конца программы. После чего |||BASIC||| устанавливает свои
внутренние указатели. Это может оказаться полезным при необычных
процедурах загрузки. Если пользователь меняет значение |||PAGE|||, то
внутренние указатели, такие как |||TOP||| не сбрасываются пока не
встретится команда или оператор |||END|||.
|||/Синтаксис/|||
END
-----------------------------------------------------------------
─PE5
|||/ENDPROC/ |||конец процедуры
/Назначение/
Отмечает конец определения процедуры. Смотрите ключевое слово
|||DEF||| для большей информации.
/Пример/
1000 DEF PROCdash(param)
1030 LOCAL counter
1040 FOR counter=1 TO param
1050 PRINT"-";
1060 NEXT counter
1070 ENDPROC
|||/Описание/ |||
Часть структуры |||DEF PROC ... ENDPROC|||
|||/Синтаксис/|||
ENDPROC
-----------------------------------------------------------------
─PE5
|||/ERL/||| номер строки, в которой произошла ошибка
/Назначение/
Позволяет программе определить номер строки, в которой произошла
последняя ошибка.
/Примеры/
8500 X=ERL
8100 IF ERL=100 THEN PRINT "Я не понял"
300 IF ERL=10000 THEN CLOSE#0
|||/Описание/ |||
Функция, возвращающая номер строки, в которой произошла
последняя ошибка.
|||/Синтаксис/|||
<num-var>=ERL
-----------------------------------------------------------------
─PE5
|||/ERR/||| ошибка
/Назначение/
Если компьютер обнаружил ошибку, с которой он не может
справиться, он выводит сообщение об ошибке на экран. Кроме этого
он запоминает 'номер ошибки'. Например, если Вы попытаетесь
провести вычисления с числами, которые являются слишком большими
для компьютера, он выдаст сообщение |||Too big||| и запомнит номер
ошибки 20.
Нажатие на клавишу |||РЕД||| приводит к ошибке (ошибке номер 17) и Вы
можете обнаружить это и произвести какие-либо действия по Вашему
желанию.
Можно заставить компьютер самостоятельно справляться с
большинством из таких ошибок, написав специальный кусок
программы, который будет отвечать за поведение программы в
непредвиденных ситуациях. Эта часть программы должна знать, где
и какая ошибка произошла.
Функция |||ERR||| позволяет Вашей программе найти номер последней
зафиксированной ошибки. Это, в общем случае, позволяет программе
выдавать информативное сообщение пользователю, допустившему
ошибку.
/Примеры/
1000 wrong=ERR
100 IF ERR=17 THEN PRINT "Вам не удастся от меня убежать!"
1230 IF ERR=18 THEN PRINT "На ноль делить нельзя!"
|||/Описание/|||
Возвращает номер последней зафиксированной ошибки.
|||/Синтаксис/|||
<num-var>=ERR
-----------------------------------------------------------------
─PE5
|||/EVAL/||| вычислить
/Назначение/
Эта функция позволяет пользователю вводить в компьютер
выражения, такие как, например математические уравнения, во время
работы программы.
Например, предположим, что программа должна вычислять значения
некоторой функции и Вам необходимо ввести выражение для этой
функции во время работы программы. В большинстве версий |||BASIC|||
сделать это чрезвычайно трудно. В |||BBC BASIC||| выражение можно
поместить в символьную переменную, а затем попросить компьютер
обработать эту переменную с помощью |||EVAL|||.
Так как эта функция не входит в стандартный набор операторов
|||BASIC|||, то мы приведем несколько примеров выражений, которые могут
быть вычислены с помощью |||EVAL|||.
EVAL A¤
A¤="M*X+C"
A¤="SIN(x/120)+COS(x/30)"
Надо отметить, что хотя функция |||EVAL||| может вычислять выражения,
содержащие такие функции, как |||SIN, COS, SQR||| и т.д., она не сможет
выполнять операторы, например, |||A=EVAL"MODE 0"||| вызовет сообщение
об ощибке.
/Примеры/
100 X=EVAL(A¤)
234 value=EVAL(z¤)
|||/Описание/|||
Функция, которая передает на вход подпрограммы вычисления
выражений символы, содержащиеся в аргументе. Простой способ
вычисления функции, введенной пользователем в программу.
|||/Синтаксис/ |||
<num-var> = EVAL <string>
или
<str-var> = EVAL <string>
/Демонстрационная программа/
10 INPUT A¤
20 FOR X=1 TO 5
30 Y=EVAL A¤
40 PRINT Y
50 NEXT X
>RUN
? 5*X
5
10
15
20
25
Bторая программа заставляет компьютер работать как калькулятор
5 REPEAT
10 INPUT B¤
20 PRINT EVAL B¤
30 UNTIL FALSE
>RUN
?3+4
7
?SIN (RAD (45))
0.707106781
?
-----------------------------------------------------------------
─PE5
|||/EXT#/ |||
/Назначение/
Определение размера файла. Возвращаемое число означает
количество байт в файле. Исследуемый файл должен быть
предварительно открыт командами OPENIN или OPENOUT.
/Примеры/
100 X=EXT#(employee)
PRINT EXT# (N)
|||/Описание/|||
Функция возвращает длину файла в байтах. Аргумент функции
является номером открытого файла.
|||/Синтаксис/|||
<num-var>=EXT#(<num-var>)
-----------------------------------------------------------------
─PE5
|||/FALSE/ |||
/Назначение/
Иногда компьютеру приходится решать является что-либо истинным
или нет. Например:
10 X=12
20 IF X=20 THEN PRINT "X равно 20"
Ясно, что в этом примере утверждение X=20 - ложно. Так что
программа никогда не напечатает 'X равно 20'.
100 X=12
110 REPEAT
120 PRINT "Привет"
130 UNTIL X=20
будет все время печатать 'Привет', так как X никогда не станет
равным 20. X=20 - это, в данном случае, ложь (|||FALSE|||). Аналогичный
результат производит и следующая программа:
110 REPEAT
120 PRINT "Привет"
130 UNTIL FALSE
где в 130 строке указано не заканчивать цикл никогда.
На самом деле у компьютера есть числовое значение для |||FALSE|||. Это
ноль. Таким образом
PRINT FALSE
напечатает 0.
Аналогично
PRINT 2*2=5
тоже напечатает 0, так как 2*2=5 - это ложь (|||FALSE|||).
Часто бывает удобно написать где-нибудь в программе, например:
CLOCKSET = FALSE
и, в дальнейшем, Вы можете пользоваться этим:
IF CLOCKSET THEN PRINT "Часы показывают правильное время"
/Примеры/
100 oldenough = FALSE
245 UNTIL FALSE
|||/Описание/ |||
Функция, возвращающая нулевое значение.
|||/Синтаксис/|||
<num-var> = FALSE
-----------------------------------------------------------------
─PE5
|||/FN/||| функция
/Назнaчение/
|||FN|||, стоящее перед именем переменной, указывает, что это имя
используется для обозначения функции. Могут быть определены как
числовые, так и символьные функции. Дополнительную информацию о
функциях и процедурах Вы можете найти в описании ключевого слова
|||DEF|||.
Так как функция всегда возвращает некоторое значение, она чаще
всего появляется в правой части оператора присваивания или в
операторе |||PRINT|||. Процедуры, в отличии от функций не возвращают
результа.
/Пример/
100 DEF FNmean2(x,y)=(x+y)/2
|||/Описание/|||
Зарезервированное слово для обозначения имен функций,
определенных пользователем.
|||/Синтаксис/|||
<num-var> = FN<variable-name>
[ ( <num-expr> | <str-expr> { , <num-expr> | <str-expr> } ) ]
или <str-var> = FN<variable-name>
[ ( <num-expr> | <str-expr> { , <num-expr> | <str-expr> } ) ]
-----------------------------------------------------------------
[an error occurred while processing this directive]