Программистам - Basic - 7: Окончание описания Beta-Basic.

ZX Format #07
        Команды ББ.
        (Окончание)

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)  Команда  сортировки позволяет более
эффективно  использовать ББ при организа-
ии баз данных.

_______________________________