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