ZX-Ревю 1991 №1 1990 г.

Раздел для начинающих - работа с операторами БЕЙСИКа READ и DATA.


Мы знаем, что особую сложность для начинающих представляет работа с операторами БЕЙСИКа READ и DATA, не говоря уже о RESTORE. Профессионалы, если вспомнят свои первые шаги, конечно с нами согласятся, причин здесь две. Во-первых работа этих операторов неочевидна, то есть требует специальных разъяснений, а во-вторых в БЕЙСИКе есть замечательный оператор INPUT, который позволяет удобно организовывать ввод данных, и начинающие предпочитают пользоваться им.

Сегодня мы предлагаем Вашему вниманию несложную программу, позволяющую воспроизвести на компьютере несколько простых мелодий. Работа звукового динамика здесь основывается на использовании оператора ВЕЕР m, n. Параметр m означает продолжительность звукового сигнала в секундах, а параметр n - высоту тона (частоту звукового сигнала).

Эти параметры вводятся с помощью операторов READ и DATA. Они хранятся в строках DATA и считываются оттуда оператором READ. Операторы READ и DATA работают в паре. Когда программа встречает очередной оператор READ, например READ Q, R, S - она обращается к ближайшему неиспользованному до сих ПОР оператору DATA и вводит из него столько чисел, сколько нужно оператору READ, в нашем случае - три (Q, R и S). Если в строке DATA стольких чисел нет, то программа идет к следующему блоку DATA и читает данные из него. После того, как данные прочитаны, они считаются использованными и больше к ним так просто не вернуться.

После совместной работы READ и DATA возможны три варианта. Первый, когда сколько данных потребовалось для READ, столько и нашлось в DATA, это нормальный вариант, все в порядке. Бывает, что операторы READ уже взяли все, что им надо, а в строках DATA еще не все данные использованы. Это возможно, никакой ошибки здесь нет. Хуже, когда READ просит какие-то данные, а строки DATA уже исчерпаны, в этом случае появляется сообщение типа 80 OUT OF DATA. Оно означает, что тому оператору READ, который стоит в 80-й строке, не хватило данных в DATA. Скорее всего причина ошибки в той, что Вы по невнимательности пропустили какое-то число, набирая строку DATA.

Если Вы подумали, что данные в строках DATA могут быть использованы только раз и потом они недостижимы, то это не совсем так. Дело может поправить оператор RESTORE NNNN, где NNNN - номер строки, например RESTORE 2500. Этот оператор "восстанавливает" строки DATA, начиная со строки NNNN, после чего следующий оператор READ будет читать данные из этой строки и последующих и т. д.

С помощью оператора RESTORE можно не только "восстанавливать" строки DATA, но с тем же успехом и вообще манипулировать данными, определяя какая строка когда будет вводиться.

Предлагаемая программа даст Вам представление о том, как все это происходит.

* * *

Введите программу и нажмите RUN и ENTER. Вы можете остановить программу с помощью CAPS SHIFT + SPACE (или клавиши BREA^.

10 LET menu = 40 : LET dstart = 300 : LET dplay = 400

Здесь мы присвоили переменным значения номеров часто использующихся строк, чтобы потом обращаться к строкам не по номеру, а по имени. Все-таки в имени есть какая-то информация, и если так делать почаще, то программа становится понятнее. Бывает трудно разобраться в своей же программе, написанной пару месяцев назад. 20 BORDER 4: PAPER 3: INK 9 30 BRIGHT 1: CLS Выставили цвета экрана. 40 REM menu 50 RESTORE dstart 55 FOR n = 1 TO 4: READ a$

Прочитали из строки DATA названия четырех мелодии. 60 PRINT AT 5 + 2*n, 1; PAPER 7; n;"="; а$;

Распечатали их на экране. 70 NЕХТ n 90 INPUT p

Запрос номера мелодии, которую Вы хотите прослушать.

100 IF p<1 OR p>4 THEN CLS: GO TO menu

В программе всего 4 мелодии и если нажата клавиша с номером, которого нет, возврат в меню.

110 IF p<>INT(p) THEN CLS: GO TO menu

Если введено не целое число, то тоже возврат в меню.

114 LET p$=STR$(p)

115 IF CODE(p$)<48 OR CODE(p$)>57 THEN CLS: GO TO menu

Если нажата не цифра, а иная клавиша, то тоже возврат. Коды цифр лежат в интервале от 46 до 57. Остальные символы - не цифры.

130 CLS

140 INPUT PAPER 7;"how many?"; v

Сколько раз повторить мелодию? 150 LET v = INT v 160 IF v<1 THEN GO то menu 180 RESTORE dstart + p

Очередной READ устанавливается на название избранной мелодии. 190 READ a$:

Теперь рассчитаем величину "k", необходимую для центрирования названия мелодии на экране.

200 LET b$ = "□"

Это графический символ. Он вводится в графическом режиме нажатием CAPS SHIFT+8. Переход в графический режим выполняется нажатием CAPS SHIFT + 9 (появятся курсор G).

310 LET k=INT((32-LEN a$)/2): 315 LET s$=" "

Здесь один пробел, 220 PRINT AT 11,k-2; PAPER 7; b$; s$;; а$; s$; s$; b$

Нарисуем рамку вокруг названия. 240 FOR n = k-1 ТО LEN а$+k+2 250 PRINT AT 10,n; PAPER 7; s$;

AT

12,

n; s$;

AT

10,

k-2; b$;

AT

12,

k-2; b$;

AT

10,

LEN a$+k+2

AT

12,

LEN а$+к+2

255 NEXT n

260 FOR п=к-2 TO LEN а$+к+2: PRINT AT 9,n; INK 0; b$; AT 13, n; b$ 265 NEXT n

270 RESTORE dplay + p 275 READ q, r, s Ввели параметры мелодий: q - количество нот; r - ритм (темп); s - пауза между повторами.

Далее идет само исполнение избранной мелодии,

280 FOR m = 1 TO v

281 RESTORE dplay + P*100

282 FOR n = 1 TO q

283 READ a,b

284 ВЕЕР a/r,b

285 NEXT n

286 PAUSE S 290 NEXT m

299 RUN

300 REM -----------------------

301 DATA "Melody one"

302 DATA "Melody two"

303 DATA "Melody three"

304 DATA "Melody four"

400 REM -----------------------

401 DATA 23,6, 16

402

DATA

73,4,75

403

DATA

36,3,1

404

DATA

33,3,33

490

REM

---

Melody one----

500

DATA

2,

0,2,0,2,4,2,7

501

DATA

6,

12,10,9,2,9,8,5

502

DATA

2,

7,2,9,16,7,2,0

503

DATA

2,

0,2,4,1,7,1,7

504

DATA

6,

7,10,2,2,4,2, 5

505

DATA

2,

4,2,2,14,0

590

REM

--

Melody two----

600

DATA

2,

2,2,7,3,7,1,7

601

DATA

1,

7,3,11,2,7,2,9

602

DATA

3,

9,1,9,1,9,3,12

603

DATA

2,

9,2,11,2,9,2,7

604

DATA

2,

14,2,12,2,11,2,11

605

DATA

3,

9,1,9,4,9,1,2

606

DATA

1,

2,2,7,2,7,2,7

607

DATA

1,

7,3,11,2,7,2,9

608

DATA

3,

9,1,9,1,9,3,12

609

DATA

1,

9,1,9,1,11,3,14

610

DATA

2,

12,1,11,3,14,2,12

611

DATA

3,

11,1,7,2,9,4,7

612

DATA

2,

2,3,7,1,7,3,7

613

DATA

1,

7,3,11,2,7,3,9

614

DATA

1,

9,2,9,1,9,3,12

615

DATA

1,

9,1,9,1,11,3,14

616

DATA

2,

12,1,11,3,14,2,12

617

DATA

3,

11,1,7,2,9,4,7

690

REM

--

-Melody three----

700

DATA

1,

0,1,0,2,5,2,5

701

DATA

2,

9,1,0,1,9,2,10

702

DATA

2,

10,2,14,1,10,1,10

703

DATA

2,

9,2,9,2,12,1,9

704

DATA

1,

5,2,7,2,7,2,12

705

DATA

2,

0,2,5,1,5,1,5

706

DATA

2,

9,1,12,1,9,2,10

707

DATA

2,

10,2,14,2,10,2,9

708

DATA

1,

9,1,9,1,0,2,9

709

DATA

2,

7,2,5

790

REM

--

-Melody four----

600

DATA

2,

7,2,11,2,11,6,11

601

DATA

2,

7,2,9,1,11,1,9

602

DATA

6,

7,2,7,2,11,2,14

603

DATA

6,

14,2,9,2,11,8,14

604

DATA

2,

14,2,16,2,14,6,11

605

DATA

1,

9,1,7,2,14,2,11

606

DATA

6,

2,1,2,1,2,2,4

607

DATA

2,

7,6,9,2,2,2,4,6,7




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Презентация - новгородская группа Digital Reality о себе.
Видео - Боевик "Воины".
Юмор - Кpошка сын к отцу пpишел.
body postbox - нам пишут: relict, PoP HL, Губский Роман Алексеевич.
Реклама - реклама и объявления.

В этот день...   21 ноября