Text
                    

МОСКВА 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