[an error occurred while processing this directive]

─LM6
─HM0
─TM0
─PL70
│.........*.......*.......*.......*.......*.......*.......*.......*<

|||/CHAIN/ |||

/Назначение/

 |||CHAIN||| делает возможным разбивку программы на несколько небольших
частей.
 Оператор  |||CHAIN|||  позволяет одной программе  загрузить  (|||LOAD|||)  и
автоматически запустить (|||RUN|||)  другую  программу.  Например, одна
программа может позволить пользователю ввести информацию  о  том,
сколько  времени  работали  служащие, а затем передать управление
(|||CHAIN|||)  второй  программе,  которая   распечатает   ведомость  с
заработной платой. В свою  очередь  эта программа может запустить
(|||CHAIN|||)  третью  программу,  которая  выдаст  информацию  о  том,
сколько каждый из служащих заработал в среднем за один час.
 |||CHAIN|||  также  полезен  в играх  с  большим  обьемом  инструкций.
Инструкции можно поместить в  отдельную  программу, которая затем
вызывает (|||CHAIN|||) основную программу, и таким  образом высвободить
память компьютера.

/Примеры/
900  CHAIN"GAME_1"
1234 CHAIN"NEWPROG"
CHAIN A¤

|||/Описание/ |||

 Оператор, который позволяет загрузить и запустить программу, чье
имя указано в качестве аргумента.  Все переменные, за исключением
 % и от A% до Z% инициализируются.

|||/Синтаксис/ |||

CHAIN <string>

-----------------------------------------------------------------

|||/CHR¤/ ||| символ

/Назначение/
Преобразование заданного числа в символ  (букву,  цифру  и т.д.).
Символ генерируется в соответствии с таблицей ASCII кодов.

Оператор  VDU имеет тот же эффект, что и  PRINT  CHR¤,  но  имеет
более универсальный характери применения.

/Примеры/

  220 RED¤=CHR¤(129)

 1070 PRINT CHR¤(8);

перемещает курсор на одну позицию влево.

PRINT CHR¤ (7)

вызывает подачу звукового сигнала.

|||/Описание /|||
Символьная  функция,   возвращающая  одиночный  символ.  Аргумент
функции является ASCII кодом символа.

|||/Синтаксис /|||
<string-var> = CHR¤(<numeric>)

-----------------------------------------------------------------

|||/CLEAR /|||

/Назначение/

 Заставляет  компьютер  забыть все переменные,  которые  были  до
этого использованы, включая  символьные  переменые  и массивы, за
исключением  "резидентных  целых переменных"  % и  от  A%  до  Z%
значения которых остаются без изменений.

/Примеры/
350 CLEAR
CLEAR

|||/Описание/ |||

 Оператор,  который  уничтожает  все  переменные,  за  иключением
резидентных целых переменных  % и от A% до Z%.

|||/Синтаксис/ |||

CLEAR

-----------------------------------------------------------------

|||/COLOUR/ |||

/Назначение/

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


/Примеры/
COLOUR 4    - выбор синего цвета текста (4-й цвет)
COLOUR 129  - выбор черного цвета фона (129-128=1-й цвет)

|||/Описание/|||

 Оператор, который позволяет изменять фоновый  и  основной цвета.

|||/Синтаксис|||/

COLOUR <num-expr>

-----------------------------------------------------------------

|||/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

-----------------------------------------------------------------

|||/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> } ) ]

-----------------------------------------------------------------

|||/DEG/||| градусы

/Назначение/

 Эта  функция  переводит  значение  величины  угла,  заданного  в
радианах,  в  градусы.  Один  радиан   равен   приблизительно  57
градусам.

/Примеры/
100 X=DEG(PI/2)

300 angle=DEG (1.36)

PRINT DEG(PI/2)

|||/Синтаксис/|||

<num-var>=DEG<numeric>

-----------------------------------------------------------------

|||/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>

-----------------------------------------------------------------

|||/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> ] ]

-----------------------------------------------------------------

|||/END/|||

/Назначение/

 Информирует компьютер о том, что достигнут конец программы.
 |||END|||  -  необязательный оператор, но  может  быть  использован  в
программе столько раз, сколько нужно.

/Пример/
9000 END

|||/Описание/|||

 Необязательное  обозначение  места  окончания  программы  (может
размещаться где угодно в программе и сколько угодно раз).

 Команда |||END||| выполняет также следующую  специальную  функцию: она
заставляет |||BASIC||| просмотреть программу в памяти на предмет поиска
маркера  конца  программы.  После  чего  |||BASIC||| устанавливает свои
внутренние указатели. Это может оказаться полезным  при необычных
процедурах  загрузки.  Если пользователь меняет значение |||PAGE|||, то
внутренние указатели, такие  как  |||TOP|||  не  сбрасываются  пока  не
встретится команда или оператор |||END|||.

|||/Синтаксис/|||

END

-----------------------------------------------------------------

|||/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

-----------------------------------------------------------------

|||/ERL/||| номер строки, в которой произошла ошибка

/Назначение/

 Позволяет программе определить номер строки, в которой произошла
последняя ошибка.

/Примеры/
8500 X=ERL

8100 IF ERL=100 THEN PRINT "Я не понял"

300 IF ERL=10000 THEN CLOSE#0

|||/Описание/ |||

 Функция,   возвращающая  номер  строки,  в   которой   произошла
последняя ошибка.

|||/Синтаксис/|||

<num-var>=ERL

-----------------------------------------------------------------

|||/ERR/||| ошибка

/Назначение/

 Если  компьютер  обнаружил  ошибку,  с   которой   он  не  может
справиться, он выводит сообщение об  ошибке на экран. Кроме этого
он  запоминает  'номер  ошибки'.  Например, если  Вы  попытаетесь
провести вычисления с числами, которые  являются слишком большими
для  компьютера, он выдаст сообщение |||Too  big|||  и  запомнит  номер
ошибки 20.

 Нажатие на клавишу |||ESCAPE||| приводит  к ошибке (ошибке номер 17) и
Вы  можете  обнаружить это и произвести  какие-либо  действия  по
Вашему желанию.

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

/Примеры/
1000 wrong=ERR

100 IF ERR=17 THEN PRINT "Вам не удастся от меня убежать!"

1230 IF ERR=18 THEN PRINT "На ноль делить нельзя!"

|||/Описание/|||

 Возвращает номер последней зафиксированной ошибки.

|||/Синтаксис/|||

<num-var>=ERR

-----------------------------------------------------------------

|||/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
?

-----------------------------------------------------------------

|||/EXT#/ |||

/Назначение/

 Определение   размера   файла.   Возвращаемое   число   означает
количество   байт   в   файле.   Исследуемый   файл  должен  быть
предварительно открыт командами OPENIN или OPENOUT.

/Примеры/

   100 X=EXT#(employee)
 PRINT EXT# (N)

|||/Описание/|||

 Функция  возвращает  длину  файла  в  байтах.  Аргумент  функции
является номером открытого файла.

|||/Синтаксис/|||

<num-var>=EXT#(<num-var>)

-----------------------------------------------------------------

|||/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

-----------------------------------------------------------------

|||/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]