Basic 1969 г.

Глава 18 - указания.


Глава 18

Указания

Краткое содержание: PAUSE, INKEYO, РЕЕК.

Если Ьы решили задержать выполнение программы иа некоторое
время, то вам следует использовать оператор: PAUSE N, который
останавливает выполнение программы и отображает картину в течение
"N" телевизионных кадров (50 кадров в Европе или 60 а Америке).
nN" может быть вплоть до 65535, что составляет 22 минуты. Если
N«0, то это означает, что оператор PAUSE ие имеет ограничений по
времени. Выполнение программы всегда может быть возобновлено до
окончания времени, определенного в операторе PAUSE, нажатием лю-
бой клавиши ( надо помнить, что CAPS SHIFT будет вызывать преры-
вание). Пример программы моделирования секундной стрелки часов:
10 REM FIRST WE DRAW THE CLOCK FACE
20 FOR N»1 TO 12

30 PRINT AT Ю-IOOCOS (N/6»PI),16+10*SI N (N/6»PI); N
40 NEXT N

50 REM NOW WE START THE CLOCK

60 FOR T»0 TO 200000: REM T IS THE TIME IN SECONDS
70 LET A«T/30»PI: REM A IS THE ENGLE OF THE SECOND

HAND IN RADIANS
80 LET SX*8 0 *SIN A: LET SY»80«COS A

200 PLOT 128,88: DRAW OVER 1: SX, SY: REM DRAW SECOND

HAND
210 PAUSE 42

220 PLOT 128,88: DRAW OVER 1; SX, SY: REM ERASE SECOND

HAND
400 NEXT T

Эти часы остановятся, проработав приблизительно 55,5 час. Это
задается в операторе с номером 60. Оператор 210 производит отсчет
времени. Казалось бы здесь должен быть оператор PAUSE SO (Евро-
па), для точного отсчета одной секунды, но тогда бы мы ие учли
время, затрачиваемое на выполнение остальных операторов програм-
мы. рассматриваемый вариант часов обеспечивает 2-х процентную
точность или, иными словами уход на полчаса в день. Возможны и
более точные способы измерения времейи, для этого можно использо-
вать содержимое специальных областей памяти. В этом случае данные
из памяти могут быть вызваны с по мощью функции реек, подробно
это рассмотрено в главе 25. Здесь же в качестве примера рассмот-
рим выражение:

(65536*РЕЕК 23674+256*РЕЕК 23673+РЕЕК 26672) /50
оно дает количество секунд, прешедших с тех пор, как компьютер
был включен (вплоть до 3-х суток и 21 часа). ниже приводится мо-
дифицированная программа моделирования часов:
10 REM FIRST WE DRAW THE CLOCK FACE
20 FOR N«1 TO 12

30 PRINT AT lO-lO^COS (N/6*P1).16+10*SI N (N/6*PI); N
4 0 NEXT N

50 DEF FN T () »I NT ( (65536*PEEK 23674 + 256»PEEK 23673 +
PEEK 23672) /50): REM NUMBER OF SECOND SINCE
START

100 REM NOW WE START THE CLOCK

110 LET Tl-FN T ()

120 LET A*T1/30*PI: REM A IS THE ANGLE OF SECOND
HAND IN RADIANS

130 LET SX* 72 *S1N A: LET SY*72*COS A

140 PLOT 131,91: DRAW OVER 1; SX, SY: REM DRAW HAND

200 LET T*FN T ()

210 IF T<*T1 THEN GO TO 200: REM WAIT UNTIL TIME FOR
NEXT HAND

220 PLOT 13 1,91: DRAW OVER 1; SX, SY: REM RUB OUT OLD
HAND

2 30 L£T T1=T: GO TO 120
Эти часы обеспечивают точность 0,01% или уход на 10 секунд в
день. Однако, это возможно при условии, что вы не использовали
оператор ВЕЕР, ввод/вы^од на магнитофон и принтер. Все эти опера-
ции увеличивают погрешность. Числа реек 23674, РЕЕК 23673 и реек

23672 выделяют адреса ячеек памяти компьютера и используемых для
подсчета 1/50 долей секунды. В каждой из ячеек подсчитывается
сумма от 0 до 255, после достижения величины 255 в любой из яче-
ек, она сбрасывается в ноль. Первой начинает отсчитывать ячейка
реек 23672, каждые 1/50 сек. Ее содержимое увеличивается на 1.
Когда в ячейке накопится величина, равная 255, то она сбрасыва-
ется в ноль а значение ячейки реек 23673 увеличивается на 1. Че-
рез каждые 256/50 сек. содержимое этой ячейки переходит из состо-
яния 255 в ноль, а содержимое ячейки реек 23674 увеличивается на
1. При значениях 0 для ячейки реек 23674 и 255 для ячеек реек

23673 и реек 23672 (этот момент наступит через 21 минуту) наше
выражение примет значение:

(65536*0+256*255+255) /50*1310,7
ио здесь имеется скрытая опасность. Через следующую 1/50 секунды
ячейки будут содержать соответственно следующие значения: 1,0,0.
Пока производятся вычисления выражения, компьютер может оценить
значение ячейки реек 23674 как 0 до завершения циклического пере-
носа. В результате получим:

(65536*0+256*0+0) /50=0,
что безнадежно неверно. Простое правило позволяет решить эту
проблему: "следует вычислять выражение дважды в некоторой после-
довательности и использовать сохраненный ответ". Пример:

10 DEF FN М (X, Y) * (X+Y+ABS (Х-Y)) /2: REM THE LARGER OF X
AND Y

20 DEF FN U () * (65536*PEEK 23674 + 256*PEEK 23673 +

PEEK 23 672) /50: REM TIME, MAY BY WRONG
30 DEF FN T () *FN M (FN U (), FN U ()): REM TIME RIGHT
Вы можете изменять значения числовых счетчиков так, чтобы По-
лучать реальное время того момента, когда компьютер был включен.
Например, надо установить 10 часов вечера. Вы посчитали, что это
10*60*60*50*1800000 50-х Долей секунды и значит
18 00000*65536*27+2 56*119+64.
Для присвоения трем ячейкам значений 27,119 и 64 необходимо вы-
полнить :

Роке 23674,27: РОКЕ 23673,119: РОКЕ 23672,64
Функция INKEY* (без аргументов) считывает с клавиатуры. Если
вы нажали некоторую клавишу (или SHIFT и какую-нибудь клавишу),
результатом будет символ, который дает эта клавиша в режиме мар-
кера <L>, или пустая строка.

Выполните программу, которая использует эту функцию:
10 IF INKEYB о" " THEN GO ТО 10

20 IF INKEY* H THEN GO TO 20
30 PRINT INKEY*;
40 GO TO 10

Помните, что функция INKEY* не будет подобно INPUT ждать рас.
Если вы не выполните ввод, то считайте, что ваш шанс упущен.




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Программы, которые мы выбираем - Предложение ко всем авторам программ, печатающих дамп памяти. Программистам, использующим защиту дисков от копирования.
Железо - о полезных для Спектрума железках: расширение памаяти на Simm.
Сплошные приколы - Сборник высказываний советских офицеров (продолжение).
NАTЯGGG - Привeт спeктрумисты! Однaжды мнe приснился нeoбычный сoн, o кoтoрoм я и хoчу вaм рaсскaзaть, этoт сoн был сaмый яркий и рeaлистичный, нaчинaю рaсскaзывaть...
Система - работа с TR-DOS в ассемблере.

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