/
Теги: программирование программное обеспечение язык программирования basic пособие для программистов zx spectrum издательство солон
ISBN: 5-85954-006-X
Год: 1993
Текст
МОСКВА 1993 СОЛОН
«♦СОЛОН» предлагает:
Серия книг «Игры для спекгрума» (пять выпусков по 500 описаний игр)
Приложения к описаниям игровых программ:
- Лабиринт;
- Тайники ZX и как установить вечную жизнь.
Описание языков программирования для ZX SPECTRUM:
-BASIC;
-АССЕМБЛЕР.
Инструкции по эксплуатации ZX SPECTRUM:
-48 К;
- Пользователям 128 К.
Справочник «Системные программы» для Spectrum 48 К.
Справочник для Spectrum 128 К.
Справочник по новым транзисторам (в 2-х выпусках).
48 программ для Изучающих бейсик.
Электронные устройства для ZX Spectrum.
Пособия:
- MONS 3, GENS 3;
- MONS 4, GENS 4;
- Наладка и ремонт Пентагон 128К;
- Ремонт дисководов «Электроника МС 5305», «Электроника МС 5311»;
- Копировщики;
- TR DOS, Moa-service, Disk Doctor;
- ВГ 93 (описание работ).
Готовятся к выпуску в ближайшее время и другие описания и пособия.
Также наши книги можно приобрести в следующих магазинах города Москвы: ГУМ, ЦУМ, «Детский мир», «Зенит», ЦДК на Арбате, «Книжный мир» на улице Кирова, Универмаге «Московский», «СКИТ», «Старт-сервис» на Ленинском проспекте и др.
По вопросам оптового приобретения продукции фирмы обращаться по телефонам:
(095) 563-4520 (с 9.00 до 22.00)
ISBN 5-85954-006-Х ©"СОЛОН'
Если Вы являетесь обладателем компьютера "SINCLAIR ZX SPECTRUM" или программно совместимого с ним и хотите освоить программирование на языке БЕЙСИК, то сборник "48 ПРОГРАММ" поможет Вам в этом.
Можно изучать программирование (в том числе и на языке БЕЙСИК) по учебникам, но если нет доступа к компьютеру, то успехи вряд ли будут значительными. Наличие же компьютера значительно облегчает обучение и делает его приятным и увлекательным. Изучение готовых программ наиболее эффективный способ освоения БЕЙСИКА. Важнейшим элементом всякого обучения является контроль за правильностью восприятия материала. Обычно этим занимается учитель. Если Вы занимаетесь самостоятельно, то Вам поможет компьютер: внося те или иные изменения в программу и наблюдая $а ее выполнением, можно самому оценить насколько правильно понята ее работа.
Необходимо учитывать, что вмешательство в чужую программу может не повлиять на ее работу или повлиять, но незначительно, и, напротив, может привести к разрушению программы или "зависанию компьютера. Однако не стоит слишком сильно опасаться - никакая программа, даже самая "неправильная", не испортит компьютер. Если произошло разрушение программы, то необходимо набраться терпения, загрузить программу заново и продолжить исследования. Хорошо,если программа до запуска быласохранена на кассете или дискете-это сбережет Вам массу времени. Набрать на клавиатуре все приведенные в книге программы достаточно утомительно, д а и ошибки при этом практически неизбежны, поэтому целесообразно приобрести кассету или дискету с записанными программами и не тратя времени начать осваивать БЕЙСИК.
Самое безобидное вмешательство в чужую программу - изменение текста заключенного в кавычки. Работу программы это не нарушит, но изображение на экране может изменить до неузнаваемости, особенно если Вы забудете о существовании графического режима. После успешного освоения этой процедуры стоит попробовать вносить изменения и в Же части программ, запуская ее каждый раз и наблюдая за результатами ы. Научившись использовать хотя бы несколько команд попробуйте составить свою программу или усовершенствовать приведенные в книге программы - добавьте в программу звук, создайте более совершенное изображение, выведите на экран пояснительные надписи, итакдалее. Как бы ни возросло со временем Ваше мастерство в написании программ, не стоит отказываться от исследования чужих программ: это позволит Вам всегда быть в курсе новых идей в программировании.
Данная книга не является описанием языка БЕЙСИК. Поэтому, в дополнение к ней, желательно приобрести справочник по языку выпущенный нами ранее.
ICOtlOHl
4
ГЛАВА 1
В этой главе собраны простые программы, демонстрирующие возможности компьютера. Программы снабжены подробными комментариями, что облегчает их изучение.
1.1 ФОРМИРОВАНИЙ СИМВОЛОВ НА ЭКРАНЕ.
80CLS
90 INPUT ’CODE-’Л
95 LET А-А-32: LET А-А*8
100 FOR 1-15616+А ТО 15623+А
110 LET Z-PEEK I
120 LET Р-128
130 IF Z<P THEN LET В-0
140 IF Z>- P THEN LCT B-1
150 PRINT B;
155 IF B-1 THEN LET Z-Z-P
160 LET P-P/2
170 IF P >-1 THEN GOTO 130
180 PRINT
190NEXTI
200 INPUT ’NEXT? 1-YES 0-NO’;C
210 IF C-1 THEN GOTO 80
Программа 1.1 Формирование символов.
как формируется изображение символов на экране. Задав код символа (начиная с 32) получаем изображение на экране (например для символа А:
00000000 0 0 11110 0 0 1 0 0 0 0 1 0 0 1 0 0 0 0 1 0
0 1111110
0 1 0 0 0 0 1 0 01000010 00000000
Рис.1.1
Как видно на рисунке изображение формируется в вида матрицы 8x8 точек (пикселов). Каидой строке символа соответствует байт в памяти компьютера. Для хранения целого символа требуется 8 байт, адреса которых расположены последовательно, начиная с адреса 15616.
Как работает программа?
В строке 90 производится ввод кода символа.
В строке 95 вычисляется адрес байта, формирующего первую стоку выбранного символа.
В отроке 100 записан цикл, обеспечивающий последовательное обращение к байтам, формирующим все 8 строк изображения символа.
В строке НО производится выборка значения соответствующего байга.
В строках 120-170 производится вывод на экран значения выбранного байта в двоичном вида.
В строке 180 подготавливается вывод нулей и единиц на следующей строке экрана.
Строки 200-210 позволяют вывести изображение следующего символа.
1.2 ПРЕОБРАЗОВАНИЕ ДВОИЧНОГО КОДА В ДЕСЯТИЧНЫЙ.
500LETZ-0
510 FOR 1-0 ТО 7
520 INPUT *N-’;N
523 IF N>1 THEN GO TO 520
525 PRINT N;
530 LET Z-Z+(2*(7-l))*N
540 LET Z- INT (Z+0.5)
550 NEXT I
560 PRINT’ ’;Z
599 STOP
Программа 1.2 Преобразование двоичного кода в десятичный.
Программа предназначена для преобразования 8-оазрядных двоичных чисел в десятичные. Такое преобразование необходимо многократно выполнять при программировании графических символов отличных от стандартных. Как это делается будет показано в следующем разделе. Работает программа преобразования кодов следующим образом. В ответ на запрос программы п= необходимо набрать 8 нулей и единиц, начиная
со старшего разряда. После ввода восьмойцифрыбудетвыведенодесятичное значение числа. Например:
00000011 3
11000011 195
1.3 "МОНСТР".
В БЕЙСИКЕ ZX SPECTRUM предусмотрена замечательная возможность -программирование графических символов пользователем. Такими символами могут оьггь буквы национального алфавита Или любые другие изображения.
Технология создания изображения нового символа следующая. Сначала на клетчатой бумаге рисуется требуемый символ размером 8x8 клеток, подобно изображению символа А на рис. 1.1. Далее с помощью программы 1.2 вычисляется десятичное значение каждой строки символа. Для хранения каждого символа в памяти отводится 8 байт, расположенных последовательно.
В эти 8 байт нужно поместить информацию (численное значение) о строках создаваемого символа, начиная с верхней. За каждой клавишей закреплены соответствующие 8 ячеек в оперативной памяти. Выбрав клавишу, которой будет соответствовать созд аваемый символ, необходимо определить адреса где будет храниться информация о его изображении. Выполнив PRINT USR"A" Вы узнаете адрес первой из восьми ячеек памяти отведенных для хранения изображения соответствующего клавише А (65368). Нетрудно догадаться, что для создания графического изображения размером больше 8x8 точек можно использовать несколько запрограммированных соответствующим образом клавиш. В следующей программе, рисующей забавного монстра, используется 12 клавиш от А доЬ. КлавишаА, например, программируется для создания изображения:
00000000 0
0 0 0 0 0 0 0 1 1
0 1 1 0 0 0 0 0 96
0 0 1 1 0 0 0 0 48
0 0 0 1 1 0 0 0 24
0 0 0 0 1 1 0 1 13
0 0 0 0 0 0 1 1 3
0 0 0 0 0 1 1 1 7
Выполнив программу 1.3, Вы увидите как запрограммированы остальные клавиши. Не забывайте, что символы A-L необходимо в строках 210-230 вводить в графическом режиме (курсор G).
100 FOR HJSR "А* ТО USR'M’-l
110 READS: POKE 13
120 NEXT I
200 OS
210 PRINT AT 0,0;"ABCD'
220 PRINT AT 1,0;’EFGH-
230 PRINT AT 2,0;W
999 STOP
1000 DATA 0,1,96,48,24,13,3,7
1005 DATA 0,129,139,63,127,255,255,135
1010 DATA 0,129,130,252,254,255,255,225
1015 DATA 0,128,6,12,24,176,160,224
1020 DATA 7,15,15,15,7,7,3,1
1025 DATA 3,3,3,7,207,255,255,255
1030 DATA 192,192,192,224,243,255,255,255
1035 DATA 224,240,240,240,224,224,192,128
1040 DATA 1,1,7,15,15,3,0,0
1045 DATA 255,159,224,248,252,240,0,0
1050 DATA 255,249,7,31,63,31,0,0
1055 DATA 128,128,224,240,240,192,0,0
Программа 1.3 "Монстр".
Запустите программу выполнив RUN. В левом верхнем углуувидите изображение монстра. Выведите на эпмн листинг программы и обратите внимание как изменились строки 210 * 230.
1.4 ДВИЖУЩИЙСЯ "МОНСТР".
Простая модификация программы 1.3 демонстрирует принцип создания движущихся изображений на экране. Принцип этот прост: на место одной картинки выводится измененная (или смещенная в каком либо направлении) и делается пауза на требуемое время. В данной программе пауза формируется в строке 290 с помощью цикла. Изменяя количество щюхождении цикла (в д анном случае начальное значение 50) можно регулировать длительность паузыи, следовательно,
100 FOR l-USR "А* ТО USR 'М*-1
110 READS:РОКЕ 13
120 NEXT I
130 TOR l-USR ’M’ TO USR ’Q'-l
140 READS: POKE l,S
150 NEXT!
200 CIS
210 PRINT AT 0,0;"ABCD'
220 PRINT AT 1,0;"EFGH"
230 PRINT AT 2,0;’IJKL"
250 FOR N-1 TO 50: NEXT N
260 PRINT AT 0,0;’ABCD*
270 PRINT AT 1,0;’EMNH’
280 PRINT AT 2,0;’IOPL’
290 FOR N-1 TO 50: NEXT N
300 GOTO 210
999 PAPER 7: INK 0: STOP: CIS: LIST
1000 DATA 0,1,96,48,24,13,3,7
1005 DATA 0,129,139,63,127,255,255,135
1010 DATA 0,129,130,252,254,255,255,225
1015 DATA 0,128,6,12,24,176,160,240
1020 DATA 7,15,15,15,7,7,3,1
1025 DATA 3,3,3,7,207,255,255,255
1030 DATA 192,192,192,224,243,255,255,255
1035 DATA 224,240,240,240,224,224,192,128
1040 DATA 1,1,7,15,15,3,0,0
1045 DATA 255,159,224,248,252,240,0,0
1050 DATA 255,249,7,31,63,31,0,0
1055 DATA 128,128,224,240,240,192,0,0
1100 DATA 3,3,3,7,207,255,224,224
1110 DATA 192,192,192,224,243,255,7,7
1120 DATA 224,159,224,248,252,240,0,0
1130 DATA 7,249,7,31,63,31,0,0
Программа 1.4 Движущийся "монстр*.
1.5 ДВИЖЕНИЕ "МОНСТРА" ПО ГОРИЗОНТАЛИ.
Программа 1.5 генерирует движущееся по горизонтали изображение монстра. Запускать ее можно только после объединения программ 1.3 и 1.5 с помощью MERGE в одну. В этой программе каждая последующая картинка выводится на экран со смещением на одно знакоместо по горизонтали, после чего формируется пауза. (Строки250, 290). Начальная позиция по горизонтали - 0, конечная позиция-26. Конечная позиция зависит от ширины картинки и выбирается так, чтобы при движении картинка не выезжала за край экрана. В нашем случае крайня* правая позиция вычисляется так: 31-6=26. Важным моментом является наличие пробелов слева и справа от изображения, что обеспечивает стирание предыдущей картинки последующей, сдвинутой на одно знакоместо.
200 CIS
205 PAPER 4: INK 2
208 FORU-0TO26
210 PRINT AT 0,U;" ABCD '
220 PRINT AT 1,U;W EFGH '
230 PRINT AT 2,U;’ IJKL*
250 FOR N-l TO 10 : NEXTN
255 NEXTU
259 FOR U-26 TO 0 STEP-1
260 PRINT AT 0,U;* ABCD *
270 PRINT AT 1,U;* EFGH *
280 PRINT AT 2,U;*IJKL*
290 FOR N-l TO 10: NEXTN
295 NEXTU
299 GOTO 208
Программа 1.5 Движение "монстра" no горизонтали.
1.6 УПРАВЛЕНИЕ ДВИЖЕНИЕМ "МОНСТРА”.
В следующей программе можно управлять направлением перемещения монстра. Назначение клавиш:
5 - влево
6 - вниз
7 - вверх
8 - вправо
Программу 1.6 также необходимо объединить с программой 1.3. В строках 300 - 360 определяется какая клавиша нажата и делается соответствующее изменение параметров v и и. Подпрограмма (строки 208 - 255) обеспечивает вывод изображения на экран и формирование паузы определяющей скорость перемещения по экрану. В строке 355 выполняется ожидание нажатия любой клавиши.
200 CIS
205 PAPER 4: INK 2; GOTO 300
208 PRINT AT V-1,U;W *
210 PRINT AT V+0,U;* ABCD ’
220 PRINT AT V+1,U;" EFGH *
230 PRINT AT V+2,Uf IJKL ’
240 PRINT AT V+3,U;’ *
250 FOR N-1 TO 10: NEXT N
255 RETURN
300 LET V-1: LET U-0: GOSUB 208
310 IF INKEYS -"5" THEN LET U-U-1
315 IF U<0 THEN LET U-0
320 IF INKEYS-*6" THEN LET V-V+1
325 IF V>17 THEN LET V-17
330 IF INKEYS-*7* THEN LET V-V-1
335 IF V<1 THEN LET V-1
340 IF INKEYS-’8’THEN LET U-U+1
345 IF U>26 THEN LETU-26
350 GOSUB 208
355 IF INKEYS-” THEN GOTO 355
360 GOTO 310
Лродюмма 1.6 Управление движением "монстра".
В отроках 208 и 240 на экран выводится б пробелов. Этот прием позволяет стирать предыдущую картинку при выводе новой, смещенной на одну позицию на экране по вертикали. Аналогичным целям служат пробелы до и после символов ABCD EFOH DKL в отроках 210 - 230.
1.7 ТРАЕКТОРИЯ ПАДАЮЩЕГО ТЕЛА.
Программа 1.7 дает наглядное представление о движении свободного падения. Свободное падение описывается
формулами:
P-GT+F9
Y-G/l'T^+VO'T+YO
,где
VO - начальная скорость
G - ускорение свободного падения
V - скорость
Т - время
Y - координата Y
Y0 - начальная координата Y Системакоординат, в которой будемрассматриватьдвижение свободного падения:
Следующая программа программа демонстрирует равноускоренное движение свободно падающей точки. В строке 130 задается масштаб по вертикали: s=175/yO, где 175 - число строк по вертикали. Изображение фиксируется через каждые 0,3 сек. (строка240) на экране. Все положения падающей точки от у=2000т до От остаются на экране. Вычисление положения точки выполняется в строке 210, а вывод ее на экран в строке 220. В строке 230 проверяется не стало ли вычисленное значение у меньше 0.
100 LETYO-2000: LETV0-0
110 LET G—10: LET Т-0
120 LET H-YO
130 LET S-175/Y0
140 CLS
210 LETY-G/2TT+V0T+Y0
220 PLOT 125,Y*S
230 IF Y<-0 THEN STOP
240 LET T-T+0.3
250 GOTO 210
Программа 1.7 Траектория падающего тела.
1.8 ВЛИЯНИЕ НАЧАЛЬНОЙ СКОРОСТИ.
Программа 1.8 позволяет исследовать как влияет изменение начальной скорости на движение брошенного вертикально вверх тела. На' экране вкаждыймомент времени есть изображение только одной точки, каждая предощущая стирается в строке 215, так как на экран выводится инверсное ее изображение. При скорости v0>200 точка достигает верхнего края экрана.
100LETY0-0:
102 INPUT *V0-’;V0
110 LET G—10: LET Т-0
120 LET H-Y0
130 LET S-175/2000
140 CIS
210 LETY-G/2*T*T+V0*T+Y0
215 PLOT INVERSE 1;125,H*S
220 PLOT 125,Г5
225 LET H-Y
230 IF Y<0 THEN STOP
240 LET T-T+0.3
250 GOTO 210
Программа 1.8 Влияние начальной скорости.
1.9 ВЛИЯНИЕ ГОРИЗОНТАЛЬНОЙ НАЧАЛЬНОЙ СКОРОСТИ.
_______ Программа 1.9 демонстрирует свободное движение тела при наличии горизонтальной и вертикальной составляющих
1солонШ| начальной скорости. Такое движениеописывается формулами: КЖВ Vy--G*T+Vy0
i r il A t A 1..................... ""
13
Ис-ИЛ
Y^-G/2*T2+^0*T+Y0
X-VxO*T+XO, где
Vx * горизонтальная составляющая скорости.
VxO - V0*CosW
tyO " ГО*<ЯвИИ
100 LETXO-O: LETYO-O
105 OS
110 INPUT *W-’;W
120 LET W-W*2*PI/360
130 INPUT *V0-*;V0
135 LET SY-175/2000:LET SX-225/3000
140 LETVX-VO’COS W
150 LET VY-VO’SIN W
160 LET T-0: LET H-0: LET L-0
170 LET G-10
180 LET Y-G/2*T*T+VY*T
190 IF Y<0 THEN GOTO 110
200 LET X-VX*T
210 PLOT X*SX,Y*SY
220 LET L-X LET H-Y
230LETT-T+0.3
240 GOTO 180
Программа 1.9 Влияние горизонтальной начальной скорости.
В строке ПО задается значение угла под которым бросается тело, а в строке 130 задается значение начальной скорости.
' Дополните программу строкой:
205 PLOT INVERSE 1;L*SXH*SY
1Исолон1
и на экране будет двигаться одна точка.
1.10 ИГРОВАЯ ПРОГРАММА "АРТИЛЛЕРИЯ”
На основании 2предыдущей0 программы можно создать простую, но достаточно увлекательную игру, где противники обмениваются залпами из орудий, причем стрельба ведется из закрытой позицииитолько по навесной траектории. Дополнительные трудности в прицеливании создает ветер. Позиции орудий,профиль местности, сила и направление ветра задаются случайным образом, поэтому при каждом новом запуске условия игры будут новыми.
05 LET Р1-1
07 LET F-0
10 LET SY-175/2000: LET SX-225/3000
15 GOSUB 300
20 GOSUB 400
30 GOSUB 500
40 GOTO 600
99 STOP
100 LETXO-O: LET YO-O
105 CLS
110 INPUT "W-*;W
115LETW0-W
120 LETW-W*2*PI/360
121 LET F-F+l
122 IF F>2 THEN GO TO 125
124 GOSUB 710
125 GOSUB 660
130 INPUT -V0-*;V0
135 IF Pl>0 THEN PRINT AT 21,2;W0;’ ";V0
137 IF P1<0 THEN PRINT AT 21,23;W0;’ ";V0
J40 LET VX-VO*COS W
150 LET VY-V0*SIN W
155 IF Pl<0 THEN LET VX-VX
160 LET T-0: LET H-0: LET L-0
170 LET G-10
175 BEEP 0.01,0
180 LET Y-G/2*T*T+VY*T+Y0
190 IF Y<0 THEN GOTO 800
192 IF Y>2000 THEN GO TO 835
195 LET VX-0.1*WI+VX
200 LET X-VX*T+XO
202 IF X>3000 THEN GO TO 835
205 IF POINT (X*SX,Y*SY)-1 THEN GO TO 800
207 PLOT INVERSE 1,L*SX,H‘SY
210 PLOT X‘SX,Y*SY
215GOSUB900
220 LET L-X: LET H-Y
230LETT-T+0.5
240 GOTO 180
300 FOR I- USR ’A" TO USR "C’-1
310 READ S: POKE 1,5
320 NEXT I
330 DATA 240,144,159,128,128,128,128,255
340 DATA 15,9,249,1,1,1,1,255
350 RETURN
400 LET P-8
410 FOR 1-1 TO 92
420 PLOT l,P
430 NEXT I
440 LET H- RND* 100+50
450 FOR 1-93 TO 121
460 LET HX- SIN (((l-87)‘4.5+180)‘P1/180)‘H: LET HX- ABS HX
465 PLOT l,HX+P: DRAW 0,-HX
470 NEXT I
480 FOR 1-122 TO 225
490 PLOT l,P: NEXT I
495 RETURN
500 LET RE- INT (( RND ‘80+130)/8)
510 LET LI- INT « RND *80+5)/8)
520 PRINT AT 20,RE;*AB"
530 PRINT AT 20,LI;’AB’
550 LET Wl- INT (RND‘10+0.5)
555 IF RND >0.5 THEN LET WI-WI
560 PRINT AT 1,10;*WIND*; ABS Wl;
565 IF W1<0 THEN PRINT ‘ <-'
570 IF WI>0 THEN PRINT ’ --->*
580 RETURN
600 LET Y0-(P+8)/SY
610 IF P1>0 THEN LET X0-(LI’8+8)/SX
620 IF P1<0 THEN LET X0-(RE’8+8)/SX
630 GOTO 110
660 LET DX-1 O’COS W
670 LET DY-1 O’SIN W
680 IF P1>0 THEN PLOT 11’8+8,P+6: DRAW DX,DY
690 IF P1<0 THEN PLOT RE‘8+8,P+6: DRAW -DX,DY
700 RETURN
710 IF P1>0 THEN PLOT U’8+8,P+6: DRAW INVERS 1;DX,DY
720 IF P1<0 THEN PLOT RE’8+8,P+6: DRAW INVERSE 1;-DX,DY
730 RETURN
800 FOR 1-1 TO 25
805 BEEP 0.01,0
810 LET DY-RND’100: LET DX-RND’100
820 PLOT INVERSE 1;(X+DX)’SX,(Y+DY)’SY
830 NEXT I
835 LET PI-PI
840 GOTO 600
900 LET ZX-X*SX: LET ZY-Y*SY
910 IF ZX>LI+6 AND ZX<U+10 AND ZY<P+8 THEN GOTO 1000
920 IF ZX>RE+6 AND ZX<RE+10 AND ZY<P+8 THEN GOTO 1000
930 RETURN
1000 IF PI >0 THEN PRINT AT 20,RE;* *
1010 IF P1<0 THEN PRINT AT 20,LI;* *
1040 FOR 1-1 TO 100
1050 LET DX- RND’100: LET DY- RND’100
1060 PLOT (X+DX)’SX,(Y+DY)’SY
1065 BEEP 0.01,0
1070 NEXT I
1080 INPUT "NEW? Y/N*;A$
1090 IF A$-V THEN GOTO 20
Программа LIO Игра "Артиллерия”.
В строке 10 задается масштаб.
В подпрограмме начинающейся со строки 300 подготавливается новые графические символы "А" и "В", формирующие изображение укреплений.
Подпрограмма начинающаяся со строки 400 выводит картинку профиля местности. В строках 400-43fr формируется линия слева от изображения горы, в строках 440 - 470 - изображение горы, а в строках 480 - 490 -линия справа от нее.
Подпрограмма начинающаяся со строки 500 производит расстановку укреплений.
В строках 600 - 630 определяется начальная точка движения снаряда.
В строках 660 - 700 формируется изображение ствола орудия в соответствии с углом наклона заданным в строке ПО.
В строке 130 задается начальная скорость снаряда.
В строках 135 и 137 выбранные значения выводятся на экран.
В строках 180 - 240 вычисляется траектория движения снаряда ипопаданиеего в цель (строка203 и подпрограмма начинающаяся со строки 900). При попадании снаряда в цель формируется изображение взрыва истираетсякартинкавражескотоукрепления (строки 1000 - 1070).
Попробуйте удалить строку 207 и траектории движения снарядов станут видимыми, но это помешает нормальной работе программы при последующих выстрелах.
В строках 835 и 840 формируется переход хода.
В строках 1080 и 1090 задается начало новой игры или выход из программы.
Программа устроена так, что снаряд потерявший вертикальную и горизонтальную составляющие скорости самоликвидируется. Это выполняется в строке 205, проверяющей попадание снаряда куда либо. При нулевой скорости снаряд попадает сам в себя.
1.11 ИГРОВАЯ ПРОГРАММА ••ПИТОН”.
Следующая программа представляет собой вариант классической игры "Питон". В этой игре питон ползает по экрану под Вашим управлением и ловит зазевавшихся кроликов. В данном случае кролики условно изображаются цветными кружками, но Вы можете попытаться изобразить и что-нибудь иное, изменив данные в строках 130 - 170. Как это делается мы уже рассматривали в IlfSSSSl программах 1.2 и 1.3. IKmbI
10 CIS
20 INPUT’SPEED 0 - 50’^P
30 GOSUB 100
99 GOTO 200
100 FOR I- USR "A* TO USR ТЧ
110 READS: POKE I,S
120 NEXT I
130 DATA 60,126,255,255,255,255,126,60
140 DATA 60,126,240,192,192,240,126,60
150 DATA 60,126,231,231,195,195,66,0
160 DATA 0,66,195,195,231,231,126,60
170 DATA 60,126,15,3,3,15,126,60
199 RETURN 200LETA-600
203 CLS
205 PAPER 7: INK 1: BRIGHT 0: BORDER 6
210 LET N-0: LET P-0
215 LET B1-1: LET B2-B1
220 LET H- INT ( RND* 18)
230 LET V-INT ( RND*26)
240 PRINT AT H,V;’C
250 FOR 1-0 TO SP: LET A$- INKEYS : NEXT I
252 IF A$-’5" THEN LET A-500
254 IF A$-"6* THEN LET A-600
256 IF AS-7’ THEN LET A-700
258 IF A$-*8" THEN LET A-800
270 GOTO A
400 PRINT AT 10,16;’RESULT:’; AT 10,23;P
405 INK 0
410 STOP
420 CLS
430 GOTO 200
500 PRINT AT H,V;’A* 510LETV-V-1
520 LET C- ATTR (H,V): GOSUB 1000
530 PRINT AT H,V;*E*
535 BEEP 0.01,0
540 GOTO 250
600 PRINT AT H,V;’A"
610 LET H-H+l
620 LET C- ATTR (H,V): GOSUB 1000
630 PRINT AT H,V;’C"
635 BEEP 0.01,2
640 GOTO 250
700 PRINT AT H,V;’A"
710 LET H-H-l
720 LET C- ATTR (H,V): GOSUB 1000
730 PRINT AT H,V;’D"
735 BEEP 0.01,4
740 GOTO 250
800 PRINT AT H,V;*A"
810LETV-V-1
820 LET C- ATTR (H,V): GOSUB 1000
830 PRINT AT H,V;"B*
835 BEEP 0.01,6
840 GOTO 250
1000 IF C-57 THEN GOTO 400
1020 IF C-62 THEN LET P-P+10 :LET N-2: GOSUB 2000
1030 IF C-58 THEN LET P-P+20 :LET N-2: GOSUB 2000
1040 IF C-60 THEN LET P-P+40 :LET N-2: GOSUB 2000
1050 IF H<0 OR H>21 THEN GOTO 400
1060 IF V<0 OR V>31 THEN GOTO 400
1070 LET N-N+l
1080 GOSUB 2000
1090 RETURN
1250 FOR 1-1 TO S :LET AS- INKEY$ : NEXT I
2000 LET Y-INT ( RND*26)
2010 LETX-INTj RND*18)
2020 IF N<3 THEN PRINT INK 6; AT X,Y;’A’
2030 IF B1<0 THEN GOTO 2050
2040 LET R- INT (RND*20)+N: LET 81 —Bl
2050 IF R-N THEN PRINT INK 2; AT X,Y,'A": LET Bl -Bl:
GOTO 2999
2060 IF B2<0 THEN GOTO 2080
2070 LET RR- INT (RND*40)+N: LET B2-B2
2080 IF RR-N THEN PRINT INK 4; AT X,Y;’A’: LET B2-B2:
GOTO 2999
2999 RETURN
Программа 1.11 Игра "Питон".
В строке 20 вводится скоростьвдиапазонеО-50. 50-наименьшая скорость. В строках 100-199подготавливаютсяграфические символы.
В строках 250 - 270 проверяется нажатие управляющих клавиш.
В строках 500 - 540 формируется движение налево.
В строках 600 - 640 формируется движение вниз.
В строках 700 - 740 - вверх.
В строках 800 - 840 - направо.
В строках 1000 -1090производится проверка критериев окончания игры (это выход за пределы экрана и попытка питона укусить самого себя) и подсчет результата игры.
В строках 2000 - 2999 производится выбор места и вывод новых целей.
1.12 "ЛАМБАДА”.
Следующие программы демонстрируют звуковые возможности СПЕКТРУМа. Даже если ограничиться только оператором ВЕЕР, можно достаточно легко создавать знакомые мелодии.
05 FOR 1-1 ТО 2
10 ВЕЕР 0.5,7
20 ВЕЕР 0.25,5
30 ВЕЕР 0.25,3
40 ВЕЕР 0.25,2
50 ВЕЕР 0.25,0
55 PAUSE 30
60 ВЕЕР 0.25,0
70 ВЕЕР 0.25,3
80 ВЕЕР 0.25,2
90 BEEP 0.25,0 100 BEEP 0.25,-2 110 BEEP 0.25,0 120 BEEP 0.25,-5 130 BEEP 0.25,-7 140 BEEP 0.5,-5 145 PAUSE 30 150NEXTI
155 PAUSE 20 157 FORT-1 TO 160 BEEP 0.25,5 170 BEEP 0.25,5 180 BEEP 0.25,5 190 BEEP 0.25,3 200 BEEP 0.25,-4 210 BEEP 0.25,0 220 BEEP 0.25,3 230 BEEP 0.5,7 240 BEEP 0.25,5 250 BEEP 0.25,3 260 BEEP 0.5,-4 270 BEEP 0.25,0 280 BEEP 0.25,3 290 BEEP 0.5,2 300 BEEP 0.25,0 310 BEEP 0.25,-2 320 BEEP 0.5,-2 330 BEEP 0.25,0
340 BEEP 0.25,-2 350 BEEP 0.5,0 352 PAUSE 30 355 NEXT T
360 PAUSE 60 370 GO TO 5
Программа.
Ш "Ламбада".
Программа 1.12 воспроизводит хорошо известную "Ламбаду". Звучание не отличается совершенством, но мелодия легко узнается. Операторы цикла в 5 и 157 строках позволяют избежать повторного набора нот в повторяющихся музыкальных фразах. В остальномпрограмма совершенно очевидна.
Более компактно записать мелодию можно используя READ и DATA, так как это сделано в следующей программе.
1.13 АЛЬТЕРНАТИВНАЯ ЗАПИСЬ МЕЛОДИЙ.
10 INPUT "TEMP? (1 - 4)’;К
20 LET К-К/8
25 RESTORE
30 FOR 1-1 ТО 45: READ А: ВЕЕР КА
40 NEXT I
60 ВЕЕР 2*К,4: PAUSE 10
70 GO ТО 25
100 DATA 11,1.1,11,11,9,7,7,6,4,4,7,11,16,16,16,16, 14,12,12,11,9,9,11,12,11,12,11,15,12,11,11,9,7,7,6, 4,6,6,6,6,7,6,4,4,4
Программа 1.13 Альтернативная запись мелодий.
1.14 "ЭЛЕКТРОМУЗЫКАЛЬНЫЙ ИНСТРУМЕНТ”.
Несложная программа превращает СПЕКТРУМ в одноголосый электромузыкальный инструмент.
05 LET 0-0
10 IFINKEYS -*• GOTO 10
iconowl
20 IF INKEYS - *Z* THEN BEEP 0.25,0+0
25 IF INKEYS - "S" THEN BEEP 0.25,0+1
30 IF INKEYS - "X" THEN BEEP 0.25,0+2
35 IF INKEYS - "D" THEN BEEP 0.25,0+3
40 IF INKEYS - "C" THEN BEEP 0.25,0+4
45 IF INKEYS - "V" THEN BEEP 0.25,0+5
50 IF INKEYS - *G* THEN BEEP 0.25,0+6
55 IF INKEYS - *B’ THEN BEEP 0.25,0+7
60 IF INKEYS - ’H* THEN BEEP 0.25,0+8
65 IF INKEYS - ’NT THEN BEEP 0.25,0+9
70 IF INKEYS - "J" THEN BEEP 0.25,0+10
75 IF INKEYS - *M’ THEN BEEP 0.25,0+11
80 IF INKEYS - *K* THEN BEEP 0.25,0+12
100 IF INKEYS - '5‘ THEN LET О - 0
110 IF INKEYS - *4* THEN LET О - -12
120 IF INKEYS - ’3’ THEN LET О - -24
130 IF INKEYS -’6’THEN LET О - 12
140 IF INKEYS - V THEN LET О - 24
200 GO TO 10
Программа 1.14 "Электромузыкальный инструмент".
Вэтойпрограмме клавиши компьютера выполняюгследукхцие функции: Нижний ряд - ноты, Второй снизу-диезы и бемоли, ЦифрыЗ-7 - переключение октав.
1.15 ПРОГРАММИРОВАНИЕ ПО ИНСТРУКЦИИ "OUT".
Если Вас не устраивает звук генерируемый с помощью ВЕЕР, то поэкспериментируйте с инструкцией OUT. Выход звукового сигнала в СПЕКТРУМЕ сделан с разряда D4 порта с адресом 254, поэтому переключая этот разряд из единичного состояния в нулевое модою генерировать звук.
Например:
10 OUT 254,16
20 OUT 254,0
30 GO ТО 10
1.16 РЕШЕНИЕ КВАДРАТНЫХ УРАВНЕНИЙ.
В конце первой главы предлагаем программу решения квадратных уравнений вида:
ЛХЧ+ВХ+С-О
В этой программе в строках 50 - 70 производится ввод
коэффициентов, в строках200-220 вычисляется дискриминант и если он неотрицателен вычисляются значения XI и XL В противном случае выводится надпись "НЕТ РЕШЕНИИ”. В строке 10 выводится подсказка, напоминающая о форме записи квадратного уравнения. В строке 80 выводятся на экран уравнение с введ енными коэффициентами.
10 PRINT "А*ХЛ2+В*Х+С-0"
50 INPUT'А-'А
60 INPUT "В-*;В
70 INPUT *С-*;С
80 PRINT А;'Т(Л2+’;В;**Х+*;С;*“0*
200 LET D-B*B-4*A*C
210 PRINT *D-’;D
220 IF D<0 THEN PRINT 'NO SOLUTION"
300 LET X1-(-B+D“0.5)/(2‘A)
400 LET X2-{-B-D'40.5)/(2,A)
500 PRINT "XI-"^(1
510 PRINT *X2-';X2
Программа 1.15 Решение квадратных уравнений.
ГЛАВА 2.
Вданной главе собраны программы демонстрирующие графические возможности компьютера SINCLAIR ZX SPECTRUM. С возможностью созд ания изображений с помощью символов запрограммированных пользователем мы уже ознакомились в главе 1. В этой же главе будут рассмотрены способы построения на экране различных графиков, гистограмм, трехмерных изображений.
2.1 ПОСТРОЕНИЕ ОСЕЙ КООРДИНАТ.
В первой протрамме на экране строятся оси координат и, в качестве примера, выводится график функции Y=SIN(X)/X.
100 GOSUB 3000: GOSUB 2200
1000 REM EXAMPL
1010 INPUT "STEP:"#
1020 FOR X-XA TO XE STEP S
1030 IF X о 0 THEN LET Y-SIN (X)/X
1040 GOSUB 2400
1050 NEXT X
1999 STOP
2000 REM INPUT OF DATA
2005 CIS
2010 PRINT'INPUT: '
2020 INPUT ’U0,V0:*,U0,V0
2030 INPUT ЧОМЛХиП
2040 INPUT *ХА,ХЕ:*,ХАДЕ
2100 LET X0-U0: LET Y0-V0
2110 LET X1-XL/XG*XA+X0
2115 LET X2-XL/XG*XE+X0
2120 LET Y1-YL/YG*YA+Y0
2125 LET Y2-YL/YG*YE+Y0
2140 LET MX-XL/XG: LET MY-YL/YG
2150 LET XT-XL/XT: LET YT-Yl/YT
2200 REM PLOT
2210 PLOT XI,Y0: DRAW X2-X1,0
2220 PLOTXO,Y1: DRAW 0,Y2-Y1
2230 FOR X-X1 TO X2 STEP XT
2240 PLOT X.YO-2: DRAW 0,4: NEXT X
2250 FOR Y-Y1 TO Y2 STEP YT
2260 PLOT X0-2,Y: DRAW 4,0: NEXT Y
2330 RETURN
2400 LETXP-X‘MX+X0: LET YP-Y*MY+Y0
2420 IF XP<0 OR XP>255 THEN GOTO 2490
2430 IF YP<0 OR YP>175 THEN GOTO 2490
2435 LET XP- INT XP: LET YP- INT YP
2440 PLOT XP,YP
2490 RETURN
3000 READ U0,V0,XL,YL,XA,XE,YA,YE,XT,Yr
3010 GOTO 2090
3100 DATA 126,87,240,160
3110 DATA -10,10, -1,1
3120 DATA 10,4
Программа 21 Оси координат.
Данная программа рисует оси координат для графика, при этом используюгсяданные в строках 3000-3120. Еслипо кжкимто соображениям данные оси координат не подходят, то записав строку 100 в виде:
100 GOSUB 2000
можно ввести новые данные дм построения осей координат.
u0,v0 - начальная точка (исходное значение 126,87)
xl,yl - размер осей (240,160)
харю - область значений х (-10,10)
уа,уе - область значений у (-1,1)
xt,yt * на сколько частей делятся оси х и у (10,4)
Встроках2000-2070производигсявводэтихданных. в строках2090 -2330 формируется вывод на экран осей, австроках2400 - 2490 - вывод графика функции.
2.2 ЛИНЕЙНЫЕ ДИАГРАММЫ.
Программа 2.2 позволяет строить линейные диаграммы. Программа работаете двух, режимах. В первомрежимекЮОпроценгамнормируется максимальное из введенных д анных, а во втором режиме к 100 процентам нормируется сумма введенных значений.
Рис.21
10 GOTO 500
100 CIS
110 PLOT 36,4
120 DRAW 0,160
130 FOR 1-0 TO 10
140 PLOT 33,1*16+4
150 DRAW 3,0
160 NEXT I
170 PRINT AT 21,2;"0*
180 FOR 1-1 TO 9
190 PRINT AT 21-2*1,1;10*l
200 NEXT I
210 PRINT AT 1,0/100*
220 RETURN
500 REM
510 CLS: INPUT *N-?*;N
520 DIM E(N)
530 FOR 1-1 TO N
540 INPUT -D’;STR$ l;’-’;E(l)
545 PRINT AT l,2;E(l)
550 NEXT I
560 PRINT AT 1+2,2/100 - SJUMM*
570 PRINT AT l+3,7/M)AXIMUM*
580 INPUT A$
590 IF A$-’S* THEN GOTO 700
595 IF A$-*M* THEN GOTO 600
599 GOTO 560
600 REM MAXIMUM
605 LET E-E(1)
610 FOR 1-2 TO N
620 IF E(I)>E THEN LET E-E(l)
630 NEXT I
635 FOR 1-1 TO N
640 LET E(l)-E(l)/E*160
645 NEXT I
650 GOTO 800
700REMSUMM
705 LET E-0
710 FOR 1-1 TO N
715 LET E-E+E(l)
720 NEXT I
730 GOTO 635
800 REM PLOT
805 GOSUB 100
810 PLOT 36,4: DRAW 16‘N,0: PLOT 36,4
820 FOR 1-1 TO N
830 LET E- INT E(l)
840 DRAW 0,E: DRAW 16,0: DRAW 0,-E
845 PRINT PAPER I; INK 9; AT 20,2»(M)+5;l
850 NEXT I
Программа 2.2 Линейные диафаммы.
В строках 500 - 550 производится выбор количества столбцов и вводданных.
В строках 560 - 599 производится выбор режима работы S или М.
В строках 100 - 220 выводится на экран вертикальная Линия с масштабными делениями.
В строке 810 - горизонтальная линия.
В строках 820 - 850 на экран выводятся столбцы и их номера.
2.3 КРУГОВЫЕ ДИАГРАММЫ.
Программа 2.3 позволяет строить круговые диаграммы. Работает она аналогично предыдущей, но только в режиме, когда за 100 процентов берется сумма значений всех введенных данных.
10 GOTO 500
100 CLS
110 CIRCLE 127,95,R
120 RETURN
500 REM
510 CIS: INPUT ”N-r;N
520 DIM E(N): DIM F(N)
530 FOR 1-1 TO N
540 INPUT "D';STR$
545 PRINT AT l,2;E(l)
550 NEXT I
700REMSUMM
705 LET E-0
710 FOR 1-1 TO N
715 LET E-E+E(l)
720 NEXT I
730 FOR 1-1 TO N
740 LET E(l)-E(l)/E*360
750 NEXT I
760 LET E-0
770 FOR 1-1 TO N
780 LET E-E(l)+E: LET F(l)-E
790 NEXT I
800 REM PLOT
802 LET R-60
805 GOSUB 100
810 PLOT 127,95: DRAW R,0: PLOT 127,95
820 FOR l-l TO N
840 LET X-R*COS (2*P1,F(l)/360)
850 LET Y-R*SIN (2*P1,F(l)/360)
860 LET X- INT X:LET Y- INT Y
870 DRAW X,Y: PLOT 127,95
880 NEXT I
900 FOR 1-1 TO N
910 LET W-2*Pf(F(l)-E(l)/2)/360
915 LET Rl-2’R/3
920 LET X-RTCOS W: LET Y-R/2* SIN W
930 LET X- INT ((X+1271/8+0.5)
940 LET Y- INT «95-YJ/8+0.5J-2
950 PRINT PAPER I; INK 9; AT УЛ INT (E(l)/3.6+0.5)
960 NEXT I
Дюфамлш 23 Дуговые дш^юммы.
В строке 110 рисуется окружность радиуса г. Значение г=60 задается в строке 802. При необходимости это значение можно изменить или модифицировать программу так, чтобы значение г вводилось по запросу, аналогично вводу значения п в строке £10.
2.4 ПОЛЯРНЫЕ КООРДИНАТЫ.
Программа 2.4 демонстрирует принцип использования полярных координат:
у “ r(t) • cos(t)
,где
r(t)-kl *shk2 *t
50 INPUT 'KI-’jKI
60 input ча-^кг
100 DEF-FN R(Q)- COS (KI’SIN (K2*Q))
110 CIS : LET A-0.1: LET S-75: LET W-0
120 FOR 1-0 TO 45 STEP A
130 LET T-l/(2‘Pt)
140 LETX-FNRfn*SINT
150 LET Y-FNRpT COST
160 LET Y- INT (Y*S): LET X- INT (X‘S)
170 IF 1-0 THEN PLOT X+125.Y+85: GOTO 200
180 DRAW X-XA,Y-YA
200LETXA-X: LETYA-Y
210 NEXT I
Программа 2.4 Полярные координаты.
Введите значение К1=2.5 и К2=5 и на экране будет нарисована <^ромашка*'.ВВедитеновыезначенияи1Юлуч1педругиекар1Инки. Программа выполняет сложные вычисления и работает довольно медленно.
2.5 СПИРАЛЬ.
Программа 2.5 рисует на экране спираль в соответствии с
формулами:
х-ЫТанвУ
у-*2уМпбу
100 in R-7 110LETRD-R*2*PI
115 LETS-PI/32 120 INPUT ’K1-’;K1
130 INPUT ‘A-'jA
140 input тг-ма
150 INPUT
160 LET XO-125: LET Y0-50
165 LET Z-0.1
170 CLS
180 PLOT X0,Y0
190 LETXA-XO: LET YA-YO
200 DEF-FN QW)-X0+Kl *W* COS (A*W) 210 DEF-FN S|W)-Y0+K2’W* SIN (B*W) 220 FOR X-0 TO RD STEPS
230 LETXP- FN QX): LET YP- FN S(X) 232 LET Z-Z+0.1
234 LET YP-YP+Z
235 LET XP- INT XP: LET YP- INT YP 240IFXP<1 THEN LET XP-1
245 IFYP<1 THEN LET YP-1 250 IF XP>255 THEN LET XP-255
255 IF YP>175 THEN LET YP-175 260 LET DX-XP-XA: LET DY-YP-YA
262 DRAW DX.DY
265 LET XA-XP: LET YA-YP 270 NEXT X
Программа 25 Спираль.
Увеличение значения к1 растягивает спираль по горизонтали, а увеличение к2 - по вертикали. Симметричная спираль с постоянным шагом получается при следующих
значениях к1=2, к2=2, а1=1, в1=1.
2.4 ЭКСПОНЕНЦИАЛЬНАЯ СПИРАЛЬ.
Программа 2.6 рисует экспоненциальную спираль в соответствии с формулами:
x-c»eA(W7*C«
у-с*е*(k2*f*SiH b*f)
100 LET R-2
110 LET RD-R*PI*2
115 S- PI/100
200 DEF-FN C(W)-X0+0.02*EXP (K1*W)*COS JA*W)
210 DEF-FN S(W)-Y0+0.02*EXP {K2*W)‘SIN (B*W)
Программа 2.6 Экспоненциальная спираль.
Объедините программу 2.6и2.5спомощьюМЕЯОЕизапустите программу. При значенияхпараметровк1=0,9к2=0,9а=5Ь=5 на экране будет нарисована экспоненциальная спираль, шаг которой постоянно увеличивается.
2.7 ЛОГАРИФМИЧЕСКАЯ СПИРАЛЬ.
Программа 2.7 рисует логарифмическую спираль в соответствии с формулами:
x-kl*LN(l+j)*Cos a*f
y-k2*LN(l+J)*Sin b*f
200 DEF-FN C(W)-X0+Kl* LN (1+W|* COS |A*W)
210 DEF-FN З^УО+Кг* LN (1+W)‘ SIN (B*W)
Программа 2 7 Логарифмическая спираль.
Объедините программу 2.7 и 2.5 с помощью MERGE и запустите программу. При значениях параметров к 1=30 к2=20 а=1 Ь=1 на экране будет нарисована логарифмическая спираль, шаг которой постоянно уменьшается.
солонПН
2.S КАРДИОИДА.
Программа 2.8 рисует кардиоиду в соответствии с формулами: х-*7»бв»аи/-в*См ЭД
y-k2*(b*Cosf-b*Cos У)
НО LETRD-2*PI
115 LET S- PI/100
120 INPUT *K1-’;K1
130 INPUT *A-ЗА
140 INPUT 1C2-3K2
150 INPUT
160 LET XO-125: LET YO-85
170 CIS
180 PLOT X0,Y0
190 LET XA-XO: LET YA-Y0
200 DEF-FN C(W)-X0+Kl *(A* COS W-COS (A*W))
210 DEF-FN S(W)-Y0+K2‘(B* SIN W-SIN (B*W))
220 FORX-0 TO RD STEPS
230 LET XP- FN C(X): LET YP- FN SpQ
235 LET XP-INT XP: LET YP-INT YP
240 IFXP<1 THEN LET XP-1
245 IF YP<1 THEN LET YP-1
250 IF XP>255 THEN LET XP-255
255 IF YP>175 THEN LET YP-175
260 LET DX-XPXA: LET DY-YP-YA
262 DRAW DX, DY
265 LETXA-XP: LET DY-YP-YA
270 NEXT X
Программа 28 Кардиоида.
Призначенияхпараметровк1п20, к2-‘20,а=2,в=2ристется кардиоида с одним минимумом, а при к!ж 10, к2=10, a*4, в-=4 рисуется кардиоида с тремя минимумами.
2.9 ЦИКЛОИДА.
Протрамма 2.9 рисует циююиру в соответствии с формулами: x-kl*Cosf-k2*Cosk3*f
y-k4*Sinf-k5*Cosk6*f
100 LET R-1.01
110 LET RD-2*PI
115 LET S-P1/100
120 INPUT *K1-*;K1
125 INPUT "K2-';K2
130 INPUT -K3--;K3
135 INPUT ТД-ЗКД
140 INPUT "K5-’;K5
145 INPUT "K6-’;K6
160 LET XO-125: LET YO-85
170 CLS
180 PLOT X0,Y0
190 LETXA-XO: LETYA-YO
200 DEF-FN QWJ-XO+KVCOS W-K2’COS (K3*W)
210 DEF-FN S(W)-Y0+K4*SIN W-K5*SIN (K6*W)
220 FORX-0 TO RD STEPS
230 LET XP-FN C(X): LET YP-FN S(X)
235 LET XP-INT XP: LET YP- INT YP
240IFXP<1 THEN LET XP-1
245 IF YP<1 THEN LET YP-1
250 IF XP>255 THEN LET XP-255
255 IF YP>175 THEN LET YP-175
260 LET DX-XP-XA: LET DY-YP-YA
262 DRAW DX, DY
265 LET XA-XP: LET YA-YP
ЯнИ 270 NEXT X
Программа 2.9 Циклоида.
В качестве примера можно предложил» следующие значения параметров: к1—25, к2-25, 15—10, к4—23, к5=25, кб=10.
2.10 ФУНКЦИЯ ROSETTE.
Программа 2.10 рисует график функции Rosette в соответствии с формулами:
х-*1*51як2У+к1*Соз k3*f
у*4*Сик5у+Ы*ЗЬ k6*f
100 LET R-1.01
110 LET RD-2*PI
115 LET S-P1/100
175 LET XP- FN q0): LET YP- FN 5(0)
180 PLOT XP,YP
190 LETXA-XP: LET YA-YP
200 DEF-FN C(W)-XO+K1‘SIN (K2*W)+K1*COS (K3*W)
210 DEF-FN S(W)-YO+K4*COS |K5‘W)+K4‘SIN (K6*W)
Программа 2.10 kosttit.
(Хллрщнхт программу 2.9 и 2.10 с помощью MERGE и запустите программу.
В качестве примера можно предложить следующие значения параметров: к1—50, к2=10, 15—7, к4=25, к5»8, кб-9.
2.11 ТРЕХМЕРНЫЕ КООРДИНАТЫ.
Программа2.11 рисует объемное изображениеашгипсовдавсоответствии с формулами:
хЧ[1*Яяф* Gt(k2*D
у-кЗ^Яиф* Sa(k4*f)
Г-к5*Яяф
100 LET R-7
110 LET RD-R*2*PI
115 LETS-PI/32
120 INPUT *К1-*;К1
125 INPUT *K2-*;K2
130 INPUT ЖЗ-’ЖЗ
135 INPUT *K4-*;K4
140 INPUT "K5-";K5
160 LET XO-125: LET Y0-30
165 LET Z-0
170 CLS
180 PLOT X0,Y0
190 LET XA-XO: LET YA-YO
200 DEF-FN C(W)-XO+KTSIN(W/(2*R))‘COS (K2*W)
210 DEF-FN S(W)-Y0+K3,SIN(W/(2‘R))‘SIN (K4*W)
215 DEF-FN F(W)-K5*SIN (W/(2*R)|
220 FOR X-0 TO RD STEPS
230 LET XP-FN QX): LET YP-FN S(X)
232 LET Z-Z+FN F(X): LET YP-YP+Z
235 LET XP-INT XP: LET YP- INT YP
240IFXP<1 THEN LET XP-1
245 IF YP<1 THEN LET YP-1
250 IF XP>255 THEN LET XP-255
255 IF YP>175 THEN LET YP-175
260 LET DX-XP-XA: LET DY-YP-YA
262 DRAW DX,DY
265 LETXA-XP: LET YA-YP
270 NEXT X
Программа 2.11 Объемный эллипсоид.
В качестве примера можно предложить следующие значения параметров: к1=100,к2=2,кЗ=20,к4=2,к5=0.5.
2.12 ПОВЕРХНОСТЬ СЛОЖНОЙ ФОРМЫ.
Программа 2.12 рисует линии изображающие поверхность сложной формы:
100 LET SI-8: LET YB-55
110 LET Al-50: LET R-30
120 LET U—(R/Sl)*4+2
125 CLS
130 DIM A(U,U): DIM H(300)
135 FOR 1-1 TO 300
140 LET H(I)-(YB-R): NEXT I
150 LETT-0.04
155 LET C-l: LET K-1
160 FOR Y-R TO R-1 STEP SI /2
170 LETC-C+1: LETS2-R/T
180 FOR X-2‘R TO 2‘(R-1) STEP SI
190LETK-K+1
200 LET Z1-A1* EXP (-{¥*¥/52))* EXP (-(X*X/S2))
210 LET Z2-A1* EXP (-(Y*Y/S2))‘ EXP (-flX+S1)*(X+Sl)/S2))
220 LET XI- INT(YB+S1‘C+X): LETX2- INT (YB+S1*(C+1)+X)
230 LET Y1- INT (YB+Y+Z1): LET Y2- INT (YB+Y+Z2)
240 LET A(K,q-Y1
250 IF Yl <H(X1) THEN GOTO 300
260 IF Y2<H(X2) THEN GOTO 300
270 IF Y1>H(X1) THEN LET H(X1)-Y1
280 IF Y2>H(X2) THEN LET H(X2)-Y2
285 LETXI- INT XI: LETX2- INTX2: LETY1- INT Yl: LETY2-INTY2
290 PLOTXI,Yl: DRAW X2-X1,Y2-Y1: GOTO 310
300 LET A{K,Q-0
310 NEXT X
320 LET A(K+1,C)-Y2
330 LET K-1
340 NEXTY
400 LET Xl-0: LET X2-X1: LET Yl-XI: LET Y2-X1
410 LET XI-YB-2’R
420 FOR N-2 TO U STEP 2
440 FOR M-2 TO U-l
450 LET X1-XI+(N-1)*S1+M*S1
460 LET X2-XI+(N-1)*S1+(M+1)*S1
470 IF A(N,M)-0 THEN GOTO 520
480 IF A(N,M+1)-0 THEN GOTO 520
490 LET Y1 -A(N,M): LET Y2-A(N,M+1)
495 LET XI-INT XI: LET X2-INT X2
497 LET Y1 -INT Y1: LET Y2-INT Y2
500 PLOTXI,Y1: DRAW X2-X1,Y2-Y1
520 NEXT M
530 NEXT N
Программа 2.12 Поверхность сложной формы.
2.13 ПРОГРАММА "КОМПЬЮТЕРНАЯ ГРАФИКА”
100 OS: LET К1-30
105 BORDER 4: INK 2: PAPER 5: BRIGHT 1
107 CIS
110 LET N-INT (RND *2+5)+3
120 DIMX(N+1): DIM Y(N+1)
125 DIM U(N+1): DIM V(N+1)
130 FOR 1-1 TON
140 LET XW-RND*225: LET Y(I)-RND*175
150 LET U(I)-RND*225: LET V(l)- RND* 175
152 NEXT I
155 LET X(N+1)-X(1): LET Y(N+1j-Y(1)
157 LET U(N+1)-U(1): LET V(N+1)-V(1)
160 FOR 1-1 TON+1
170 LET UdHUn-XR/Kl
180 LET V(I}-(V(I)-Y(I))/K1
190 NEXT I
200 PLOT X(1 ),Y(1)
205 LET XA-XJ1): LET YA-Y(1)
210 FOR >1 TO KI
220 FOR 1-1 TO N+1
230 DRAW X(I)-XA,Y(I)-YA
235 LET XA-X(I): LET YA-Y(I)
240 NEXT I
250 FORM-1 TO N+1
260 LET X(M)-X(M)+U(M)
270 LET Y(M)-Y(M)+V(M)
280 NEXT M
290 PLOT X|1),Y(1)
300 LET XA-XJ1): LET YA-Y(1)
310 NEXT J
998 STOP
999 PAPER 7: BORDER 7: INK 0: BRIGHT 0: CIS Программа 2.13 Компьютерная графика.
2.14 ПРОГРАММА "КОМПЬЮТЕРНАЯ ГРАФИКА 2”
100 LET 1-15: LET >15
ПО LET К-10: LET L-11
115 BORDER 2: INK9
120 LET B$-CHR$ (INT ( RND *16)+128)
130 LET C$-CHR$ (INT (RND *16)4-128) 140LETM-K
150 FOR N-1 TO J
160 PRINT PAPER RND *7; AT M,N;B$
170 NEXTN
180 LET N- J
190FORM-KTOL
200 PRINT PAPER RND*7; AT M,N;C$
210 NEXT M
220 LET M-L
230 FOR N-J TO I STEP-1
240 PRINT PAPER RND*7; AT M,N;B$
250 NEXT N
260 LET N-1
270 FOR M-L TO К STEP-1
280 PRINT PAPER RND‘7; AT M,N;C$
290 NEXTМ
300 LET 1-1-1: LET »1: LET K-K-l
310 IF К<0 THEN STOP
320 LET L-L+1
330 GOTO 120
999 BORDER 7: PAPER 7: INK 0: CLS
Программа 2.14 Компьютерная графика 2.
2.1 S ПРОГРАММА "КАЛЕЙДОСКОП”.
100 LETX-16: LET Y-10
105 PAPER 7
110 PRINT PAPER 0; AT YX"
120 FOR Ы TO 10
130 FOR 1-1 TO J
140 PAPER RND‘7
150 PRINT AT Y-J.X-1;"
160 PRINT AT Y-J.X+1”
170 PRINT AT Y+XX+I;”
180 PRINT AT Y+JM”
190 PRINT AT YW
200 PRINT AT Y-W+Jt"
210 PRINT AT Y4X+J,"
220 PRINT AT Y+U-Г’
230 NEXT I
310 PRINT AT 10,16-J;"’
320 PRINT AT 10,16+Г ’
330 PRINT AT 10-4,16;*"
340 PRINT AT 10+J,16;‘ "
350 NEXT J
360 GOTO 110
999 PAPER 7: INK 0: CIS
Профамма 2.15 Калейдоскоп.
2.1* ПРОГРАММА "КАЛЕЙДОСКОП 2"
100 LET X-16: LET Y-10
110 PRINT PAPER OAT УЛ"
120 FOR J-1 TO 10
125 LET K-0
127 PAPER RND*7
130FORI-X-JTOX
160 PRINT AT Y+K,l”
170 PRINT AT Y-K,If*
180 LET K-K+1: NEXT I
185 LET K-J
190FORI-XTOX+J
210 PRINT AT Y+K,If
220 PRINT AT Y-K,If
230 LET K-K-l: NEXT I
240 NEXT J
245 PAUSE 100
250 RUN
998 STOP
999 PAPER 7: INK 0: CIS
Дмцрамма 2.16 Калейдоскоп 2
Программы 215 и 216 создают на экране постоянно изменяющиеся цветные узоры. Изменения определяются работой генератора случайных чисел (RND) в строках 140 и 127 соответственно. Значения параметра PAPER лежат в диапазоне 0-7, поэтому значение RND умножается на 7.
2.17 ПОСТРОЕНИЕ ТРЕХМЕРНЫХ ИЗОБРАЖЕНИЙ НА ПЛОСКОСТИ.
Переход от трехмерных координат выполняется согласно формулам:
17-ЛГ+Г
к двумерным
1СОПОН1
F-Z + Z'
JT-Y*COSe
Рис. 12
На рисунке 2.2 поясняется порядок перехода от трехмерных координат к двумерным.
100 GOSUB 3000
1000 LETZ-O: LET R-0.75
1005 LET S-0.03
1010 FOR A-0 TO 2*H STEP S
1020 LET X-R‘COS (A): LET Y-R‘SIN(A): GOSUB 2400
1030 NEXT A
1050 LET Y-0
1060 FOR A-0 TO 2*PI STEP S
1070 LET X-R’COS (A): LET Z-R*SIN(A): GOSUB 2400
1080 NEXT A
1090 LET X-0
1100 FOR A-0 TO 2’PI STEP S
1110 LET Y-R*COS(A): LET Z-R’SIN(A): GOSUB 2400
1120 NEXT A
1999 STOP
2000 REM
2005 CIS
2010 PRINT •INPUT:*
2020 INPUT *U0,V0: *,U0,V0
2030 INPUT "XL,YL,ZL: *,XL,YL,ZL
2040 INPUT *ХАДЕ:’ЛА/Е
2050 INPUT *YA,YE: *,YA,YE
2060 INPUT *ZA7E:’,ZA7E
2070 INPUT *XT,YT,ZT: ',XT,YT,ZT
2080 INPUT *WI:*,W1
2090 LET XG-ABS (XA)+ ABS (XE)
2094 LET YG-ABS (YA)+ ABS (YE)
2096 LET ZG-ABS (ZA)+ ABS (ZE)
2100 LET X0-U0:LET ZO-VO: LET YO-O
2110 LET X1-XL/XG*XA+XO
2115 LET X2-XL/XG*XE+X0
2120 LET Y1-YL/YG*YA+YO
2125 LET Y2-YL/YG*YE+Y0
2130 LET Z1-ZL/ZG*ZA+Z0
2135 LET Z2-ZL/ZG*ZE+Z0
2140 LET MX-XL/XG: LET MY-YL/YG: LET MZ-ZL/ZG
2150 LET XT-XL/XT: LET YT-YL/YT: LET ZT-ZL/ZT
2160 LET CO- COS (2’PI *7/1/360)
2165 LET SI- SIN (2*PI *WI/360)
2200 REM PLOT
2210 PLOT XI70: DRAW X2-X1,0
2220 PLOT Х0Д1: DRAW O,Z2-Z1
2230 FOR X-X1 TO X2 STEP XT
2240 PLOT ХДО-2: DRAW 0,4: NEXT X
2250 FOR Z-Z1 TO Z2 STEP ZT
2260 PLOT X0-2,Z: DRAW 4,0: NEXT Z
2270 LET UA- INT (U0+CO*Y1): LET VA- INT (V0+SI*Y1)
2280 LET UE- INT (UO+CO*Y2): LET VE- INT
(V0+SI*Y2)
2290 PLOT UA,VA: DRAW UE-UA,VE-VA |НП|
2300 FOR Y-Y1 TO Y2 STEP YT
2310 LET U-UO+CO*Y: LET V-VO+SPY
2320 PLOT U,V-2: DRAW 0,4: NEXT Y
2330 RETURN
2400 LET XP-X‘MX: LET YP-Y*MY: LET ZP-Z’MZ
2410 LET U-XP+CO*YP+UO: LET V-ZP+SPYP+VO
2415 LET U- INT(U): LET V- INT(V)
2420 IF U<0 OR U>255 THEN GOTO 2490
2430 IF V<0 OR V>175 THEN GOTO 2490
2440 PLOT U,V
2490 RETURN
3000 READ UO,VO,XL,YL,ZL,XA,XE,YA,YE,ZA,ZE,XT,YT,ZT,W1
3010 GOTO 2090
3100 DATA 126,87,160,160,160
3110 DATA -1,1,-1,1,-1,1
3120 DATA 4,4,4,45
Программа 2.17 Сечение шара тремя плоскостями.
Программа 2.17 в качестве примера строит сечения шара в трех ортогональных плоскостях. Оси координат строятсяаналогично программе 2.1. Дополнительно для оси Z вводятся параметры:
za,ze - область значений переменной по оси L.,
zl - размер оси,
zt - на сколько частей делится ось,
wi - угол между осями Y.Z.
Аналогично программе 2.1 для йвода новых значений необходимо изменить строку 100 так:
100 GOSUB 2000
В строках 2000 - 2080 производится ввод новых параметров для построения осей, а в строках 2200 - 2330 выполняется вывод их на экран. В строках 3000 - 3120 находятся начальные данные для построения осей, которые Могут подойти для построения большинства графиков.
С увеличением количества сечений возрастает наглядность представления о форме предмета. В качестве примерав программе 2.18 строится 10 сечений шара по оси Z. Программа работает после объединения с программой 2.17.
9 2.18 ИЗОБРАЖЕНИЕ ШАРА.
1002 FOR В -Р1/2 ТО PI/2 STEP 0.3
1005 LET S-0.06
1020 LET X-R*COS A *COS B: LET Y-R’SIN A *COS B: LET Z-R‘SIN B: GOSUB 2400
1035 NEXT В
Программа 2.18 Изображение шара.
ГЛАВAJ
В данной главе собраны программы производящие различные виды преобразования информации: перевод чисел из одной системы счисления в другую, сортировку строк символов, решение систем линейных уравнений, вывод сообщений в виде "бегущей строки" икрупными буквами.
3.1 ФОРМИРОВАНИЕ БОЛЬШИХ БУКВ.
Иногда бывает необходимо вывести на экран надпись крупными буквами. Программа 3.1 позволяет сделать это. В программе каждый пиксел заменяется символом "S" (Рис 3.1). В строке 750 вместо "S" можно использовать псевдографический символ илиА$(1), тогда каждая большая буква будет состоять из маленьких (Рис. 3.2).
100 LETA$-"SPECTRUM‘
105 BORDER 5: PAPER 2: INK 5: CLS
110 LET U-0: LET V-0
120 GOSUB 500
130 STOP
500 REM
510 FOR 1-1 TO LENAS
520 LET C- CODEASfl)
525 LET C-C-32
530 GOSUB 700
540 LET U-U+8
550 IF U>24 THEN LET U-0: LET V-10
560 NEXT I
570 RETURN
700 FOR >0 TO 7
710 LET Z-PEEK (15616+>8*q
720 LET P-128
730 FOR K-U TO U+7
740 LET B-Z >- P
750 IF В THEN PRINT AT V+J,K;"S’;:LET Z-Z-P
760 LET P-P/2
770 NEXT К
780 NEXT J
790 RETURN
999 BORDER 7: PAPER 7: INK 0: CLS
Программа 3.1 Программа выводящая большие буквы.
SSSS sssss sssss sssss
S s s s s s
SSSS s s SSSS s
s sssss s s
s s s s s s
SSSS s sssss sssss
sssssss sssss s s s s
s s s s s ss ss
s s s s s s ss s
s sssss s s s s
s s s s s s s
s s s SSSS s s
солон I
Рис. 3.1
ssss ppppp EEEEEE cccc
s p p E c c
ssss p p eeeee c
s ppppp E c
s s p E c c
ssss p EEEEEE cccc
TTTTTTT RRRRR и UM M
T R R и UM M MM
T R R и UM МММ
T RRRRR и UM M
T R R и им M
T R R UUUU M M
Рис. 3.2
3.2 ПРЕОБРАЗОВАНИЕ ДЕСЯТИЧНЫХ ЧИСЕЛ В ЧИСЛА С ПРОИЗВОЛЬНЫМ ОСНОВАНИЕМ (ОТ 2 ДО 16) СИСТЕМЫ СЧИСЛЕНИЯ.
Программы 3.2 и 3.3 производят перевод чисел из одной системы счислениявдругую. Первая программа производит перевод из десятичной системы в любую другую (с основанием от 2 до 16), вторая производит обратное преобразование. При необходимости перевода числа, например из восьмиричной системы в шестнадцатиричную, можно сначала воспользоваться второй программой и перевести восьмиричное число и десятичное, а затем используя первую программу перевести его в шестнадцатиричное.
10 DIM Ц16)
100 PRINT’CONVERTER OF BASIS’
105 PRINT ’DECIMAL TO (FROM BIN TO HEX)
106 PRINT
110 PRINT’DECIMALL-’;
120 INPUTZ
125 PRINT Z
130 PRINT’BASIS’;
135 INPUT В
140 PRINT В
200 LET 1-0
205 LET 1-1+1
210 LET R-(Z/B-INT(Z/B))*B
215 LET L(l)-R
220 LET Z-INT (Z/B)
225 IF Z>-B THEN GO TO 205
230 LET 1-1+1
235 LET L(l)-Z
300 PRINT 'EQUAL:*;
305LETN$-*ABCDEF*
310 FOR Я TO 1 STEP -1
315 IF L(J|>- 10 THEN GO TO 350
320 PRINT L(J);
330 NEXT J
340 STOP
350 LET t|J)-L(J)-9
360 PRINT N$(l(JB;
370 GO TO 330
999 STOP
Программа 3.2 Преобразование десятичных чисел в числа с произвольным основанием (от 2 до 16) системы счисления.
3.3 ПРЕОБРАЗОВАНИЯ ЧИСЕЛ С ПРОИЗВОЛЬНЫМ ОСНОВАНИЕМ (ОТ2 ДО 16) СИСТЕМЫ СЧИСЛЕНИЯ В ДЕСЯТИЧНЫЕ.
100 PRINT’CONVERTER OF BASIS *;
105 PRINT "BIN - HEX TO DECIMAL*
106 PRINT
110 INPUT Z$
120 PRINT Z$ 130 PRINT ’BASIS: *;
140 INPUT В
150 PRINT В
160 LETN-0
170 LET L- LEN Z$
175 GOSUB 300
180 FOR 1-1 TO L-1
182 LET E-CODE Z$(l)
184 IF E>58 THEN IETE-E-7
190 LET N-(N+ E -48)‘B
200 NEXT I
205 LET E-CODE Z$(L)
207 IF E>58 THEN LET E-E-7
210 LET N-N+ E -48
220 PRINT ‘ DECIMAL: *;N
230 STOP
300 FOR 1-1 TO L
305 LET C-CODE Z${l)-48
306 IF C>10 THEN LET C-C-7
310 IF C>-B THEN GO TO 350
315 NEXT I
320 RETURN
350 PRINT‘CONVERTING NOTABLE’
999 STOP
Программа 3.3 Профамма преобразования чисел с произвольным основанием (от2 до 16) системы счисления в десятичные.
3.4 БЕГУЩАЯ СТРОКА.
50 LET WAIT-500
100 LET A$-‘HELLOWl I AM A ‘SPECTRUM ‘
105 LET L-LEN A$
110 FOR K-1 TO L-1
120 PRINT AT 10,32-K;A$(1 TO K)
125 GOSUB WAIT
130 NEXT К
140 FOR K-32-L TO 1 STEP -1
150 PRINT AT 10,K^$;
160 GOSUB WAIT
170 NEXT К
180 FOR K-1TOL
190 PRINT AT 10,0;A$(K TO L)
195 GOSUB WAIT
200 NEXT К
210 GOTO 110
500 FOR >1 TO 20: NEXT J: RETURN
Программа 3.4 "Бегущая строка".
Программа 3.4 генерирует "бегущую строку". Текст задается в строке 100. Не забывайте о необходимости пробела в конце строки заключенной в кавычки для стирания предыдущего текста. Скорость движения строки определяется задержкой, которая задается в строке 500.
3.5 ПЕРЕВОД АРАБСКИХ ЧИСЕЛ В РИМСКИЕ.
Программа 3.5 выполняет перевод десятичных чисел в "римские”.
Максимальное значение переводимого числа ограничивается в строке 140 и равняется 3000.
10REM
20 LET AUS-1000
100 INPUT "Z-';Z
120 PRINT Z;*-*;
130 LET B-Z
140 IF B<- 3000 THEN GOTO 200
150 PRINT "NUMBER BIG*
160 GOTO 100
200 GOTO 500
210 LET B- INT (Z/F)
220 GOSUB AUS+30*(B-0)
230 LET Z-Z-BT
240 RETURN
500 LET F-1000: LET A$-*M*: GOSUB 210
510 LET F-900: LET A$-'CM": GOSUB 210
520 LET F-500: LET A$-’D*: GOSUB 210
5301П F-400: LET A$-"CD': GOSUB 210
540 LET F-100: LET AS-’C*: GOSUB 210
550 LET F-90: LET A$-"XC: GOSUB 210
560 LET F-50: LET A$-’L": GOSUB 210
570 LET F-40: LET А$-Ж: GOSUB 210
580 LET F-10: LET A$-T: GOSUB 210
590 LET F-9: LET A$-"IX": GOSUB 210
600 LET F-5: LET A$-V: GOSUB 210
6101П F-4:1П A$-4V: GOSUB 210
620 LET F-1: LET A$-T: GOSUB 210
999 STOP
1000 FOR 1-1 TO В
1010 PRINT A$;
1020 NEXT I
1030 RETURN Профамма3.5 Перевод десятичных чисел в "римские".
Си?111*6!*1 попробуйте перевести 1993. Должно получиться М
3.6 СИСТЕМА ЛИНЕЙНЫХ УРАВНЕНИЙ С ТРЕМЯ НЕИЗВЕСТНЫМИ.
Было бы неправильно, если в сборнике программ для компьютера отсутствовали программы для решения математических задач. Для решения такого рода задач и начала создаваться вычислительная техника. В качестве примера "математической задачи" для компыотеравдополнение к программе 1.15 приведем программу решающую систему линейных уравнений с тремя неизвестными вида:
e(i,i)*x+e(i,2)*Y+e(i,3)*z - Ю)
в(2,1) *Х+я(2,2) *Y+e(2,3) *Z - b(2)
•(3,1) *Х+а(3,2) *Y+a(3>3) »Z - b(3)
В программе производится ввод коэффициентов (строки 100-140,300-350) вычисление детерминанта (строки 200-225),
проверка его на отличие от нуля (строка 1025) и вычисление значений переменных (строки 400 -520).
10 DIM А(3,3)
12 DIM Н(3)
15 DIM ЩЗ)
20 GOTO 1000
100 PRINT’INPUT 3X3MATR:’
105 FOR 1-1 TO 3
110 PRINT l;’.ROW:’;
115 FOR >1 TO3
120 INPUT A(I,J|
125 PRINT A(I,J);”;
130 NEXT J
135 PRINT
140 NEXT I
150 RETURN
200 LET О-А(1,1ПА(Х2ГА(ЗЛ)-А(2^ГА(3,2|
210 LET D-D-A(1,2)*(A(2,1)*A(3,3)-A(2,3)*A(3,1))
220 LET D-D+A(1,3)*(A(2,1)’A(3,2)-A(2,2)*A(3,1))
225 RETURN
300 PRINT ’INPUT B(l):’
310 FOR 1-1 TO 3
320 INPUT B(l): PRINT B(l): NEXT I
350 RETURN
400 LET >1: GOSUB 600: LET L-D
410 GOSUB 200: LET X-D/L
420 PRINT "X-’^
430 GOSUB 700: LET J-2: GOSUB 600: GOSUB 200
440 LET Y-D/L: PRINT -Y-’;Y
450 GOSUB 7001ET >3: GOSUB 600: GOSUB 200
460 LET Z-D/LPRINT ’Z-’;Z
520 GOTO 700
600 FOR 1-1 TO3
610 LET H(I)-A{I,J)
620 LET A(l, J)-B(l)
630 NEXT I
640 RETURN
700 FOR 1-1 TO 3
710 LET A(I,J)-H(I)
720 NEXT I
730 RETURN
10OO GOSUB 100
1002 PRINT
1005 PRINT ’ DETERMINANT
1010 GOSUB 200
1020 PRINT ’DET-’;D
1025 IF D<> 0 THEN GOTO 1050
1030 PRINT
1032 PRINT ’NO SOLUTIONS!’
1035 GOTO 9999
1050 GOSUB 300
1060 GOSUB 400
9999 STOP
Программа 3.6 Программа решения системы линейных уравнений с тремя неизвестными.
3.7 ФОРМИРОВАНИЕ ЛИСТИНГА.
Следующая программа позволяет осуществлять ввод с клавиатуры строк длинной до 20 знаков, формирование списка из 40 строк, сортировку строк в порядке возрастания кодов составляющих их символов и удаление ошибочно введенных строк.
50 DIM А$(40,20)
60 LET N-1
70 DIM D${20)
200 CIS
210 LET M-18
215 LET K-0
220 PRINT TAB M;’I)NPUT
230 PRINT TAB M;’D)ELETE’
240 PRINT TAB M;'L)IST
250 PRINT TAB M;*E)ND*
260 IF INKEYS -T THEN GOTO 500
265 IF INKEYS -V THEN GOSUB 1100
270 IF INKEYS -’E’ THEN GOTO 900
280 IF INKEYS -ТУ THEN GOSUB 1500
300 IF K-l THEN GOTO 200
310 GOTO 260
500 CIS
520 INPUT *INPUT:’;D$
525 PRINT D$
530 IF D$(1)-’ ’ THEN GOTO 220
535 LET B$-D$
540 GOSUB 1205
550 GOTO 520
900 CIS
910 PRINT AT 11,13;’END’
920 STOP
1100 CIS
1110 FOR 1-1 TON-1
1120 PRINT A$(l)
1125 NEXT I
1130 PAUSE 4E4
1135 LET K-l
1140 RETURN
1205 LET J-1
1210 IF N-1 THEN GO TO 1330
1220 IF B$<A$(1) THEN GO TO 1330
1230 LET Jl-1
1235 LET J2-N
1240 LET J-INT ((Jl+J2)/2)
1250 LET C$-A${J|
1260 IF CS-BS THEN GO TO 1390
1270 IF B$<C$ THEN LET J2-J
1280 IF B$>C$ THEN LET J1-J
1290 IF Jo INT (Л+J2)/2| THEN GO TO 1240
1295 LET J-b-1
1330 LET Jl-N+1
1340 IF J1O1 THEN GO TO 1370
1350 LET A$(J1)-A$(J1-1)
1360 LET J1-J1-1
1365 GO TO 1340
1370 LET А$Ц-В$
1380 LET N-N+1
1382 LET K-1
1385 RETURN
1390 PRINT AT 3,1;’EXIST IN 11$Г
1392 PAUSE 4E4
1395 LET K-1
1399 RETURN
1500 REM DELETE
1505 CLS
1510 PRINT’DELETE:’;
1515 INPUT D$
1517 LET B$-D$
1520 PRINT B$
1525 LET J-l
1530 IF No 1 THEN GO TO 1550
1535 PRINT’DELETE BEFORE INPUT
1540 PAUSE 4E4
1545 GO TO 500
1550 LET JI-1
1555 LET J2-N
1560 LET J- INT «Jl+J2)/2)
1565 LET C$-A$(J)
1570 IF C$-B$ THEN GO TO 1600
1575 IF B$<C$ THEN GO TO 1585
1580 LET J1-J
1582 GO TO 1590
1585 LET J2-J
1590 IF Jo INT ((J1+J2)/2)THEN GO TO 1560
1595 PRINT ’NO IN LIST*
1597 LCT K-1
1598 PAUSE 4E4
1599 RETURN
1600 LH J1-J
1610 IF Jl-N THEN GO TO 1650
1620 LET A$(J1)-A$(J1+1)
1630 LET Jl-Jl+1
1640 GO TO 1610
1650 LET N-N-1
1655 LET K-1
1660 RETURN
Программа 3.7 Формирование листинга.
3.8 СОРТИРОВКА.
Программа 3.8 производит сортировку имен введенных с клавиатуры. В строках 170 и 550 ограничивается количество строк выводимых на экран (15). Сортировка производится в соответствии с возрастанием кодов символов. Время затрачиваемое на сортировку зависит от количества введенных имен.
10 DIM А$(100,10)
20 LET N-l
100 CLS
110 PRINT AT 1,3;*INPUT:’
120 LET 1-4
130 INPUT A$(N)
140 IF A$(N,1)-* ’ THEN GO TO 500
142 PRINT AT 1,3;’
145 PRINT AT l,3;A$(N) 150LETN-N+1
160 LET 1-1+1
170 IF l>15 THEN LET 1-4
190 GO TO 130
500 as
502 PRINT AT 10,5;’SORT*
505 GOSUB 1000
507 OS
510 PRINT AT 1,3;’OUTPUT:’
515 LET 1-4
520 FOR J-1 TO N
525 PRINT AT 1,3;’
530 PRINT AT l,3;A$(J)
540 LET 1-1+1
550 IF I>15 THEN LET 1-4
560 NEXT J
570 STOP
1000 REM SHELL-METZNER SORT
1010 LET M-N
1020 LET M-INT (M/2)
1030 IF M-0 THEN RETURN
1040 LET J-1
1045 LET K-N-M
1050 LET l-J
1060 LET L-l+M
1070 IF A$(l) <- A$(L) THEN GO TO 1120
1080 LET H$-A$(l)
1083 LET A$(l)-A$(l)
1086 LET A$(L)-H$
1090 LET M-M
1100 IF KI THEN GO TO 1120
1110 GO TO 1060
1120 LET J-J+1
1125 IF >K THEN GOTO 1020
1130 GO TO 1050
Программа 3.8 Сортировка.
3.9 КАЛЕНДАРЬ-ЕЖЕДНЕВНИК.
Следующая программа устроена как ежед невник: необходимую запись можно найти по введенной вместе с ней дате. В программе можно осуществлять ввод данных склавиатуры, выводнаэкран соответствующего дате сообщения, удаление ненужных записей, вывод на экран списка всех занесенных дат и окончание работы с программой.
10 DIM А$(50,50)
20DIMD$(l,8)
30 DIM E$(l ,41)
40LETN-1
100 CIS
110 PRINT AT 3,3;’NOTEBOOK’; AT 3,18;’l)NPUr
120 PRINT AT 4,18;’O)UTPUT*
130 PRINT AT 5,18;*D)ELETE*
135 PRINT AT 6,18;"L)IST OF DATE’
140 PRINT AT 7,18;’E)ND"
150 IF INKEYS THEN GO TO 150
160 IF INKEYS -T THEN GO TO 500
170 IF INKEYS -’O’ THEN GO TO 700
180 IF INKEYS -’D’ THEN GO TO 900
190 IF INKEYS -*E* THEN GO TO 998
195 IF INKEYS -T THEN GO TO 800
199 GO TO 100
200 PRINT AT 10,1/DATE JT.MM.YY*;
210 INPUT D$(1)
220 PRINT AT 10,7;D$(l)
230 RETURN
500 CIS
505 GOSUB 200
510 PRINT AT IXI/TEXT:’;
520 INPUT E$(1)
530 PRINT E$(l)
560 GOSUB 1200
570 PRINT AT 20,6;’INPUT? (Y/N)'
580 IF INKEYS -~ THEN GO TO 580
590 IF INKEYS - V THEN GO TO 500
599 GO TO 100
700 CLS
710 GOSUB 200
720 GOSUB 1500
730 IF B-1 THEN GO TO 100
740 PRINT AT 12,1;-TEXT:,,A$(J,9 TO 41)
750 PAUSE 4E4
760 GO TO 100
800 CLS
810 FOR J-1 TO N
820 PRINT A$(J,1 TO 8)
830 NEXT J
840 PAUSE 4E4
850 GO TO 100
900 CIS
910 GOSUB 200
920 GOSUB 1500
930 IF B-1 THEN GO TO 100
940 GOSUB 1600
950 GO TO 100
998 CLS
999 PRINT ATI 0,10;’END*
1000 STOP
1200 REM SORT
1205 LET >1
1210 IF N-1 THEN GO TO 1370
1220 IF D${1)<A$(1,1 TO 8) THEN GO TO 1330
1230 LET JI-1
1235 LET J2-N
1240 LET J-INT {(J1+J2J/2)
1250 LET C$-A$(J,1 TO 8)
1260 IF C$-D$(1) THEN GO TO 139Q
1270 IF D$(1)<C$ THEN LET J2-J
1280 IF D$(1)>C$ THEN LET JI-J
1290 IF J<> INT ((J1+J2J/2) THEN GO TO 1240
1300 LET J-JH
1330 LETJ1-N+1
1340 IF JI <>1 THEN GO TO 1370
1350 LET A$(J1)-A$(J1-1)
1360 LET Jl-Jl-1
1365 GO TO 1340
1370 LET A$(J)-D$(1)+E$(1)
1380 LET N-N+l
1390 RETURN
1500 REM
1510 LET B-0
1525 LET J-1
1530 IF N<> 1 THEN GO TO 1550
1535 PRINT ’NO RECORDS’
1540 PAUSE 4E4
1545 GO TO 100
1555 LET Jl-1
1550 LET J2-N
1560 LET J-INT ((JI +J2)/2)
1565 LET C$-A$(J,1 TO 8)
1570 IF C$-D$(l) THEN GO TO 1599
1575 IF D$(1)<C$ THEN GO TO 1585
1580 LET JI-J
1582 GO TO 1590
1585 LET LET J2-J
1590 IF J<> INT ((Jl+J2)/2) THEN GO TO 1560
1595 PRINT ’NO IN LIST
1596 LET B-1
1597 PAUSE 4E4
1599 RETURN
1600 REM DELETE
1610 LET JI-J
1615 IF J1-N THEN GO TO 1650
НН—
б 1>.-:
1620 LET А$(Л)-А$(Л+1)
1630 LET J1-J1+1
1640 GO TO 1615
1650 LET N-N-l
1660 RETURN
Программа 3.9 Календарь-ежедневник.
ЗЛО СОРТИРОВКА СПИСКА ИМЕН.
Следующая программа производит сортировку десяти введенных с клавиатуры слов.Эгоудо&ю для составления алфавмгногосписка. Результат работы программы может выглядеть так:
Исходные данные Irvin Joe Kris Mike Robert Ann Bob Don Gene Helen
Поем сортировки Ann Bob Don Gene Helen Irvin Joe Kris Mike Robert
Слова сортируются в порядке возрастания кодов символов.
10 PRINT ’INPUT 10 NAMES’ 20 PRINT
100 LET N-10
105 DIM N$(N,15): DIM Z(N)
110 GOSUB 500
120 GOSUB 200
130 GOSUB 1000
140 GOSUB 1020
150 STOP
200REMSOPT
210 LET P-0
220 IF P-0 THEN LET Z(1)-0: LET P-1
230FOR >2TON
240 LET l-P
250 IF N$(J|<N$(P) THEN LET Z(J|-P: LET P-i GO TO 295
260 LETK-I: LET l-Z(l)
265 IF 1-0 THEN LET 2ОД- J: LET Z(J)-O: GO TO 295
270 IF N$ (J|<N#(Q THEN LET Z(K)- J: LETZ( J)-l: GO TO 295
290 GO TO 260
295 NEXT J
299 RETURN
500 REM INPUT
510 FOR >1 TO N
520 INPUT *:*;N$(J|
530 NEXT J: RETURN
1000 FOR 1-1 TO N
1005 PRINT AT l,0;N$(l)
1010 NEXT I: RETURN
1020 LET l-P: LET-J-1
1030 IF 1-0 THEN RETURN
1040 PRINT AT J,16;N$(I): LET >K1
1050 LET l-Z(l): GO TO 1030
Программа 3.10 Сортировка списка имен.
3.11 КАРТОТЕКА С ПОИСКОМ ПО КЛЮЧЕВЫМ СЛОВАМ.
Очередная программа выполняет функцию картотеки с поиском нужной информации по ключевым словам. При ввода информации программа предлагает сначала ввести ключевое слово и затем связанный с ним текст. При просмотре информации с клавиатуры вводится ключевое слово и на экране отображается соответствующий ему текст.
Символы <-- —> подсказывают, что нажимая клавиши 5 и 8 а можно просматривать содержимое картотеки вперед и назад.
100 LET N-40: LET Z-0: LET С-0 105 DIM N$(N,15): DIM R(N): DIM L(N)
110 DIM K$(3,10): DIM V$(10): DIM E$(N,50): DIM l${20): DIM U$(15)
120 LET K$(1)-*INPUr
130 LET K$(2)-’SE ARCH*
140 LET K$(3)-’END*
145 LET 1$-* *: REM 20 SPACE
150 LET ERR-9000
199 GO TO 1000
200 REM
210 LET P-0
220 IF P-0 THEN LET R(1)-0: LET L(l)-0: LET P-1
230 FOR >2 TO Z
240 LET l-P
250 IF N$(J)<N$(P) THEN LET R(J)-P:LET L(J)-O: LET ЦР)-Jt LETP-J: GO TO 295
260 LET K-1: LET l-R(l)
265 IF 1-0 THEN LET R(K)- J: LETR(J)-O: LET L(J)-K:GO TO 295
270 IF N$(J)<N$(I) THEN LET R(K)-J: LET R(J)-l: LET l(J)-K: LET Ц1)-J: GO TO 295
290 GO TO 100 260
295 NEXT J
298 LET C-1
299 RETURN
1000 CIS: PRINT AT 2,5;*INPUT; AT 3,5; *SEACH <XXXX>,;AT
4,5;*END*
1002 INPUT *?’;!$
1005 PRINT AT 20,0;L$
1010 LET L-LEN 1$
1020 FOR 1-1 TO L
1030 IF l$(l)-" ’ THEN GO TO 1100
1040 NEXT I
1050 GO TO ERR
1100 LET V$-I$(?TO 1-1)
1105 LET U$-I$(l+1 TOL) 1110 FOR 1-1 TO3
1120 IF V$-K$(l) THEN GO TO 1200
1130 NEXT I
1140 GO TO ERR
1200 IF V$(1 TO 3)-'INP" THEN GO TO 2000
1210 IF V$(1 TO 3)-"SEA" THEN GO TO 3000
1220 IF V$(l TO 3)-’END" THEN GO TO 4000
2000 LET Z-Z+1
2005 INPUT "SEARCH KEY:";N$|Z)
2010 INPUT "TEXT:";E$(Z)
2015 PRINT AT 20,0;’T
2020 LET C-0
2025 PAUSE 100
2030 IF INKEY$ -"" THEN GO TO 2030
2040 IF INKEYS -"8" THEN GO TO 2000
2050 GO TO 1000
3000 CLS
3010 IF C-0 THEN PRINT "ERROR IN KEY": GOSUB 200
3030 LET l-P
3040 IF 1-0 THEN GO TO 3080
3050 IF N$(l)-U$ THEN CIS: PRINT AT 1,2;N${I); AT 4,0;E$(l); AT
20,0;" --> ?":GO TO 3100
3060 LET I—R(l): GO TO 3040
3080 PRINT AT 20,0;!$;" T. GO TO 9005
3100 PAUSE 100
3105 IF INKEYS THEN GO TO 3100
3110 IF INKEYS -"8" THEN LET K-1: LET l-R(l): GO TO 3200
3120 IF INKEYS -"5" THEN LET K-1: LET 1-Ц1): GO TO 3200
3130 GO TO 1000
3200 CLS
3210 IF 1-0 THEN GO TO 3230
3220 PRINT AT 1,2;N$(I); AT 4,0;E$(l)
3225 PRINT AT 20,0;" --> ?": GO TO 3100
3230 PRINT "END "
3250 LET l-K
3260 PAUSE 100
3270 IF INKEY$ THEN GO TO 3270
3280 GO TO 3210
4000 STOP
9000 PRINT AT 20,0;V$;’ T 9005 IF INKEY$ -** THEN GO TO
9005
9010 GO TO 1000
Программа 3.11 Картотека с поиском по ключевым словам.
3.12 "ВЕЧНЫЙ" КАЛЕНДАРЬ.
В БЕЙСИКЕ компьютера СПЕКТРУМ имеются неточности, с одной из которых мы встретимся в очередной программе. Попробуйте вычислить:
PRINT 0.6*5 равно 3 PRINT INT(0.6*5) равно 2 PRINT INT(0.6000001*5) равно 3
Поэтому, дм получения верного результата, в строке 260 появляется несколько необычный коэффициент. Программа предлагает ввести дату в виде:
DATE: 01.02.1993
и выдает результат:
TODAY IS: МО
(Сегодня понедельник)
100 PRINT ’CALENDAR*
1 10 PRINT TNPUT:DDMM.YYYY"
120 INPUT *DATE:';A$
200 LET D- VAL A$(l TO 2)
210 LET M- VAL A$(4 TO 5)
220 LET > VALA$(7 TO 10)
230 IF M>2 THEN GO TO 260
240 LET M-M+12: LET >J-1
260 LET N-D+2*M+ NT (.6000001*(M+l))+> INT (V4HNT U/100H INT (V400H-2
270 LET N- INT IN/74NT (N/7|)*7+0.5)
280 LET N-2*N+1
290 LET W$-’SASUMOTUWETHFR*
300 PRINT TODAY IS:*;W$(N TO N+l) Программа 3.12 “Вечный"календарь.
ГЛАВА 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 D-1 THEN GOSUB 950
320 FD-0THEN PRINT N
330 RETURN
900 REM HEX BYTE
910 LET B-PEEK L
920 LET Bl- (INT (B/16J+48)
925 GOSUB 980
930 LET B1-(B-(INT (B/16)*16)+48)
935 GOSUB 980
940 RETURN
950 REM HEXADRESS
952 LET H-4096
955 LET Bl-(INT (B/HJ+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 B1>57 THEN LET B1-B1+7
985 PRINT CHRS Bl;
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;’S)TART
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
б 5
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 А$)-"Н* THEN LET D-0: GO TO 2100
2060 LET N-VAL A$
2070 RETURN
2100 LET N-0
2110FORX-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
2500 REM INPUT
2505 LET 1-0
2510 CIS
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-1 TOLENA5
2632 LET B- CODE A$(X)-48
2633 IF B>9 THEN LET B-B-7
2634 LET N-N46+B
2635 NEXT X
2636 LET B-N
2640 GOSUB 920
2650 POKE UN
2660 GO TO 2580
2700 LET L-L-1
2710 GO TO 2585
3000 REM START
3010 GOSUB ADRESS
3015 GOSUB 300
3020 PRINT USR N
3030 PAUSE 4E4
3040 RETURN
3900 CIS
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 INKEY5 -*M*THEN GO TO 4760
4700 NEXT S
4710 PRINT
4740 LET N-L+l
4745 CLS
4750 GO TO 4615
4760 RETURN
Программа 4.1 Программа МИНИ-МОНИТОР.
При запуске программа ожидает ввода с магнитофона программы в машинных кодах, которую предстоит редактировать. Если необходимо набирать новую программу, то запуск следует осуществить со строки 100, выполнив RUN 100. После запуска появляется меню:
MINI-MONITOR
INPUT
DUMP
START
END
Выбирая одну из букв задаем режим работы, в котором будем работать. Выбрав! входим в режим ввода информации начиная с указанного адреса. На экране появляется новое меню:
END ENTER EORVARD RETURN
Задается адрес начала программы в десятичном вида и автоматически вычисляется его шестнадцатиричный эквивалент. Например: 32500 соответствует 7EF4H. После чего на экране появляется адрес, содержимое ячейки памяти, и приглашение для ввода новойинформациив выбранную ячейку —>.
32500 21 —>Если набрать, например, ЗБ, то на экране появится:
3250021—> ЗЕ
3250100->
и программа предложит произвести ввод в следующую ячейку памяти. В случае если нет необходимости изменить содержимое ячейки, то нажав ENTER можно перейти к ячейке с очередным адресом, а нажав R можно вернуться к предыдущему и исправить ошибочно введенную информацию. Быстро просмотреть содержимое области памяти можно выбрав в меню DUMP. При этом на экран выводится:
ADRESS 1000Н
4096 9А 0D D6 С4 38 F9 01 ЕС
4104 C900000000FFFFFF
Запустить программу с указанного адреса можно выбрав в меню
START. В качестве примера попробуйте с помощью редактора ввести в память компьютера и выполнить короткую программу в машинных кодах. При выполнении эта программа выводит на экран цифру.
ЗЕ 01 LDA,!
С6 01 ADDA,!
4F ldca
06 00 LDB.0
С9
RET
Влевом столбце приведены машинные коды, а вправоммнемонические обозначения этих команд. В память компьютера, естественно, вводятся только машинные коды.
После окончания пользования редактором выберите в меню E)ND для возвращения в БЕЙСИК.
4.2 ПРОГРАММА "ДОМАШНЕЕ ХОЗЯЙСТВО, РАСХОДЫ”.
Следующая программа позволяет подсчитывать расходы
при ведении домашнего хозяйства. При запуске программы на экран вывод ится следующая картинка:
MONTH: JAN SUM RENT TRANSPORT ENERGY FOOD RELAXATION BILL-1 BILL-2 ETC END MONTH RESULT
135.50
125.00
10.50
В этомменю предусмотрены основные виды расходов, а также некоторые управляющие слова. Например для выбора нового месяца необходимо наорать:
MONTH FEB
и на экране будет меню с расходами за февраль. Дополнить записи молено в любой момент и на экране будет произведено суммирование по д анному виду расходов и подведен общий итог за месяц. Если, например, необходимо учесть расходы на энергию, то следует сделать запись:
ENERGY 125.00
BILL-1, BILL-2 - счета состоящие из нескольких статей затрат. При их выборе в главном меню на экране появляется подменю, работа с которым ведется по прежним правилам.
Привыборе RESULT подводится итог по всем статьям затрат завесь год.
Названия расходов выбраны условно, поэтому Вы можете в программе дать ими другие названия.
________ Работа программы эквивалентна заполнению таблицы ляп расходов:
, » - r i -I JAN MAR APR MAY AW W8 NOV PRC RES
зим
transport
КЖГ
ШЛХАТЮК
внха
BILLS
Etc,
Каждой клеточке таблицы в программе соответствует элемент массива К(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 8(13,5)
130 DIM К(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)--ENERGr
240 LET K$(5)-*FOOD*
250. LET K$(6)-’RELAXATION”
260 LET K$(7)-’BILL-1’
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)“*RESULT
300 LET A$(1)-TOSr
310 LET A$(2)-’SCHOOL’
320LETA${3)-'SPORr
325 LET A$(4)-"RETURN*
350 LET B$0)-"TELEFONE*
360 LET В$|2)-"МЕАГ
370 LET B$(3)-'GREENS"
380 LET B$(4)-'CLOTHES"
390 LET B$|5)-’5HOP"
395 LET K$(13)-’JAN-
400 LET К$04)-ТЕВ’
405 LET K$(15)--MARW
410 LET K$(16)-’APR"
415 LET K$(17)-’MAY*
420 LET K$(18)-’ JUN-
425 LET K$(l 9)-- JUL-
430 LET K$(20)--AUG’
435 LET K$(21)--SEP-
440 LET K$(22)--OKT
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: ’;K$(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 LET L-LENIS
1020 FOR 1-1 TO L
1030 IF l$ffl-* ' THEN GO TO 1100
1040 NEXT I
1050 GO TO ERR
1100 LET У$(1)-1$(ГО 1-1)
1110 FOR N-1 TO IK
1120 IF V$(1)-K${N) 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 FOR N-1 TO 5
1180 IF V$(1)-B$(N| THEN GO TO 3100
1190NEXTN
1199 GOTO ERR
1200 IF V$(1,1 TO 3)-"END* THEN STOP
1201 IF V$(1,1 TO 3HRES’ THEN GO TO 1700
1202 IF V$(l,1 TO 3)-*MON* THEN GO TO 1500
1204 IF V$(1,1 TO 3j--Bll’ THEN GO TO 1600
1206 GOSUB 1210
1208 GO TO 1260
1210 IF M-13 THEN GO TO ERR
1215 № N-1 OR N>12 THEN GO TO ERR
1220 LET 1-1+1
1230 FOR JH TO I
1240 IF !$(>’•’ THEN LET l$(JH$(J+1):
LET l$(*1H$(>2): LET *
1250 NEXT I RETURN
1260 LET W-VAL l$(l TO l-l)
1270 LET
1280 LET iqi3,NHqi3M+w
1290 LET K(M,1)-K(M,I)+W
1295 LET K(13,1)-K(13,1)+W
1300 LET W-K(M,N): 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$(L-2):
LET l$(L-2)-*.’
1420 PRINT AT N+V, 30-L;I$(TO Ц
1430 RETURN
1500 LET V$(1)-I$(l+1 TOL)
1510 FOR N-13 TO 24
1520 IF V$(1)-K$(N) THEN GO TO 1560
1530 NEXTN
1550 GO TO ERR
1560 LET M-N-12: GO TO 500
1600 IF M-13 THEN GO TO 1800
1605 LET W- VAL K$(N,6)
1610 CLS: LET N-M+12
1620 PRINT AT OA’MONTH*: ’;K$(N)
1650 LET W-W+1: 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 NEXTN
2070 LET W-K(M,7): LET N-2:GOSUB 1400
2080 GO TO 1000
2100 IF V$(l,l TO 3)-'RET 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
2150 LET K|M,7)-iqM,7)+W
2155 LET K(13,7)-K(13,7)+W
2157 LET K(13,1W3,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 1-1 TO 5
3020 PRINT AT l+V,2;8$(l)
3030 NEXT I
3035 PRINT AT 10,2A$(4)
3040 FOR N-1 TO 5
3050 LET W-B(M,N):GOSUB 1400
3060 NEXTN
3070 GO TO 1000
3100 IF V$(1,1 TO 3J-*RET THEN GO TO 500
3105 GOSUB 1210
3110 LET W-VAL l$(l TO L-l)
3130 LET B(M,N|-B(M,N)+W
3140 LET B(13,N)-B(13,N)+W
3150 LET K(M,8)-K(M,8)+W
3155 LET K(13,8)-K(13,8)+W
3157 LET К(13,1НФЗ,1НЛ¥
3160 LET W-B(M,N): GOSUB 1400
3170 GO TO 1000
9000 PRINT AT 20,0;V$(1);’ Г
9020 GO TO 1000
Программа 4.2Программа "Домашнеехозяйство. Расходы".
4.3 ПРОГРАММА "АНАЛИЗ ФУРЬЕ".
Программа выполняющая анализ Фурье.
Анализ Фурье основываетсянатом, что любую периодическую функцию можно представить в виде суммы гармоник и постоянной составляющей:
fit) * c(O)+SUMM(s(n)Sin nwt + с(п) Cos nwt),
где п от до n~N.
Поскольку формула представления произвольной периодической функции известна, то анализ сводится к вычислению коэффициентов с(0), s(n) и с(п). В программе приведенной ниже производится вычисление коэффициентов для трех типов функций:
1. Периодическая линейно-возрастающая функция.
2. Периодическая линейно-возрастающая функция с возвращением к нулю.
3. Функция типа "меандр”.
Рассмотрим более подробно функцию третьего типа. График этой функции на интервале одного периода приведен на рисунке 4.1:
Рис. 4.1
В программе задается количество точекнаисходномграфике функции через которые должна пройти кривая построенная по найденным коэффициентам. Известно, что поставленная задача имеет решение, если выполняется условие:
NP > NH*2+1>
NP - число точек
NH - число гармоник
В данном случае выбрано NP=16, NH=7
После выполнения вычислений на экран выводится таблица вида:
n cos sin
0 0 0
1 2
3
4 5
6 7
0 0
0 0
0 0 О
0.9426 О
0.2806 О 0.1252 О
0.0372
Далее выводится гистограмма амплитудных значений гармонических составляющих:
Sinus
Cosinus
Наконец на экране вычерчиваются графики гармоник и трафик их суммы, приближенный по своему виду к исходной функции.
20 CIS: PRINT AT 1,2;*FOURIER 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
70DIMF(NP+l) DIMS(NP+1):DIMC(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(I-1)+DY: NEXT I
130 LET F(l)-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(l)-0 LET DY-2/NP
220 FOR 1-2 TO NP/2
225 LET F(I|-F(I-1)+DY: NEXT I
230 LET F(NP/2+1)-0.5
235 FOR l-NP/2+2 TO NP+1
240 LET F(l)-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+1)-0
320 FOR 1-2 TO NP/2
325 LET F(l)-0.75:NEXT I
330 FOR l-NP/2+2 TO NP
335 LET F(l)--0.75: NEXTI
340 GO TO 500
500 REM FOURIER -ANALYSE
502 CIS
505 PRINT AT 1,2;’N*; AT 1,10;’COS’; AT 1,20;-51ЬГ
510 LETZ-2/NP: LET P-0
520 LET Cl-COS (Z‘PI): LET SI- SIN (Z*PI)
530 LET C-1: LET S-Q: LET P-0
540 LET U1-0: LETU2-0
550LETN-NP
560 LET UO-F(N)+2*C*U1-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-1 E-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 (J*A)/J: LET C(P+1)-A
636 LET B-INT (ГВ)/J: LET S(P+1 )-B
638 IF P-0 THEN LET A-A/2
640 PRINT AT P+3,2;P; AT P+3,10 A
AT P+3,20;B
650 IF P-NH THEN GO TO 900
660 LETQ-C1*C-S1*S
670 LETS-C1*S+S1*C
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 W-(P-1)‘2‘P1 ‘1/360
1470 LET Y-Y+S(P)‘SIN W+QP)‘ COS W
1480 NEXTP
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(1)*70+95
1535 LETXP-20
1540 PLOT XP,Y
1550 FOR 1-2 TO NP+1
1560 LET Y1-Y: LETX1-XP
1570 LET XP-F(l)‘70+95
1575 LET XP- INT (X*(M 1+20.5)
1580 DRAWXP-X1,Y-Y1
1590 NEXT I
1600 GOSUB 1990
1610 IF INKEY$-“ 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 Программа "Анализ Фурье".
СОДЕРЖАНИЕ
ВВЕДЕНИЕ...........................л...........3
Г Л А В Л 1 4
1.1 ФОРМ И РОВЛПИ Е СИ М ВОЛОВ НА ЭКРАН Е.4
1.2 ПРЕОБРАЗОВАНИЕ ДВОИЧНОГО КОДЛ В ДЕСЯТИЧНЫЙ..............................5
1.3 "МОНСТР"...........................6
1.4 ДВИЖУЩИЙСЯ "МОНСТР"................7
1.5 ДВИЖЕНИЕ "МОНСТРА" ПО ГОРИЗОНТАЛИ. ..9
1.6 УПРАВЛЕНИЕ ДВИЖЕНИЕМ "МОНСТРА".....9
1.7 ТРАЕКТОРИЯ ПАДАЮЩЕГО ТЕЛА.........10
1.8 ВЛИЯНИЕ НАЧАЛЬНОЙ СКОРОСТИ........12
1.9 ВЛИЯНИЕГОРИЗО11ТАЛЫ1ОЙ НАЧАЛЬНОЙ СКОРОСТИ..........................12
1.10 ИГРОВАЯ ПРОГРАММА "АРТИЛЛЕРИЯ" . 14
1.11 ИГРОВАЯ ПРОГРАММА "ПИТОН"^.......17
1.12 "ЛАМБАДА"........................20
1.13 АЛЬТЕРНАТИВНАЯ ЗАПИСЬ МЕЛОДИЙ....22
1.14 "ЭЛЕКТРОМУЗЫКАЛЬНЫЙ ИНСТРУМЕНТ". ...22
1.15 ПРОГРАММИРОВАНИЕ ПО ИНСТРУКЦИИ "OUT".............................23
1.16 РЕШЕНИЕ КВАДРАТНЫХ УРАВНЕНИЙ.....23
Г ЛАВА 2...................................24
2.5 СПИРАЛЬ...........................30
2.6 ЭКСПОНЕНЦИАЛЬНАЯ СПИРАЛЬ..........32
2.7 ЛОГАРИФМИЧЕСКАЯ СПИРАЛЬ...........32
2.8 КАРДИОИДА............................33
2.9 ЦИКЛОИДА.............................34
2.10 ФУНКЦИЯ ROSETTE.....................35
2.11 ТРЕХМЕРНЫЕ КООРДИНАТЫ...............35
2.12 ПОВЕРХНОСТЬ СЛОЖНОЙ ФОРМЫ...........36
2.13 ПРОГРАММА "КОМПЬЮТЕРНАЯ ГРАФИКА" ...38
2.14 ПРОГРАММА "КОМПЬЮТЕРНАЯ ГРАФИКА 2" 39
2.15 ПРОГРАММА "КАЛЕЙДОСКОП".............40
2.16 ПРОГРАММА "КАЛЕЙДОСКОП 2"......... 41
2.17 ПОСТРОЕНИЕ ТРЕХМЕРНЫХ ИЗОБРАЖЕНИЙ НА ПЛОСКОСТИ......................41
2.18 ИЗОБРАЖЕНИЕШАРА.....................44
ГЛАВА 3 ................................... 45
3.1 ФОРМИРОВАНИЕ БОЛЬШИХ БУКВ............45
3.2 ПРЕОБРАЗОВАНИЕ ДЕСЯТИЧНЫХ ЧИСЕЛ В ЧИСЛА С ПРОИЗВОЛЬНЫМ ОСНОВАНИЕМ ЮТ 2 ДО 16) СИСТЕМЫ СЧИСЛЕНИЯ......47
3.3 ПРЕОБРАЗОВАНИЯ ЧИСЕЛ С ПРОИЗВОЛЬНЫМ ОСНОВАНИЕМ (ОТ2 ДО 16) СИСТЕМЫ СЧИСЛЕНИЯ В ДЕСЯТИЧНЫЕ 48
3.4 БЕГУЩАЯ СТРОКА.................49
3.5 ПЕРЕВОД АРАБСКИХ ЧИСЕЛ В РИМСКИЕ 50
3.6 СИСТЕМА ЛИНЕЙНЫХ УРАВНЕНИЙ С ТРЕМЯ НЕИЗВЕСТНЫМИ......................51
3.7 ФОРМИРОВАНИЕ ЛИСТИНГА................53
3.8 СОРТИРОВКА...........................56
3.9 КАЛЕНДАРЬ-ЕЖЕДНЕВНИК.................58
3.10 СОРТИРОВКА СПИСКА ИМЕН..............61
3.11 КАРТОТЕКА С ПОИСКОМ ПО КЛЮЧЕВЫМ СЛОВАМ............................62
3.12 "ВЕЧНЫЙ" КАЛЕНДАРЬ..................65
ГЛАВА 4............................66
4.1 ПРОГРАММА "МИН И-МОНИТОР"...66
4.2 ПРОГРАММА "ДОМАШНЕЕ ХОЗЯЙСТВО, РАСХОДЫ".........................71
4.3 ПРОГРАММА "АНАЛИЗ ФУРЬЕ"....78
ДЛЯ ЗАМЕТОК
ЗДЕСЬ МОГЛА БЫ РАЗМЕСТИТЬСЯ ВАША РЕКЛАМА
Подписано в печать 23/3 1992 г.
Тиран 20000 Обьеи 6,0 п.ло зак.100
3-я типография ВО ’’Наука”
Москва I07I43 Открытое шоссе, 28