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