48 программ для изучающих Basic - Глава 3 - программа "мини-монитор", программа "домашнее хозяйство, расходы", программа "анализ фурье".

 
48 программ для изучающих Basic

Глава 3 - программа "мини-монитор", программа "домашнее хозяйство, расходы", программа "анализ фурье".


ГЛАВА 4

В данной главе собраны программы более сложные и объемные, чем в
предыдущих главах. Они могут иметь не только учебную, но и некоторую
практическую ценность. Программа-редактор позволит составлять
программы в машинных кодах, программа ведения домашнего хозяйства
поможет вести его более экономно. Однако основное их предназначение
- учебное. Переходя от простого к сложному совершенствуйте Вайю
мастерство.

4.1 ПРОГРАММА "МИНИ-МОНИТОР".

Компьютер SPECTRUM не имеет встроенных средств для написания
программ на языках программирования(кроме БЕЙСИКА) или в машинных
кодах. Для решения такого рода задач созданы различные программные
средства. Для составления программ в машинных код ах для компьютера
SPECTRUM необходима специальная программа-редактор. Наличие в
БЕЙСИКЕ компьютера SPECTRUM инструкций РЕЕК и РОКЕ
позволяет работать с информацией хранящейся в ячейках памяти с
заданным адресом. Поэтому возможно составление программ в
машинных кодах и без использования дополнительных средств, но
программа-редактор позволит работать более эффективно. Такая
программа составленная на БЕЙСИКЕ приведена ниже:

10 CLEAR 32299
20 LOAD"" CODE
100 LET BYTE-900
110 LET ADRESS-2000
120 LET MENU-1000
200 GO TO MENU
300 PRINT" ";
305 LET B-N

310 IF 0-1 THEN GOSUB 9S0

320 Г0-0 THEN PRINT N

330 RETURN

900 REM HEX BYTE

910 LET B-PEEK L

920 LET B1- (INT (B/16)+48)

925 GOSUB 980

930 LET B1-(B-(INT (B/16)*16)+48)

935 GOSUB 980

940 RETURN

950 REM HEX ADRESS

952 LET H-4096

955 LET B1-(INT (B/H)+48)

958 GOSUB 980

960 LET B-B-INT(B/H)*H

965 LET H-H/16

970 IF H>-1 THEN GO TO 955

975 PRINT "H"; TAB 7;

979 RETURN

980 IF Bl>57 THEN LET B1-B1+7
985 PRINT CHRSB1;

989 RETURN

990 CLS
992 LET 1-0

999 RETURN

1000 REM MENU

1010 PRINT TAB 7;"MINI-MONITOR"
1020 PRINT

1030 PRINT TAB 7;"I)NPUT"

1040 PRINT TAB 7;'D)UMP*

1050 PRINT TAB 7;*SJTARr

1070 PRINT TAB 7;"E)ND*

1080 IF INKEYS THEN GO TO 1080

1090 IF INKEYS -T THEN GOSUB 2500

1100 IF INKEYS -*DI" THEN GOSUB 4600

1110 IF INKEYS -"E" THEN GOSUB 3900
1115 IF INKEYS -*S" THEN GOSUB 3000
1120 CLS

1130 GO TO MENU
2000 REM ADRESS
2005 LET D-1
2010 CLS

2020 PRINT "ADRESS:*;
2030 INPUT A$
2040 PRINT AS;

2045 IF A$( LEN A$)-"H" THEN LET D-0: GO TO 2100

2060 LET N-VAL AS

2070 RETURN

2100 LET N-0

2110 FORX-1 TOLENAS-l

2115 LET B-CODE A$(X)-48

2118 IF B>9 THEN LET B-B-7

2120 LET N-N*16+B

2130 NEXT X

2140 RETURN

250Q REM INPUT

2505 LET 1-0

2510 CLS

2520 GOSUB ADRESS

2521 GOSUB 300

2522 LET l-N

2525 PRINT AT 21,1 ;"E)ND ENTERjFORVARD RJETURN"

2527 PRINT AT 2,0;

2530 IF D-1 THEN PRINT L; TAB7;

2532 LET D-L

2535 IF D-0 THEN GOSUB 950
2540 GOSUB BYTE
2550 PRINT" »> ";
2560 INPUT AS

2570 IF AS о "" THEN GO TO 2600

2580 LET L-L+1
2585 PRINT
2587 LET 1-1+1

2590 IF l>18 THEN GOSUB 990

2595 GO TO 2530

2600 IF LEN A$>3 THEN GO TO 2560

2610 IF A$-"R" THEN GO TO 2700

2620 IF A$-"E" THEN RETURN

2625 LET N-0

2630 FOR X-l TOLENAS

2632 LET B- CODE A$(X)-48

2633 IF B>9 THEN LET B-B-7

2634 LET N-N'16+В

2635 NEXT X

2636 LET B-N
2640 GOSUB 920
2650 POKE L,N
2660 GO TO 2580
2700 LET L-L-l
2710 GO TO 2585
3000 REM START
3010 GOSUB ADRESS
3015 GOSUB 300
3020 PRINT USR N
3030 PAUSE 4E4
3040 RETURN

3900 CLS

3910 STOP

4600 REM DUMP

4610 GOSUB ADRESS

4612 GOSUB 300

4615 PRINT AT 20,0;"N)EXT MJENU"

4618 PRINT AT 2,0

4620 FOR S-0 TO 15

4630 IF D-1 THEN PRINT N+S*8; TAB 7;

4632 LET B-N+S*8

4635 IF D-0 THEN GOSUB 950

4640 FOR X-0 TO 7

4650 LET L-N+S*8+X

4660 GOSUB BYTE

4670PRINT' ";:REM2SPASE

4680 NEXT X

4690 PRINT

4692 IF INKEYS THEN GO TO 4692

4695 IF INKEYS -"MTHEN GO TO 4760

4700 NEXT S

4710 PRINT

4740 LET N-L+1

4745 CLS

4750 GO TO 4615
4760 RETURN

Программа 4.1 Программа МИНИ-МОНИТОР.

При запуске программа ожидает ввода с магнитофона программы
в машинных кодах, которую предстоит редактировать. Если необходимо
набирать новую программу, то запуск следует осуществить со строки 100,
выполнив RUN 100. После запуска появляется меню:

MINI-MONITOR

INPUT

DUMP

START

END

Выбирая одну из букв задаем режим работы, в котором будем работать.
Выбрав I входим в режим ввода информации начиная с указанного адреса.
На экране появляется новое меню:

END
ENTER
EORVARD
RETURM

Задается адрес начала программы в десятичном виде и автоматически
вычисляется его шестнадцатиричный эквивалент. Например: 32500
соответствует 7EF4H. После чего на экране появляется адрес,
содержимое ячейки памяти, и приглашение для ввод а новой информации в
выбранную ячейку — >.

32500 21 —>Если набрать, например, ЗЕ, то на экране появится:

32500 21 -->ЗЕ

3250100->

и программа предложит произвести ввод в следующую ячейку памяти.
В случае если нет необходимости изменить содержимое ячейки, то нажав
ENTER можно перейти к ячейке с очередным адресом, а нажав R можно
вернуться к предыдущему и исправить ошибочно введенную информацию.
Быстро просмотреть содержимое области памяти можно выбрав в меню
J2UMP. При этом на экран выводится:

ADRESS 1000Н

4096 9А <Ю D6 С4 38 F9 01 ЕС

4104 C900000000 FFFFFF

Запустить программу с указанного адреса можно выбрав в меню
START. В качестве примера попробуйте с помощью редактора ввести в
память компьютера и выполнить короткую программу в машинных кодах.
При выполнении эта программа выводит на экран цифру.

ЗЕ 01 LD А,1
С6 01 ADD АЛ
4F LDC,A

06 00 LD В,0
С9 RET

В левом столбце приведены машинные коды, а в правом мнемонические
обозначения этих команд. В память компьютера, естественно, вводятся
только машинные коды.

После окончания пользования редактором выберите в меню E)ND для
возвращения в БЕЙСИК.

4.2 ПРОГРАММА "ДОМАШНЕЕ ХОЗЯЙСТВО,
РАСХОДЫ**.

Следующая программа позволяет подсчитывать расходы

при ведении домашнего хозяйства. При запуске программы на экран
выводится следующая картинка:

MONTH: JAN

SUM 135.50

RENT

TRANSPORT

ENERGY 125.00

FOOD

RELAXATION 10.50

BILL-1

BILL-2

ETC

END

MONTH

RESULT

В этом меню предусмотрены основные виды расходов, атакже некоторые
управляющие слова. Например для выбора нового месяца необходимо
набрать:

MONTH FEB

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

ENERGY 125.00

BILL-1, BILL-2 - счета состоящие из нескольких статей затрат. При
их выборе в главном меню на экране появляется подменю, работа с
которым ведется по прежним правилам.

При выборе RESULT подводится итог по всем статьям затрат завесь год.

Названия расходов выбраны условно, поэтому Вы можете в программе
д ать им и другие названия.

Работа программы эквивалентна заполнению таблицы
расходов:

Каждой клеточке таблицы в программе соответствует элемент массива
К(13,9).

100 DIM А$(4,10): DIM В$(5,10)
110 DIM К$(24,10): DIM V$(1,10)
115 DIM l$(20)
120 DIM А(13,3): DIM В{13,5)
130 DIM K{13,9)

140 LET LK-24: LET V-4: LET M-1
145 LET L$-'
150 LET ERR-9000
200 LET K$(1)-*SUM*
210 LET K$(2)-'RENT
220 LET K$(3)-TRANSPORr
230 LET K${4)-*ENERGY"
240 LET K$(5)-"FOOD"
250. LET K$(6)-*RELAXATION"
260 LET K$|7)-"BILL-r
270 LET K$(8)-"BILL-2"
280 LET K$(9)-"ETC."
290 LET K$(10)-"END"
295 LET K$(11)-"MONTH"
297 LET K$(12)-'RESULr
300 LET A$(1)-"POST"

aioiETMPKSCHOOi'

320 LET A$|3)-"SPORr

325 LET A$(4)-"RETURN"

350 LET B$(l)-"TELEFONE"

360 LET В$|2)-'МЕАГ

370 LET B${3)-"GREENS"

380 LET B$|4)-*CLOTHES"

390 LET B${5)-"SHOP"

395 LET K$(13)-"JAN"

400 LET K$|14)-"FEB"

405 LET K$(15)-"MAR"

410 LET K$(16)-"APR"

415 LET K$(17)-*MAY"

420 LET K$(18)-"JUN"

425 LET K$|19)-"JUL"

430 LET K$(20)-"AUG"

435 LET K$(21)-"SEP"

440 LET К$(22)-"01СГ

445 LET K$(23)-"NOV*

450 LET K$(24)-*DEC"

500 CLS: IF M-13 THEN LET M-1

502 LET N-M+12

505 PRINT AT 0,2;"MONTH: ";IC$(N)

510 PRINT AT 2,9,K$(1)

520 FOR 1-2 TO 12

530 PRINT AT l+V,2;K$(l): NEXT I

550 FOR N-2 TO 9

555 LET W-K(M,N): GOSUB 1400

560 NEXT N

565 LET W-K(M,1): LET N--2: GOSUB 1400

599 GO TO 1000

1000 INPUT T;l$

1005 PRINT AT 20,0;L$

1010 LETL-LEN 1$

1020 FOR 1-1 TO L

1030 IF l$flK * THEN GO TO 1100

1040 NEXT I

1050 GO TO ERR

1100 LET V$(1H$(TO И)

1110 FOR N-1 TOUC

1120 IF V$(1)-K$tN) THEN GO TO 1200

1130 NEXT N

1140 FOR N-1 TO 4

1150 IF V$(1)-A$N THEN GO TO 2100

1160 NEXT N

1170 TOR N-1 TO 5

1180 IF V$(1)-B$(N) THEN GO TO 3100

1190 NEXT N

1199 GOTO ERR

1200 IF V$(l,1 TO 3KEND* THEN STOP

1201 IF V$(1,1 TO 3j-"RES" THEN GO TO 1700

1202 IF V$(1,1 TO 3KMON" THEN GO TO 1500
1204 IF V$(1,1 TO 3J-m* THEN GO TO 1600
1206 GOSUB 1210

1208 GO TO 1260

1210 IF M-13 THEN GO TO ERR

1215 IF N-1 OR N>12 THEN GO TO ERR

1220 LET H+1

1230 FOR X TO I

1240 IF l$(4-V THEN LET l$(JH$(J<-1):

LET l$(JHH5(M): IET l$(*2K'

1250 NEXT i RETURN

1260 IET W-VAl t$(l TO 1-1)

1270 LET KHN-KHN+W

1280 LET K(13,NK(13,NH-W

1290 LET K(M,1H4M.1)+W

1295 LET iqi3,iHqi3,iH-w

1300 LET W-KHN): GOSUB 1400

1310 LET W-K(M,1): LET N-2: GOSUB 1400

1320 GO TO 1000

1400 LET l$- STR$ W: LET L- LEN (STR$W): LET L-L+1
1405 IF L<3 THEN GO TO 1430
1410 LET l$(L)-l$(L-1): LET l$(L-1)-l$fl.-2J:

LET l$(L-2J-V
1420 PRINT AT N+V, 30-L;I${TO L)
1430 RETURN

1500 LET V$(1H$fl+1 TOL)

1510 FOR N-13 TO 24

1520 IF V$(1K${N) THEN GO TO 1560

1530 NEXT N

1550 GO TO ERR

1560 LET M-N-12: GO TO 500

1600 IF M-13 THEN GO TO 1800

1605 LET W- VALK$(N,6)

1610 CLS: LET N-M+12

1620 PRINT AT OA-MONTH*: *;K$(N)

1650 LET W-W+l: GO TO 1000*W

1700 CLS: PRINT AT 0,2;K$(12)

1710 LET M-13: GO TO 510

1800 CLS: PRINT AT 0,2;K$(12)

1810 LET W-VAL K$(N,6)

1820 LET W-W+1: GO TO 1000*W

2000 PRINT AT 2,9;K$|7)

2010 FOR 1-1 TO 4

2020 PRINT AT l+V,2;A$(l)

2030 NEXT I

2040 FOR N-1 TO 3

2050 LET W-A|M,N): GOSUB 1400

2060 NEXT N

2070 LET W-K(M,7): LET N-2:GOSUB 1400
2080 GO TO 1000

2100 IF V$(l,l TO 3)-'REr THEN GO TO 500

2105 GOSUB 1210

2110 LET W- VAL l$(l TO L-1)

2130 LET A|M,N)-A|M,N)+W

2140 LET A(13,N)-A(13,N)+W

2145 LET K(M,lhK|Mfl)+W

2150 llET K|M,7)-K|M(7)+W

2155 LET K(13,7)-K(13,7)+W

2157 LET K|13,1K(13,1)+W

2160 LET W-A|M,N): GOSUB 1400

2170 LET W-K(M,7): LET N-2: GOSUB 1400

2180 GO TO 1000

3000 PRINT AT 2,9;K$(8)

3010 FOR hi TO 5

3020 PRINT AT l+V,2;B${l)

3030 NEXT I

3035 PRINT AT 10,2;A$(4)

3040 FOR N-1 TO 5

3050 LET W-B(M,N|.<30SUB 1400

3060 NEXT N

3070 GO TO 1000

3100 IF V$(1,l TO 3)-*RET THEN GO TO 500
3105 GOSUB 1210
3110 LET W-VAL l$(l TO L-1)
3130 LET B(M,N|-B(M,NJ+W
3140 LET B(13,Kfl-B|l 3,N)+W
31 $0 LET K(M,8)-K(M,8)+W
3155 LET K(13,8HC(13,8)+W
3157 LET K(13,1)-K(13,1)+W
3160 LET W-B(M,N): GOSUB 1400
3170 GO TO 1000
9000 PRINT AT 20,0;V$(1);" V
9020 GO TO 1000
Программа 4.2Программа "Домашнеехозяйство. Радходы".

4.3 ПРОГРАММА "АНАЛИЗ ФУРЬЕ".

Программа выполняющая анализ Фурье.

Анализ Фурье основываетсянатом, что любую периодическую функцию
можно представить в виде суммы гармоник и постоянной составляющей:

т - с(0) +SUMM (s(n)Sin nwt + с(п) Cos nwf),

где

я от нт1 до я"Л

Поскольку формула представления произвольной периодической
функции известна, то анализ сводится к вычислению коэффициентов
с(0), s(n) и с(п). В программе приведенной ниже производится
вычисление коэффициентов для трех типов функций:

1. Периодическая линейно-возрастающая функция.

2. Периодическая линейно-возрастаюгцая функция с возвращением
к нулю.

3. Функция типа "меандр".

Рассмотрим более подробно функцию третьего типа. График этой
функции на интервале одного периода приведен на рисунке 4.1:

В программе зад ается количество точе к на исходном графике
функции через которые должна пройти кривая построенная
по найденным коэффициентам. Известно, что поставленная
задача имеет решение, если выполняется условие:

NP > NH*2+1>

где

NP - число точек
NH - число гармоник
В данном случае выбрано NP=16, NH=7

После выполнения вычислений на экран выводится таблица вида:

a cos sin

0 0 0

1 0 0.9426

2 0 0

3 0 0.2806

4 0 0

5 0 0.1252

6 0 О

7 0 0.0372

Далее выводится гистограмма амплитудных значений гармонических
составляющих:

Наконец на экране вычерчиваются трафики гармоник и трафик их
суммы, приближенный по своему виду к исходной функции.

20 CIS: PRINT AT 1,2;TOURIER ANALYSE*
22 PRINT AT 3,2;*1.EXAMPLE *

24 PRINT AT 4,2;"2 EXAMPLE "
26 PRINT AT 5,2;"3.EXAMPLE "

28 PRINT AT 7,2;"INPUT 1/2/3"

29 PRINT AT 9,2;"END"

30 INPUT N

31 IF N<1 OR N>3 THEN STOP

32 GO TO 100*N

45 CLS

46 PRINT "

47 PRINT -

48 PRINT -

49 PRINT" NP>2*NH+1 "

50 INPUT "NUMBER OF HARMONICS - ",NH
60 INPUT "NUMBER OF POINTS - ",NP

70 DIM F(NP+1) DIM S(NP+1): DIM C(NP+1)

75 IF NP<2*NH+1 THEN GO TO 50

80 RETURN

100 REM 1

110 GOSUB 45

115 LET F(1)--1: LET DY-2/NP

120 FOR 1-2 TO NP

125 LET F(I)-F(M)+DY: NEXT I

130 LET F(1)-0: LET F(NP+1)-F(1)

140 GO TO 500

200 REM 2

205 GOSUB 45

210 DIM F(NP+1)

215 LET F(1)-0- LET DY-2/NP

220 FOR 1-2 TO NP/2

225 LET F(I)-F(M)+DY: NEXT I

230 LET F(NP/2+1)-0.5

235 FOR l-NP/2+2 TO NP+1

240 LET F(IJ—0:NEXT I

250 GO TO 500

300 REM 3

305 GOSUB 45

310 LET F(1)—0: LET F(N/2+1)-0

315 LET F(NP+1H>

320 TOR 1-2 TO NP/2

325 LET F(I)-0.75:NEXT I

330 FOR l-NP/2+2 TO NP

335 LET F(l)--0.75: NEXT1

340 GO TO 500

500 REM FOURIER -ANALYSE

502 CIS

505 PRINT AT 1,2;*N"; AT 1,10;"COS"; AT 1,20;"SIN"

510 LET Z-2/NP: LET P-0

520 LET CI-COS (Z*PI): LET SI- SIN (Z*PI)

530 LET C-1: LET S-0; LET P-0

540 LET U1-0: LET U2-0

550 LET N-NP

560 LET U0-F(N)+2*C*U 1-U2

570 LETU2-U1: LET U1-U0: LET N-N-1

580 IF N-1 THEN GO TO 600

590 GO TO 560

600 LET A-Z*(F(1)+C*U1-U2)

610 LET B-Z*S*U1

615 LET EPS-1E-6

620 IF ABS (A)<EPS THEN LET A-0

630 IF ABS |B)<EPS THEN LET B-0

632 LET J-10000

634 LET A-INT (/A)/! LET C(P+1)-A
636 LET B-INT (ГВ)/>. LET S(P+1)-B
638 IF P-0 THEN LET A-A/2
640 PRINT AT P+3,2;P; AT P+3,10A
AT P+3,20;B

650 IF P-NH THEN GO TO 900

660 LET Q-Cl *C-S1 *S

670 LETS-CrS+SrC

680 LET C-Q: LET P-P+1: GO TO 540

900 GOSUB 1990

999 IF INKEYS-" THEN GO TO 999

1000 REM SPECTR.UNE
1010 CLS

1012 PRINT AT 1,2;*FOURIER KOEFF."

1015 PRINT AT 3,2;'SINUS';AT 3,16;"COSINUS'

1020 PLOT 10,30: DRAW 100,0

1040 PLOT 130,30: DRAW 100,0

1060 FOR 1-0 TO NH

1070 PLOT 10*1+10,30: DRAW 0,100*ABS S|l+1)

1080 NEXT I

1090 FOR 1-0 TO NH

1100 PLOT 10*1+130,30:DRAW 0,100*ABS C(l+1)
1110 NEXT I
1115 GOSUB 1900

1120 IF INKEYS THEN GO TO 1120
1200 REM
1210 CIS

1220 PLOT 20,95: DRAW 180,0

1230 LET C(1)-qi)/2

1240 FOR P-1 TO NH

1250 IF S(P)-0 THEN GOTO 1310

1260 FOR 1-0 TO 360 STEP 5

1270 LET Y-S(P)*SIN (|P-1)*2*P11/360): LET Y-Y*70+95

1280 LET X- INT (1/2+20)

1290 PLOT X,Y

1300 NEXT I

1310 IF C(P)-0 THEN GO TO 1390

1320 FOR 1-0 TO 360 STEP 5

1330 LET Y-qP)*COS |(P-1)*2'PI '1/360): LET Y-Y*70+95

1340 LET X- INT (1/2+20)

1350 PLOT X,Y

1360 NEXT I

1390 NEXT P

1392 GOSUB 1990

1395 IF INKEYS-" THEN GO TO 1395
1400 REM SUMM
1410 CLS

1415 PRINT AT 1,2;"SUMM"

1420 PLOT 20,95:DRAW 180, 0

1430 FOR 1-0 TO 360 STEP 5

1440 LET Y-0

1450 FOR P-1 TO NH

1460 LET Vy-{P-1)*2*PI 4/360

1470 LET Y*Y+S(P)*SIN W+C(P)* COS W

1480 NEXT P

1490 LET Y-INT (Y'70+95): LET X- INT (1/2+20)

1500 PLOT X,Y

1510 NEXT I

1520 LET X-180/NP

1530 LET Y-F(11*70+95

1535 LET XP-20

1540 PLOT XP,Y

1550 FOR 1-2 TO NP+1

1560 LET Y1 -Y: LET XI -XP

1570 LET XP-F(l)*70+95

1575 LET XP- INT (X'(l-l)+20.5)

1580 DRAW XP-X1,Y-Y1

1590 NEXT I

1600 GOSUB 1990

1610 IF INKEYS-" THEN GO TO 1610

1620 GO TO 20

1990 PRINT AT 20,2;"CONTINUE Г: RETURN

1999 STOP

2000 FOR 1-1 TO NP+1
2010 PRINT F(l)

2020 NEXT I
Программа 4.3 Программа "Анализ Фурье".




СОДЕРЖАНИЕ:


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

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