148____________________________________________
общую. Конечно из-за этого программа вычисления простых чисел не будет работать быстрее, но мы будем рассматривать эту задачу как "фоновую" для программы отображения времени, и придется поработать, чтобы эти программы могли работать совместно. Для уменьшения количества опечаток рекомендуется объединить эти программы при работе в среде MS DOS командой
COPY CLOCK.BAS+PRIMES.BAS TEMP.BAS
Затем в соответствии с нижеследующим текстом переставьте части полученного файла, удалите лишние строки и добавьте те 5 строк, которые имеют комментарии.
Рассмотрим теперь суть произведенных изменений. Как видите, основная программа обращается к подпрограмме SHOWT, которая устанавливает задержку на ее последующий вызов равную 1 секунде, только один раз и затем включает разрешение прерывания по времени. Эти три действия обеспечивают последующую ежесекундную работу этой подпрограммы. Еще 2 дополнительные строки устраняют конфликт объединяемых программ в части использования экрана. Первая из них в основной программе исключает скроллинг экрана ("прокрутку") и обеспечивает вывод только в пределах первого десятка строк. Но подпрограмма SHOWT прерывает основную по времени, то есть может быть вызвана "в самом неподходящем" месте с точки зрения вывода информации основной программой. Для устранения этого конфликта перед выходом из подпрограммы производится установка курсора в начало соответствующей строки.
DECLARE FUNCTION IsPrimet(AS)
DATA &H003E, SH6363, SH6363, SH633E, SH001B, SH3818, &H1818 SH187E
DATA SH003E, SH6303, SHOE18, SH337F, SH003E, SH6303, SH1E03 SH633E
DATA SHOOOE, SH1E36, SH667F, SH060F, &H007F, SH6060, &H7E03 SH633E
DATA SH001C, SH3060, SH7E63, SH633E, SH007F, SH6306, SHOC18 SH1818
DATA SH003E, SH6363, SH3E63, SH633E, SH003E, SH6363, SH3F03 SH063C
CLS
DIM SHARED B(1 TO 16384) AS LONG
DIM SMBLS(0 TO 9, 1 TO 4) AS INTEGER
DIM DIGITS(1 TO 4) AS INTEGER
POINT$ = STRING$(2, CHR$(219>)
EMPTY$ = " "
FOR 1% = О ТО 9
FOR J% = 1 ТО 4 READ К» SMBLS(I%, J%> = K%
NEXT J% NEXT I» Mt = 0 S% = 0
GOSOB SHOWT ' обращение к подпрограмме TIMER ON 'разрешение прерывания по времени В(1) = 2: В(2) = 3 JS = 3
к& = з
DO
JS = JS + 2 IF IsPrimetfJS) > 0 THEN
IF KS < 16385 THEN B(KS) = JS
IF KS MOD 10 = 0 THEN LOCATE 1, 1 'для вывода результата в 10 строк PRINT K?, JS KS = KS + 1 END IF