Команды ББ. (Окончание) music by MIDISOFT (C)Д.Рудовский _______________________________ В этой статье я закончу описание ББ и дам несколько советов по его использова- нию. ОС Спектрума имеет свои внутренние часы, т.е. переменную, в которой хранится коли- чество пятидесятых долей секунды (преры- ваний), пришедших с момента включения компьютера. Создатели ББ решили использо- вать эту возможность для организации ча- сов в программе. Команда CLOCK "строка" - позволяет уста- новить текущее значение времени, а также установить будильник. Для установки бу- дильника первым символом в строке должен быть символ A (alarm - будить.). Строка должна быть введена в виде: "чч:мм:сс", для будильника секунды не указываются. Для использования возможностей будильни- ка дополнительно введен формат: CLOCK n, где: n=0 - показания не выводить, будильник отключить; n=1 - указывать время в верхнем углу экрана, будильник отключить; n=2 - время не показывать, выдать зву- ковой сигнал по будильнику; n=3 - указывать время и выдавать зву- ковой сигнал по будильнику; n=4 - не указывать время, при срабаты- вании будильника перейти на стро- ку; n=5 - аналогично n=4 с выводом времени на экран; n=6 - аналогично n=4 с выдачей звуко- вого сигнала перед переходом; n=7 - n=5 и n=6 вместе; n=8..9999 - установить номер строки, на которую будет произведен пере- ход при срабатывании будильника. Пример: 10 PRINT " 346*789=? " 20 CLOCK "00:00:00": CLOCK "A00:01" 30 CLOCK 1000: CLOCK 7 F 40 INPUT X 50 IF X=346*789 THEN PRINT "Very Good!" ELSE "Bad rezult!": GO TO 40 F 60 CLOCK 0 70 STOP F1000 CLOCK 0 1010 PRINT "No more time!" 1020 STOP Пояснения: В 20 строке мы устанавливаем системные часы в 0, а будильник ставим на 1 минуту. В 30 строке мы устанавливаем строку пе- рехода и режим работы часов ( см. выше). Затем мы запрашиваем ввод числа и если результат верен, и прошло меньше минуты, то мы получим надпись "Very Good", часы будут поставлены в пассивное состояние ( строка 60) и программа остановится. Если результат неверен, но время еще есть, то с выводом соответствующего сооб- щения произойдет переход обратно на стро- ку 40. Если время истечет, то вне зависимости от результата будет выдан звуковой сигнал и произойдет переход на строку 1000. ВНИМАНИЕ!!! Переход по будильнику проис- ходит только после выполнения всей! теку- щей строки. Также этот режим не работает во время редактирования текста. Команда SORT используется для сортировки массивов и символьных строк. Ее формат: SORT [INVERSE] var, где: INVERSE - необязательный параметр, ука- зывающий на условие сортиров- ки, т.е. при его наличии сор- тировка будет происходить по убыванию значений, иначе, по возрастанию; var - имя массива или строки. Сортировка происходит для символьных массивов по первой символу по умолчанию. Для сортировки по другому символу исполь- -зуется конструкция: SORT S$() (N TO),где: S$ - символьный массив; N - номер символа по которому будет произведена сортировка. Для сортировки части массива используют: SORT S$(N TO M) , где: N,M - границы сортировки. Пример: 10 DIM a$(100,10) 20 FOR I=1 TO 100 30 FOR J=1 TO 10 40 LET A$(I,J)= CHR$(RND*25+65) 50 NEXT J: PRINT A$(I) 60 NEXT I 70 PRINT "Sorting for 1st char:" 80 SORT A$ 90 FOR I=1 TO 100 100 PRINT A$(I) 110 NEXT I 120 PRINT "Sorting for 2st char:" 130 SORT A$()(2 TO) 140 FOR I=1 TO 100 150 PRINT A$(I) 160 NEXT I 170 STOP На этом я закончу описание команд ББ, приведя в конце справку по соответствию клавиш и команд (все команды набираются в режиме псевдографики): [A] - ALTER [6] - AUTO [C] - CLOCK [1] - DEF KEY [1] - DEF PROC [7] - DELETE [D] - DO [P] - DPOKE [0] - EDIT [E] - ELSE [3] - END PROC [I] - EXIT IF [F] - FILL [G] - GET [CS]+[6] - JOIN [CS]+[6] - KEYIN [8] - KEYWORDS 0 [9] - KEYWORDS 1 [L] - LOOP [O] - ON [N] - ON ERROR [Q] - POP [2] - PROC [9] - RENUM [R] - ROLL [S] - SCROLL [M] - SORT [T] - TRACE [P] - USING Функции ББ. Кроме дополнительных команд ББ предлага- ет несколько новых функций, которые вво- дятся также, как и обычные, определяемые пользователем, но воспринимаются ББ, как внутренние. Все функции можно условно разделить на три группы: логические, математические и остальные. К логическим функциям относятся: AND(n,m) [FN A(] - логическое И; OR(n,m) [FN O(] - логическое ИЛИ; XOR(n,m) [FN X(] - исключающее ИЛИ. К математическим функциям относятся: а) Функции преобразования форматов: . BIN$(n) [FN B'&(] - преобразование деся- тичного числа в дво- ичную строку; DEC(строка) [FN D(] - преобразование строки, содержащей шестнадцатиричное чис- ло, в десятичное. - HEX$(n) [FN H(] - преобразование деся- тичногочислав шестнадцатиричную строку; - USING$(формат, число) [FN U$(] - знако- вая запись числа в заданном формате. б) расширенные стандартные функции: . COSE(n) [FN C(] - более быстрый и более грубый вариант cos; SINE(n) [FN S(] - аналог. для sin; DPEEK(n) [FN P(] - аналогично: 256*PEEK(N+1)+PEEK(N); RNDM(n) [FN R(] - аналогично: n*RND. К остальным функциям относятся функции определения объема памяти, содержимого экрана и т.д. CHAR$(n) [FN C$(] - преобразование чис- ла в пределах 0-65535 в эквивалентную стро- ку из двух знаков; FILLED() [FN F(] - количество элементов изображения, запол- ненных последней ко- мандой FILL; INSTRING(n,стр1,стр2) [FN I(] - возвра- щает позицию первого знака строки 2 при просмотре строки 1, начиная с заданной стартовой позиции. Если внутри строки 1 нет строки 2, то возвращает 0. MEM() [FN M(] - возвращает объем сво- бодной памяти; MEMORY$() [FN M$(] - возвращает значе- ние всей памяти от 0 до 65535 интерпрети- рованное , как одна строка; MOD(n1,n2) [FN V(] - возвращает остаток деления n1 на n2; NUMBER(строка) [FN N(] - преобразование строки из двух знаков в двухбайтовое число, где каждый байт со- держит число, отвеча- ющее заданному коду ASCII; SCRN$(y,x) [FN K$(] - возвращает знак, находящийся на экране в заданной позиции; STRING$(n,строка) [FN S$(] - повторяет строку заданное коли- чество раз; TIME$() [FN T$(] - возвращает строку, содержащуютекущее время. Особенности программирвания в ББ. Расширяя возможности стандартного бейси- ка, ББ изменяет и сами методы программи- рования, поэтому при работе в среде ББ желательно учитывать следующие моменты: 1) В результате изменения действия опе- ратора FOR...NEXT скорость его выполнения значительно возрастает при работе с целы- ми числами в интервале 0..65535, следова- тельно старайтесь обходиться целочислен- ными циклами. 2) В результате появления процедур и связанных с ними локальных переменных по- явилась возможность существенно сэконо- мить память за счет локализации перемен- ных. Также это позволяет вам перейти к понятию структуризации программы. 3) Наличие возможности форматированного вывода и введение оконного интерфейса позволяет упорядочить вывод на экран не- обходимой информации. 4) Команда сортировки позволяет более эффективно использовать ББ при организа- ии баз данных. _______________________________