ZX-Ревю 1994 №3 1993 г.

Спектрум в школе - несколько программ для старшеклассников. Темы программ "MADNESS", "TCHIRNHAUSEN", "CHAOS", "OBOI" взяты из журналов "В мире науки".


ШШЮПРУМ Ж «МНЕ

© Ю. Пензин, г. Самара,1994.

Предлагаю несколько программ для старшеклассников. Темы программ "MADNESS", "TCHIRNHAUSEN", "CHAOS", "OBOI" взяты из журналов "В мире науки" (SCIENTIFIC AMERICAN) № 11 1986 г. № 9 1987 г., № 7 1988 г. Это оригинальные графические композиции. В свою очередь программы "PLANETS" и "MOON" могут быть полезны на уроках астрономии.

MADNESS.

10 BORDER 0: PAPER 0: INK 4: CLS 20 PRINT #0; INK 1;"MADNESS" 30 FOR t=1 TO 1E30 STEP 0.5

40 LET x=SIN (0.99*t/180*PI)-0.7*COS (3.01*t/180*PI) 50 LET y=COS (1.01*t/180*PI)+0.1*SIN (15.03*t/180*PI) 60 PLOT x*75+127,y*75+87 70 NEXT t

CHAOS.

TSCHIRNHAUSEN.

10 BORDER 4: PAPER 1: CLS

20 PRINT AT 20,1; INK 7;"TSCHIRNHAUSEN"

30 FOR a=.2 TO 2 STEP .25

10 BORDER 0: PAPER 0: INK 4: CLS

20 PRINT #0; INK 1;"CHAOS-1"

30 LET x=.3: LET z=0

40 FOR r=2.9 TO 4 STEP .0063

50 LET z=z+1

60 FOR i=1 TO 80

70 LET x=r*x*(1-x)

80 NEXT i

90 FOR i=1 TO 80

100 LET x=r*x*(1-x)

110 PLOT 200*x,175-z

120 NEXT i

130 NEXT r

4 0 BRIGHT 1: INK 2: BEEP .1,1 50 FOR t=-4.4 TO 4.4 STEP .02 60 LET x=a*5*(t*t-7)+120 70 LET y=.7*a*t*(t*t-7)+86 80 PLOT x,y 90 NEXT t 100 NEXT a 110 BEEP .2,3

OBOI.

10 REM : LET a=10,b=10,s=11

20 BORDER 0: PAPER 2: CLS

30 INPUT "a=",CORNa,"b=",CORNb

40 INPUT "s=",side

50 PRINT #0;AT 1,13,-"OBOI"

60 FOR i=0 TO 255

70 FOR j=0 TO 175

80 LET x=CORNa+(side*i/100)

90 LET y=CORNb+(side*j/100)

100 LET z=x*x+y*y

110 LET c=INT z

120 LET d=c/2

130 LET e=INT d

140 LET f=d-e

150 IF f=0 THEN PLOT INK 1;i,j 160 NEXT j 170 NEXT i

Изменение параметров a, b, s в программе "OBOI" изменяет масштаб и рисунок.

Математическая основа следующих программ "PLANETS" и "MOON" взята из книги: П. Даффет-Смит "Практическая астрономия с калькулятором".

ИФК: В оригинале программы, присланные Юрием, были русифицированы при помощи UDG-символов. Учитывая то, что наши читатели привыкли уже к более сложному, но и более совершенному способу русификации с помощью догружаемого символьного набора, мы провели такую адаптацию, после чего и предлагаем программы читателям РЕВЮ. Думаем, что Юрий не осудит нас за это.

Программа предназначена для работы с дисководом. Тем, у кого его пока еще нет, несколько слов скажем

позже.

PLANETS.

1 GO TO 20

10 BORDER 1: PAPER 1: INK 4: CLEAR 64599 15 RANDOMIZE USR 15619: REM : LOAD "chr"CODE 64600

20 POKE 23606,88: POKE 23607,251

21 PRINT AT 8,7; INK 6;"КАЛЕНДАРЬ ПЛАНЕТ"

22 PRINT AT 10,2; INK 4;"ПРОГРАММИРОВАЛ И АДАПТИРОВАЛ";AT 11,9 ;"ДЛЯ СПЕКТРУМА";AT

13,10;"ЮРИЙ ПЕНЗИН"

23 PRINT AT 17,5; INK 3;"© 1993 ASTRO-SOFTWARE"

2 4 PRINT AT 21,5; INK 2;"НАЖМИТЕ ЛЮБУЮ КЛАВИШУ": PAUSE 0: BEEP .1,7 2 5 LET GR=PI/180

30 LET DATA=1000

40 LET CONV=1500

5 0 LET ATN=2 000

100 LET INORBIT=4 5 0 0

105 LET STAR=4 600

110 LET ROUND=9500

115 LET RD=10

200 CLS : GO SUB DATA

210 RESTORE 250

220 FOR N=1 TO 7: READ A$

230 PRINT AT 4 + 2 *N,3; INK 4;N;"-";A$

240 NEXT N

250 DATA "МЕРКУРИЙ","ВЕНЕРА" 260 DATA "МАРС","ЮПИТЕР" 270 DATA "САТУРН","УРАН" 280 DATA "НЕПТУН"

2 90 INPUT AT 0,3; INK 3;"ВВЕДИТЕ НОМЕР:";N: BEEP .1,7 2 92 PRINT AT 5,0;: INPUT AT 17,0 294 RESTORE 250

2 95 FOR I=1 TO N: READ A$: NEXT I: PRINT AT 4,1; INK 3;A$

300 LET PAR=30 0: RESTORE PAR+N

301 DATA 0.24085, 231.2973, 77.1442128, 0.2056306, 0.3870986, 7.0043579, 48.0941733, 6.74,1.918E-6

302 DATA 0.61521, 355.73352, 131.2895792, 0.0067826, 0.7233316, 3.394435, 76.4997524, 16.92,1.721E-5

303 DATA 1.88089, 126.30783, 335.6908166, 0.0933865, 1.5236883, 1.8498011, 49.4032001, 9.36,4.539E-6

304 DATA 11.86224, 146.966365, 14.00095493, 0.0484658, 5.202561, 1.3041819, 100.2520175, 196.74, 1.994E-4

305 DATA 29.45771, 165.322242, 92.6653974, 0.0556155, 9.554747, 2.4893741, 113.4888341, 165.6, 1.74E-4

306 DATA 84.01247, 228.0708551, 172.7363288, 0.0463232, 19.21814, 0.7729895, 73.8768642, 65.8, 7.7 68E-5

307 DATA 164.79558, 260.3578998, 47.8672148, 0.0090021, 30.10957, 1.7716017, 131.5606494, 62.2, 7.597E-5

308 READ TP,EP,W,EC,AE,I,LV,DR,BL

310 GO SUB INORBIT: LET PLLP=LP: LET PLRV=RV: LET PLAE=AE 315 REM ДЛЯ ЗЕМЛИ

320 RESTORE 325: READ TP,EP,W,EC,AE

325 DATA 1.00004, 98.83354, 102.596403, 0.016718,1

330 GO SUB INORBIT

340 LET RZ=(PLLP-LV): LET PLJ=(ASN (SIN (RZ*GR)*SIN (I*GR)))/GR

350 LET Y=SIN (RZ*GR)*COS (I*GR): LET X=COS (RZ*GR)

360 GO SUB ATN: LET DS=Z+LV: LET MS=LP-DS

370 LET ERV=PLRV*COS (PLJ*GR): IF PLAE>1 THEN GO TO 9000

380 LET CPL=(ATN (ERV*SIN (MS*GR)/(RV-ERV*COS (MS*GR))))/GR: LET CPL=180+LP+CPL: LET ANG=CPL: GO SUB CONV: LET CPL=ANG

381 REM CPL-ГЕОЦЕНТРИЧ.ДОЛГОТА-ЛЯМБДА 390 GO SUB 9200

3 91 REM UPL-ГЕОЦЕНТРИЧ. широта-бэта

400 LET MK=COS (23.441884*GR): LET NK=SIN (23.441884*GR): LET QK=SIN (CPL*GR)

410 LET VK=(ASN (SIN (UPL*GR)*MK+COS (UPL*GR)*NK*QK))/GR

411 REM VK-ДЕЛЬТА

415 PRINT AT 7,1;"ДЕЛЬТА:";: IF SGN VK=-1 THEN PRINT "-";

420 PRINT INT ABS VK;" ГРАД. ";

425 LET XR=(ABS VK-INT ABS VK)*60: LET X=XR: GO SUB ROUND: LET XR=X: PRINT XR;" МИН." 430 LET Y=QK*MK-TAN (UPL*GR)*NK 435 LET X=COS (CPL*GR)

440 GO SUB ATN: LET SK=Z

441 REM SK-АЛЬФА

445 LET SK=SK/15: PRINT AT 9,1; "АЛЬФА:",•INT ABS SK; " ЧАС. ";

450 LET SKR=(ABS SK-INT ABS SK)*60: LET X=SKR: GO SUB ROUND: LET SKR=X

455 PRINT SKR;" МИН."

460 LET DIA=SQR (RV*RV+PLRV*PLRV-2*PLRV*RV*COS ((PLLP-LP)*GR)) 4 65 LET DIAM=DR/DIA: LET X=DIAM: GO SUB ROUND: LET DIAM=X 470 PRINT AT 11,1;"ДИАМЕТ Р:";DIAM;" СЕК."

480 LET FAZ=(1+COS ((CPL-PLLP)*GR))/2: LET X=FAZ: GO SUB ROUND: LET FAZ=X 485 PRINT AT 13,1;"ФАЗА:";FAZ 487 IF FAZ=0 THEN GO TO 510

490 LET MST=(5*(LN (PLRV*DIA/(BL*SQR FAZ)))/LN 10)-27.6

4 95 LET X=MST: GO SUB ROUND: LET MST=X 500 PRINT AT 15,1;"БЛЕСК:";MST; " ЗВ.ВЕЛ."

510 LET NSAN=3 60*R/3 65.2422: LET ANG=NSAN: GO SUB CONV: LET NSAN=ANG 515 LET MSAN=NSAN-3.762863: LET ANG=MSAN: GO SUB CONV: LET MSAN=ANG 520 LET ESAN=360/PI*0.016718*SIN (MSAN*GR)

525 LET ASAN=NSAN+ESAN+2 7 8.83354: LET ANG=ASAN: GO SUB CONV: LET ASAN=ANG 530 LET X=COS (ASAN*GR) 535 LET Y=MK*SIN (ASAN*GR)

540 GO SUB ATN: LET SDELTA=Z: LET X=SDELTA: GO SUB ROUND: LET SDELTA=X

545 LET BSAN=(ASN (NK*SIN (ASAN*GR)))/GR: LET X=BSAN: GO SUB ROUND: LET BSAN=X

550 PRINT AT 17,1;"ДЕЛЬТА СОЛНЦА:";BSAN;" ГРАД."

560 LET SKE=SK*15: LET ELONG=(ACS (SIN (VK*GR)*SIN (BSAN*GR)+COS ((SKE-SDELTA)*GR)*COS (VK*GR)*COS (BSAN*GR)))/GR

5 65 LET X=ELONG: GO SUB ROUND: LET ELONG=X

57 0 PRINT AT 19,1;"ЭЛОНГАЦИЯ:";ELONG;" ГРАД."

580 IF SDELTA<SKE THEN PRINT AT 21,1; INK 2;"ВЕЧЕРНЯЯ ВИДИМОСТЬ" 590 IF SDELTA>SKE THEN PRINT AT 21,1; INK 2;"УТРЕННЯЯ ВИДИМОСТЬ"

600 IF ELONG<=10 THEN PRINT AT 21,1; BRIGHT 1; FLASH 1; INK 2;"СОЕДИНЕНИЕ С СОЛНЦЕМ" 700 BEEP .7,7: PAUSE 0: BEEP .1,7: CLS : GO SUB STAR 900 GO TO 115

1000 REM ЧИСЛО СУТОК С 0.0.1980 1010 DIM D(31)

1020 CLS : LET K=31: LET M=12: LET G=1979: GO SUB 1070: LET D(1)=D 1030 INPUT "ГОД ?",G: BEEP .1,7

1040 INPUT "МЕСЯЦ(1-12) ?",M: BEEP .1,7: INPUT "ЧИСЛО ?",K: BEEP .1,7 1045 LET ME=M: LET GO=G

1050 PRINT AT 3,21; INK 6;K;".";M;".";G: GO SUB 1070 1060 LET R=D-D(1): GO TO 1100 1070 IF M>=3 THEN GO TO 1090 1080 LET M=M+12: LET G=G-1

1090 LET M=M+1: LET C=INT (M*30.6): LET U=INT (G*365.25): LET D=C+U+K-114: RETURN

1100 LET C=INT (D/7): LET DAY=1+D-C*7

1115 RESTORE 1120

1120 DATA "ВОСКРЕСЕНЬЕ"

1130 DATA "ПОНЕДЕЛЬНИК"

114 0 DATA "ВТОРНИК","СРЕДА"

1150 DATA "ЧЕТВЕРГ","ПЯТНИЦА"

1160 DATA "СУББОТА"

1165 LET NK=7: IF DAY=1 OR DAY=7 THEN LET NK=2

1170 FOR J=1 TO DAY: READ D$: NEXT J: PRINT AT 4,21; INK NK;D$

1180 POKE 23658,8: INPUT AT 0,4; INK 3;"ИЗМЕНИТЬ ДАТУ ?(Y/N)";A$: BEEP .1,7

1190 IF A$="y" OR A$="Y" THEN GO TO 1020

1200 RETURN

1500 REM CONV - ПЕРЕВОД УГЛА В 0-360 1510 IF ANG>=0 AND ANG<=360 THEN RETURN 1520 LET ANG=ANG-SGN ANG*360: GO TO 1510 2 000 REM ATN-НЕОПРЕДЕЛЕННОСТЬ ПО ATN

2010 LET Z=(ATN (Y/X)+ACS SGN AT N (Y/X)+ACS SGN Y)/GR: RETURN 4500 REM INORBIT-ПОЛОЖЕНИЕ В ПЛ-ТИ СВОЕЙ ОРБ.

4505 LET NP=360*R/(365.2422*TP): LET ANG=NP: GO SUB CONV: LET NP=ANG: LET SM=NP+EP-W 4510 LET LP=NP+360*EC*SIN (SM*GR)/PI+EP: LET ANG=LP: GO SUB CONV: LET LP=ANG: LET V=LP-W

4515 LET RV=AE*(1-EC*EC)/(1+EC*COS (V*GR)): RETURN

4600 IF SK>=21 AND SK<24 THEN LET U$="Chart1"

4605 IF SK>=0 AND SK<3 THEN LET U$="Chart1"

4610 IF SK>=3 AND SK<9 THEN LET U$="Chart2"

4615 IF SK>=9 AND SK<15 THEN LET U$="Chart3"

4620 IF SK>=15 AND SK<21 THEN LET U$="Chart4"

4625 IF SK>=21 AND SK<24 THEN LET VS=(12 0+(2 4-SK)*4 0)+7

4630 IF SK>=0 AND SK<3 THEN LET VS=((3-SK)*40)+7

4635 IF SK>=3 AND SK<9 THEN LET VS=((9-SK)*40)+7

4640 IF SK>=9 AND SK<15 THEN LET VS=((15-SK)*40)+7

4645 IF SK>=15 AND SK<21 THEN LET VS=((21-SK)*40)+7

4 650 IF VK=0 THEN LET VV=85 4655 LET VV=85+VK*3.15

5000 BORDER 0: RANDOMIZE USR 15619: REM : LOAD U$ CODE 16384 5010 LET G1=255: LET G2=247: LET V1=175: LET V2=171

5 02 0 PLOT 0,0: DRAW G1,0: DRAW 0,V1: DRAW -G1,0: DRAW 0,-V1 5030 PLOT 4,2: DRAW G2,0: DRAW 0,V2: DRAW -G2,0: DRAW 0,-V2 5040 FOR I=47 TO 207 STEP 40: PLOT I,1: PLOT I,174: NEXT I

5050 FOR J=19 TO 151 STEP 33: PLOT 3,J: PLOT 2,J: PLOT 252,J: PLOT 253,J: NEXT J:

PLOT 1,85: PLOT 254,85 5060 LET RD=1: LET X=VS: GO SUB round: LET VS=X 5 07 0 LET X=VV: GO SUB ROUND: LET VV=X 5080 PLOT VS,VV: CIRCLE VS, VV, 2

5990 INPUT "": PRINT #0; INK 4;AT 1,2;A$;"-";K;".";ME;".";GO: BEEP .7,7: PAUSE 0:

BEEP .1,7: BORDER 1 6000 RETURN

9000 REM ВНЕШНЯЯ ПЛАНЕТА

9010 LET MJ=DS-LP: LET CPL=(ATN (RV*SIN (MJ*GR)/(ERV-RV*COS (MJ*GR))))/GR+DS: LET

ANG=CPL: GO SUB CONV: LET CPL=ANG 9020 GO SUB 9200: GO TO 400 92 00 REM ВНУТРЕННЯЯ ПЛАНЕТА

9210 LET UPL=(ATN (ERV*TAN (PLJ*GR)*SIN ((CPL-DS)*GR)/(RV*SIN ((DS-LP)*GR))))/GR:

RETURN 9500 REM ROUND

9505 LET Y=SGN X: LET Z=ABS X*RD*RD+0.5 9510 LET X=INT Z/(RD*RD)*Y: RETURN 9900 RANDOMIZE USR 15619: REM : ERASE "PLANETS" 9910 RANDOMIZE USR 15619: REM : SAVE "PLANETS" LINE 10 Некоторые комментарии:

Самозапись программы происходит по команде RUN 9900 с автостартом со строки 10. При остановке программы во время работы запустить её повторно можно командой RUN.

В строке 15 загружается символьный набор, а переключение на него выполняется в строке 20. Несколько слов о символе "копирайт" (буква 'С' в кружочке). В последнее время мы пользуемся утолщенным русско-латинским символьным набором с некоторыми усовершенствованиями. Дело в том, что по стандарту ASCII в символьном наборе "НС" таблицы КОИ-7 символу "копирайт" соответствует "твердый знак". Поэтому приходится либо иметь в загружаемом символьном наборе "твердый знак" на месте "копирайта", а для печати последнего подключать опять символьный набор ПЗУ, либо отказаться от "твердого знака", заменяя его апострофом (').

Удобным оказался вариант, когда "твердый знак" все же закреплен за "копирайтом" (символом с кодом 127), а образ символа "копирайт" - закреплен за символом с кодом 64 - "@". Последний гораздо реже используется в текстовых сообщениях. Поэтому в листинге программы PLANETS в строке 23 Вы можете видеть символ "@", но при работе программы на экране будет напечатан "копирайт".

Программа снабжена четырьмя графическими экранами, которые мы приводим ниже (они даны в негативном изображении). Вы можете воспроизвести их при помощи ART-STUDIO. В зависимости от результата расчета в строке 5000 происходит загрузка одного из четырех экранов, записанных на диске в виде четырех файлов стандартного для экрана формата (Chart1 - Chart4). Для дисковой версии программы такой вариант еще приемлем, но для кассетной -абсолютно не подходит. Поэтому для обеих версий можем порекомендовать воспользоваться компрессором, который мы приводили в РЕВЮ-93 № 3-4, стр. 61. В результате будем иметь один компактный блок, содержащий четыре скомпрессированных экрана. После выполнения компрессии четырех экранов длина кодового блока вместе с декомпрессором (назовем этот файл: "Chart"CODE) составила всего 3.6 Кб. Это вдвое меньше одного экрана в

обычном формате! Существенная экономия как для дисковой, так и для кассетной версий программы. Для вызова любого экрана надо будет предварительно в ячейку памяти занести его номер.

Для реализации этого способа необходимо изменить Бейсик-строки (см. на следующей странице). "Chart1". "Chart3".

Волопдс * -

+

" »

" * ■ь

Лее:

* -t

+

+ + " *

Девд

к

*

Ворон

♦ * * ГиЭрд

t ВоЗолей „

+ к

Козерог

"Chart2".

нЧТелец

Малый ес *

* + „

н Орел

г. "

Орион ,

** S Змееносец.

Щит-"

, Большой •

Пес ^ **

, Стрелец.

10 BORDER 1: PAPER 1: INK 4: CLEAR 4 9999 12 RANDOMIZE USR 15619: REM : LOAD "Chart"CODE 50000 4600 IF SK>=21 AND SK<24 THEN LET U=1 4 605 IF SK>=0 AND SK<3 THEN LET U=1 4610 IF SK>=3 AND SK<9 THEN LET U=2 4615 IF SK>=9 AND SK<15 THEN LET U=3 4620 IF SK>=15 AND SK<21 THEN LET U=4 5000 BORDER 0: POKE 50001,U: RANDOMIZE USR 50000

В строке 12 загружается скомпрессированный блок с четырьмя экранами.

задание номера экрана, а в строке 5000 - декомпрессия экрана.

* * *

И, в заключение, еще одна программа по астрономии, присланная Юрием Пензиным.

MOON.

1 GO TO 2 0

10 BORDER 1: PAPER 1: INK 6: CLEAR 49999: RANDOMIZE USR 15619: REM

64600

20 POKE 23606,88: POKE 23607,251

22 PRINT AT 7,5; INK 6;" КАЛЕНДАРЬ И ФАЗЫ ЛУНЫ"^ 9,2; INK 4;" ПРОГРАММИРОВАЛ И

АДАПТИРОВАЛ";AT 10,9;"ДЛЯ СПЕКТРУМА",•AT 12,10;"ЮРИЙ ПЕНЗИН"^ 16,5; INK 3;"@ 1993 ASTRO-SOFTWARE" 24 PRINT AT 21,5; INK 2;"НАЖМИТЕ ЛЮБУЮ КЛАВИШУ": PAUSE 0 30 CLS : DIM D(31) 32 LET ROUND=9500

40 LET K=31: LET M=12: LET G=1979: GO SUB 80: LET D(1)=D 50 INPUT "ГОД ?",G

60 INPUT "МЕСЯЦ (1-12) ?",M: INPUT "ЧИСЛО ?",K: INPUT '^^GMT^ МЕСТНОЕ+4 ЧАС,)?";H

строках 4600.. .4620 производится

LOAD "chr"CODE

";G;AT 4,21,•,•H,•"ЧАС .(GMT)": GO SUB 80

(M*30.6): LET U=INT (G*365.25): LET D=C+U+K-114: RETURN

65 PRINT AT 3,21; INK 6;K;".";M;" 7 0 LET R=D-D(1): GO TO 110 80 IF M>=3 THEN GO TO 100 90 LET M=M+12: LET G=G-1 100 LET M=M+1: LET C=INT 110 LET C=INT (D/7): LET DAY=1+D-C*7 120 DATA "ВОСКРЕСЕНЬЕ" 130 DATA "ПОНЕДЕЛЬНИК" 14 0 DATA "ВТОРНИК","СРЕДА"

150 DATA "ЧЕТВЕРГ","ПЯТНИЦА" 160 DATA "СУББОТА" 175 RESTORE 120

180 LET NK=7: IF DAY=1 OR DAY=7 THEN LET NK=2

185 FOR J=1 TO DAY: READ D$: NEXT J: PRINT AT 5,21;" ";: PRINT AT 5,21; INK

NK;D$

190 POKE 23658,8: INPUT AT 0,4; INK 3;"ИЗМЕНИТЬ ДАТУ ?(Y/N)";A$ 200 IF A$="y" OR A$="Y" THEN GO TO 50

210 LET F=R+(H+0.016666)/24: LET N=3 60*F/3 65.2 422: LET ANGLE=N: GO SUB 400: LET N=ANGLE

220 LET M=N-3.762863: LET ANGLE=M: GO SUB 400: LET M=ANGLE 230 LET E=360*0.016718*SIN (M/180*PI)/PI

240 LET J=N+E+2 7 8.83354: LET ANGLE=J: GO SUB 400: LET J=ANGLE 250 LET L=13.176396*F+64.975464: LET ANGLE=L: GO SUB 400: LET L=ANGLE 260 LET K=L-0.111404*F-349.383063: LET ANGLE=K: GO SUB 400: LET K=ANGLE 270 LET Q=151.950429-0.0529539*F: LET ANGLE=Q: GO SUB 400: LET Q=ANGLE 280 LET W=1.2 7 3 9*SIN ( (2*(L-J)-K)/180*PI): LET I = 0.1858*SIN (M/180*PI): LET S=0.37*SIN (M/180*PI)

290 LET V=K+W-I-S: LET A=6.2886*SIN (V/180*PI): LET T=L+W+A-I+0.214*SIN (2*K*PI/180) 300 LET Y=T+0.6583*SIN ((2*(T-J)/180*PI)): LET D=Y-J: LET ANGLE=D: GO SUB 400: LET D=ANGLE

305 LET X=D: GO SUB ROUND: LET D=X

310 PRINT AT 18,0; INK 4;"ВОЗРАСТ=",^;" ГРАД."

320 IF D>=0 AND D<90 THEN PRINT ; FLASH 1; FLASH 1; BRIGHT 1; INK 2;"НОВОЛУНИЕ"

330 IF D>=90 AND D<180 THEN PRINT ; FLASH 1; BRIGHT 1; INK 2;"ПЕРВАЯ ЧЕТВЕРТЬ"

340 IF D>=180 AND D<2 70 THEN PRINT ; FLASH 1; BRIGHT 1; INK 2;"ПОЛНОЛУНИЕ"

350 IF D>=270 AND D<360 THEN PRINT ; FLASH 1; BRIGHT 1; INK 2;"ПОСЛЕДНЯЯ ЧЕТВЕРТЬ"

360 LET MOON=(1-COS (D/180*PI))/2:

3 65 LET X=MOON: GO SUB ROUND: LET MOON=X

370 PRINT ; INK 4;"ФАЗА =";MOON

375 GO TO 1020

400 IF ANGLE>=0 AND ANGLE<=360 THEN RETURN 410 LET ANGLE=ANGLE-SGN ANGLE*3 60: GO TO 400 1020 IF D>=0 AND D<=180 THEN LET SN=1 1030 IF D>180 AND D<=3 60 THEN LET SN=-1 1040 LET PR=2*MOON-1

1050 IF D>=0 AND D<=180 THEN LET FAZ=PR 1060 IF D>180 AND D<=360 THEN LET FAZ=-PR 2 97 0 LET NOV=7

2980 IF D>345 AND D<=360 THEN LET NOV=0 2990 IF D>=0 AND D<15 THEN LET NOV=0 3000 PLOT 225,10: DRAW INK NOV;0,5 0,SN*PI 3010 DRAW INK NOV;0,-5 0,FAZ*PI 3020 PRINT INK 3;"НАЖМИТЕ ЛЮБУЮ КЛАВИШУ" 3030 PAUSE 0: GO TO 30 9500 REM ROUND

9505 LET Y=SGN X: LET Z=ABS X*10*10+0.5

9510 LET X=INT Z/(10*10)*Y: RETURN

9900 RANDOMIZE USR 15619: REM : ERASE "MOON"

9910 RANDOMIZE USR 15619: REM : SAVE "MOON" LINE 10

Структура и русификация программы точно такая же, как и PLANETS. Если будете пользоваться иным способом русификации, то вместо символа "@" в строке 22 наберите "копирайт". Фрагмент работы программы:

18.3.1994 1йчнс.cgmt) ПЯТНИЦЙ

возрнст=67.75

НОВОЛУНИЕ

фпзй = о.31

НАЖМИТЕ ЛЮБУЮ

КЛЙБИЫМ

ОТ РЕДАКЦИИ

Тестируя присланные Юрием программы, мы особенно остро ощутили низкое быстродействие интерпретатора Спектрум-Бейсика. Поэтому со своей стороны можем порекомендовать эти программы не только для получения оригинальных эффектов на экране, но и как наглядное пособие по другой теме - компиляция программ. Компиляция позволяет во много раз поднять быстродействие и ожидание результата у экрана не станет столь томительным.

Надо также сказать, что для компиляции предложенных программ не годятся целочисленные компиляторы (ZX-COMPILER, MCODER-2 и др.), так как вычисления в программах не укладываются в рамки целых чисел. Мы пользовались компилятором TOBOS-FP, который рассчитан на вычисления с плавающей запятой. При этом вся процедура предельно проста: загружаем, компилятор TOBOS, затем Бейсик-программу, затем запускаем компилятор в работу RANDOMIZE USR 53000 - и все. После сообщения "0 0К" можно запускать скомпилированный блок: RANDOMIZE USR 40000. Замеры показывают, что скорость выполнения программ увеличивается более чем в десять раз.

* * *




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Система - Обзор системных программ: копировщик RCOPY v 4.1
Учебник - Стратегия и тактика половой борьбы: Введение.
Дискуссия - Про америку #2.
Введение - От авторов.
ZX-Party — итог горячей и скандальной полемики длиною в год.

В этот день...   23 апреля