Программа перевода 2-ичного числа в 10-ичную систему

Пример. Найти 10-ичное представление для числа А(10) = 11011(2) =

= 1×24 + 1×23 + 0×22 + 1×21 + 1×20 = 27

Вариант 32

Программа перевода 8-ричного числа в 10-ичную систему

Пример. Найти 10-ичное представление для числа А(10) = 243(8) =

= 2×82 + 4×81 + 3×80 = 163

Варианты 31-32

Посредством оператора INPUT задается количество цифр в числе, после чего организуется цикл для ввода этих цифр в массив a(i). В другом цикле определяется сумма, дающая искомое число. Вывод на экран:

10101(2) = 21(10)

Вариант 33

Программа перевода 2-ичного числа в 10-ичную систему - student2.ru Программа вычисления суммы с заданной точностью с = 10-6 для

x = 0,35 x = 0,4 x = 0,5 x = 0,7 x = 0,9

| y(i+1) – y(i) | < c

Вычисляются значения функции для i-го и i+1-го шага, разность которых берется по модулю. Когда их разность станет меньше заданной точности, то процедура заканчивается и дает искомое значение у. Вывод на экран:

x = 0.35 y =

x = 0.40 y =

Вариант 34

Программа вычисления определителя 3-го порядка

Программа перевода 2-ичного числа в 10-ичную систему - student2.ru Программа перевода 2-ичного числа в 10-ичную систему - student2.ru Программа перевода 2-ичного числа в 10-ичную систему - student2.ru Программа перевода 2-ичного числа в 10-ичную систему - student2.ru Программа перевода 2-ичного числа в 10-ичную систему - student2.ru Программа перевода 2-ичного числа в 10-ичную систему - student2.ru a1 b1 c1 где

D = a2 b2 c2 = a1 -b1 + c1 = ad - bc

a3 b3 c3

Контрольный пример:

Программа перевода 2-ичного числа в 10-ичную систему - student2.ru Программа перевода 2-ичного числа в 10-ичную систему - student2.ru Программа перевода 2-ичного числа в 10-ичную систему - student2.ru Программа перевода 2-ичного числа в 10-ичную систему - student2.ru Программа перевода 2-ичного числа в 10-ичную систему - student2.ru 2 4 2

D = 1 2 3 = 2 - 4 + 2 = 2(2×4 - 3×3) – 4(1×4 - 2×3) +

2 3 4 + 2(1×3 - 2×2) = 4

Вариант 35

Программа решения системы 3-х уравнений с 3-мя неизвестными

Программа перевода 2-ичного числа в 10-ичную систему - student2.ru Программа перевода 2-ичного числа в 10-ичную систему - student2.ru Программа перевода 2-ичного числа в 10-ичную систему - student2.ru a1x + b1y + c1z = h1 Матрица a1 b1 c1 h1

a2x + b2y + c2z = h2 коэффициентов a2 b2 c2 h2

a3x + b3y + c3z = h3 a3 b3 c3 h3

Определители системы

Программа перевода 2-ичного числа в 10-ичную систему - student2.ru Программа перевода 2-ичного числа в 10-ичную систему - student2.ru Программа перевода 2-ичного числа в 10-ичную систему - student2.ru Программа перевода 2-ичного числа в 10-ичную систему - student2.ru Программа перевода 2-ичного числа в 10-ичную систему - student2.ru Программа перевода 2-ичного числа в 10-ичную систему - student2.ru Программа перевода 2-ичного числа в 10-ичную систему - student2.ru Программа перевода 2-ичного числа в 10-ичную систему - student2.ru Программа перевода 2-ичного числа в 10-ичную систему - student2.ru Программа перевода 2-ичного числа в 10-ичную систему - student2.ru a1 b1 c1 h1 b1 c1 a1 b1 c1 a1 b1 c1

D = a2 b2 c2 Dx = h2 b2 c2 Dy = a2 b2 c2 Dz = a2 b2 c2 = a1 - b1 +

Программа перевода 2-ичного числа в 10-ичную систему - student2.ru a3 b3 c3 h3 b3 c3 a3 b3 c3 a3 b3 c3

Программа перевода 2-ичного числа в 10-ичную систему - student2.ru где + h1 = ad – bc

1. Если D ¹ 0, то x = Dx / D, y = Dy / D , z = Dz / D

2. Если D = 0 , а один из Dx, Dy, Dz ¹ 0 , то система решений не имеет

3. Если D = Dx = Dy = Dz= 0 , система имеет бесчисленное множество решений

Контрольные примеры:

Программа перевода 2-ичного числа в 10-ичную систему - student2.ru Программа перевода 2-ичного числа в 10-ичную систему - student2.ru Программа перевода 2-ичного числа в 10-ичную систему - student2.ru 3x +4y +2z = 5 x +y +z = 5 x + y + z = 5

5x - 6y - 4z = -3 x - y +z = 1 x – y + z = 1 -4x +5y +3z = 1 x +z = 2 x + z = 3

x = 1 y = -2 z = 5 Решений нет Бесчисленное множество решений

Вариант 36

Программа решения системы 2-х уравнений с 2-мя неизвестными

Программа перевода 2-ичного числа в 10-ичную систему - student2.ru Программа перевода 2-ичного числа в 10-ичную систему - student2.ru Программа перевода 2-ичного числа в 10-ичную систему - student2.ru a1x + b1y = h1 Матрица a1 b1 h1

a2x + b2y = h2 коэффициентов a2 b2 h2

Определитель системы

           
    Программа перевода 2-ичного числа в 10-ичную систему - student2.ru
  Программа перевода 2-ичного числа в 10-ичную систему - student2.ru     Программа перевода 2-ичного числа в 10-ичную систему - student2.ru
 

D = Dx = Dy = = a1h2 – h1a2

1. Если D ¹ 0 , то x = Dx / D и y = Dy / D

2. Если D = 0 и Dx ¹ 0 или Dy ¹ 0 , то система решений не имеет

3. Если D = Dx = Dy = 0 , то система имеет бесчисленное множество решений

Контрольные примеры:

Программа перевода 2-ичного числа в 10-ичную систему - student2.ru Программа перевода 2-ичного числа в 10-ичную систему - student2.ru Программа перевода 2-ичного числа в 10-ичную систему - student2.ru 2x + 3y = 8 2x + 3y = 8 2x +3y = 8

7x + 5y = -3 4x + 6y = 10 4x +6y = 16

x = 1 y = 2 Решений нет Бесчисленное множество решений

Варианты 34-36

Оператором DIM объявляются 4 массива: для матрицы коэффициентов, для элементов определителя, для значений определителей 3-го порядка (вариант 35) и определителей 2-го порядка (вспомогательный). Затем организуется двойной (вложенный) цикл для ввода матрицы коэффициентов и вывода ее на экран. Посредством тройного цикла (внешний цикл от 1 до 4, поскольку 4 определителя) осуществляется формирование определителей, вычисляемых подпрограммой вычисления определителя 3-го порядка. К подпрограмме, завершаемой оператором RETURN, обращаются с помощью оператора GOSUB. В подпрограмме осуществляется формирование в цикле операторов 2-го порядка, вычисляемых затем по формуле d = m(1,1)*m(2,2) – m(1,2)*m(2,1). В последнем блоке программы осуществляется анализ полученных решений.

                   
   
Логика цикла DO WHILE … LOOP (DO UNTIL … LOOP)  
 
Логика цикла DO … LOOP WHILE (DO … LOOP UNTIL)  
 
  Программа перевода 2-ичного числа в 10-ичную систему - student2.ru   Программа перевода 2-ичного числа в 10-ичную систему - student2.ru
 
 
   
Таблица 0.4.1


Оператор и его описание
DO WHILE i > 10000 i = i +1 LOOP Управляющий оператор цикла, повторяющий блок операторов, пока условие ложно, с проверкой условия в начале.
DO UNTIL INKEY$ <> "" IF i > 10000 THEN EXIT DO ELSE i = i +1 LOOP Управляющий оператор цикла, повторяющий блок операторов, пока условие истинно, с проверкой условия в начале.. Производит увеличение значения счетчика i до тех пор, пока не нажата любая клавиша. Предусмотрен досрочный выход из цикла при значении счетчика i > 10000.
DO IF i > 10000 THEN EXIT DO ELSE i = i +1 LOOP WHILE INKEY$ = "" Управляющий оператор цикла, повторяющий блок операторов, пока условие ложно, с проверкой условия в конце. Производит увеличение значения счетчика i до тех пор, пока не нажата любая клавиша. Предусмотрен досрочный выход из цикла при значении счетчика i > 10000
DO i = i +1 LOOP UNTIL i < 10000 Управляющий оператор цикла, повторяющий блок операторов, пока условие истинно, с проверкой условия в конце.
PRINT "Нажмите клавишу ESC": DO: LOOP WHILE INKEY$ <> CHR$(27) Пустой цикл, осуществляющий задержку до нажатия клавиши Esc.
SWAP x( i ), x( j ) Оператор, взаимно меняющий значения двух переменных.
INKEY$ Функция, читающая символы с клавиатуры. Если символ не был считан, то возвращается нулевая строка. Не дублирует ввод с клавиатуры выводом на экран (без эха).
CHR$(27) Символьная функция, возвращающая строку из одного символа, ASII-код которого является аргументом, где код – число от 0 до 255. В данном случае аргумент – код клавиши Esc.
GOSUB 300 Управляющий оператор вызова подпрограммы на строке 300.
RETURN 10 Управляющий оператор выхода из подпрограммы, возвращающий на строку 10. Если метки нет, то управление возвращается на следующую за GOSUB строку.


К лабораторной работе № 5

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

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

Структура создаваемой программы: главный модуль программы, осуществляющий: а) выбор варианта работы с файлами и обращение по результатам выбора к соответствующей подпрограмме, б) побуквенный ввод слов в оперативную память, с последующим использованием их для создания файла или добавления в файл слов, в) формирующий условия завершения работы с программой; а также 3 подпрограммы: создания файла, добавления слов в файл и считывания слов из файла.

В главном модуле посредством операторов PRINT реализуется выводимое на экран своеобразное меню, обеспечивающее выбор варианта работы с файлами, осуществляемый оператором INPUT. Также операторами INPUT реализуется ввод имени файла, задается число вводимых слов, а также организуется блок побуквенного ввода слов в оперативную память, причем для последнего INPUT со строковой переменной помещается в двойной цикл. Поскольку программа работает с 5-буквенными словами, то один из циклов (для ввода букв слова) будет от 1 до 5, тогда как верхний предел второго цикла определяется числом вводимых слов.

Управляющим оператором SELECT CASE … END SELECT обрабатываются результаты выбора, обеспечивая обращение к выбранной подпрограмме с помощью оператора GOSUB, причем каждому GOSUB должен соответствовать оператор RETURN в подпрограмме. В противном случае Бейсик выдаст сообщение об ошибке "RETURN без GOSUB".

Подпрограммы обычно располагаются в конце программы, причем перед первой из них необходимо поставить оператор GOTO или IF…THEN, чтобы исключить обращение к подпрограмме без оператора GOSUB.

Пусть обращение к подпрограмме создания файла обеспечивается оператором GOSUB 50. Рассмотрим эту подпрограмму:

50 OPEN p2$ FOR OUTPUT AS #2

60 FOR j =1 TO N1

70 WRITE #2, x10$ (1, j); x10$ (2, j); x10$ (3, j); x10$ (4, j); x10$ (5, j)

80 PRINT x10$ (1, j); x10$ (2, j); x10$ (3, j); x10$ (4, j); x10$ (5, j)

90 NEXT j

100 CLOSE #2

110 RETURN

Оператор OPEN в строке 50 открывает файл для создания по каналу 2. Имя файла задается в главном модуле с помощью строковой переменной p2$. Далее в строках 60-90 организуется цикл для записи в файл N1 5-буквенных слов посредством оператора WRITE #2 в строке 70, который записывает в файл в одну строку 5 элементов (букв) массива x10$. Оператор PRINT в строке 80 выводит на экран записываемое в файл слово. По завершению цикла оператор CLOSE #2 закрывает файл, а RETURN завершает подпрограмму, передавая управление оператору, следующему в главном модуле программы за оператором GOSUB 50. Подпрограмма добавления слов в файл аналогична рассмотренной и отличается лишь заменой ключевого слова OUTPUT в строке 50 на APPEND, также лучше изменить и номер канала. Одновременно можно открыть несколько файлов, но каждый по своему каналу, обозначаемому своим номером от 1 до 255. Сколько всего можно открыть файлов, зависит от файла конфигурации компьютера. Во избежание неприятностей рекомендуется не открывать сразу слишком много файлов, а по окончании работы с файлом сразу же закрыть его.

В подпрограмме считывания в строке с оператором OPEN ставится ключевое слово INPUT, а для считывания данных используется оператор INPUT #n (где n – номер канала), пос-тавленный в двойной цикл. Верхний предел одного цикла определяется числом букв в слове, а второго – количеством читаемых слов. С помощью оператора PRINT считываемые слова выводятся на экран. С помощью функции EOF(n), где n – номер канала, следует предусмотреть выход из цикла в случае, когда заданное число считываемых слов превышает число записанных в файл слов. Это позволит избежать появления сообщения об ошибке "Введен конец файла". Используемые в программе массивы лучше описывать операторами REDIM.

Таблица 0.5.1


Оператор и его описание
OPEN "file2.dat" FOR OUTPUT AS #2 Оператор, открывающий по 2-му каналу файл file2.dat для создания. Если файл file2.dat уже был создан, то он уничтожается и создается заново.
OPEN "file2.dat" FOR APPEND AS #1 Оператор, открывающий по 1-му каналу файл file2.dat для добавления. Если файл находится не в текущем каталоге, с которым работает Бейсик, то в названии файла необходимо указывать полный путь к нему, например, "A:\ZZ\file.dat" для файла, находящегося на диске А (дискете) в каталоге (папке) ZZ.
OPEN "file2.dat" FOR INPUT AS #3 Оператор, открывающий по 3-му каналу файл file2.dat для считывания
WRITE #2, x10$ (1, j); x10$ (2, j) В открытый по 2-му каналу файл оператор записывает в одну строку из массива x10$ два символьных элемента c разделительными знаками
PRINT #1, x10$ (1, j); x10$ (2, j) В открытый по 1-му каналу файл оператор записывает в одну строку из массива x10$ два символьных элемента без разделительных знаков
INPUT #3, x11$ (i, j) Оператор, читающий данные из открытого по 3-му каналу файла и присваивающий их значения переменной x11$(i, j).
CLOSE #1 Оператор, закрывающий открытый по 1-му каналу файл
CLOSE Если все аргументы опущены, то закрываются все файлы и устройства.
EOF(n) Функция файлового ввода-вывода, определяющая условие конца файла, где n – номер открытого файла. Используется, например, для досрочного выхода из цикла, организованного для считывания данных из файла, когда данные файла исчерпаны.
NAME " file1.dat" AS "file2.dat" Оператор переименовывает файл file1.dat в file2.dat
KILL " file2.dat " Оператор стирает указанный файл file2.dat с диска. Соответствует команде DOS del.

К лабораторной работе № 6

Цель работы: приобретение практических навыков в разработке и отладке программ для работы со статической графикой.

В этой работе строятся графики функций.

Структура создаваемой программы: установка экранного режима; определение функции как пользовательской; рисование кривой.

Установка экранного режима осуществляется операторами SCREEN и COLOR. В данной работе используется SCREEN 9, характеристики которого приведены в таблице 0.6.2. Оператор COLOR 1, 2 задает экранные цвета: 1-я цифра, в данном примере 1 (синий), - основной (цвет текста), 2-я цифра – 2 (зеленый) – определяет цвет фона (экрана). Номера экранных цветов даны в таблице 0.6.3.

Программа перевода 2-ичного числа в 10-ичную систему - student2.ru Определяется функция с помощью оператора DEF FN, например для синуса будет DEF FNy (x) = a * SIN (x0 + x). Не забывайте, что параметры x0 и a необходимо ввести с помощью INPUT. Кривая может быть задана параметрическими уравнениями, например, x = at – b sin t и y = a – b cos t . Тогда определяется DEF FNy (t) и DEF FNx (t). В некоторых вариантах, например, вариант 15, гиперболическая спираль задается уравнением в полярных координатах r = c / t . Тогда, как видно из рисунка:

y = r sin t

x = r cos t

Подставив c / t вместо r, получим искомые параметрические уравнения.

Перед построением кривой следует нарисовать оси координат – две взаимно перпендикулярные линии, пересекающиеся в центре экрана (в точке с координатами x =320, y = 175).

Для построения кривой организуется цикл, тело которого составляют выражения для координат, например, для синуса такое выражение будет:

y = 175 – 30 * FNy ((x – 320) / 30),

где 30 – коэффициент формы, которым можно варьировать.

Кроме того, в тело цикла входит оператор, непосредственно рисующий кривую – RSET (x, y), k. Однако при использовании этого оператора не всегда можно получить сплошную линию кривой. Поэтому предпочтительнее использовать оператор LINE (x, y1)-(x+1, y2), k с выражениями:

y1 = 175 – 30 * FNy ((x – 320) / 30)

y2 = 175 – 30 * FNy ((x + 1 – 320) / 30)

В некоторых случаях целесообразно использовать переменную t / 100.

Тогда выражения будут иметь вид:

y1 = 175 – 30 * FNy (t)

y2 = 175 – 30 * FNy (t + 1)

При построении гиперболы и некоторых других кривых будет возникать ошибка "Деление на ноль", избежать которой можно перескочив через критическую точку (x = 320), используя

Таблица 0.6.1
IF x = 319 THEN x = x + 2

Оператор и его описание
COLOR 2,3 Оператор устанавливает экранные цвета, где 1-я цифра – основной - цвет текста (в пределах 0-31), 2-я цифра – фоновый - цвет экрана (в пределах 0-7)
COLOR , 2 Оператор устанавливает фоновый цвет 2 (зеленый), основной без изменения.
PSET (x, y), 1 Оператор рисует точку с координатами x, y цвета 1 (синий).
PSET STEP(10, 10), 3 Оператор рисует точку с координатами x +10, y +10 относительно последней точки с координатами x, y цветом 3 (голубой).
PRESET (x, y), 2 Оператор рисует точку с координатами x, y цвета 2.
PRESET STEP(10, 10), 1 Оператор рисует точку с координатами x +10, y +10 относительно последней точки с координатами x, y цветом 1 (синий).
DEF FNy (x) = a * SIN (x0 + x) Функция, возвращающая одно значение и используемая аналогично встроенной функции Бейсика. Имя функции всегда должно начинаться с букв FN.
LOCATE 25, 80 Оператор, передвигающий курсор в указанную позицию экрана. 1-я цифра (25) – номер строки на экране (позиция по y), 2-я (80) – номер столбца на экране (позиция по x). Указаны максимальные значения для SCREEN 9.
LINE (12, 18)–(12, 280), 1 Оператор рисует вертикальную линию от y = 18 до y = 280 при x = 12.
Продолжение таблицы 0.6.1
LINE (10, 15)–(200, 250), 1 Оператор рисует цветом 1 (синий) отрезок прямой линии из точки с координатами x = 10, y = 15 до точки с координатами x = 200, y = 250
LINE (120, 180)–(290, 180), 1 Оператор рисует горизонтальную линию от x = 120 до x = 290 при y = 180
LINE (10, 15)–(200, 270), 2, B Оператор рисует цветом 2 (зеленый) прямоугольник со сторонами, параллельными экрану, диагональю которого является отрезок прямой из точки с координатами x = 10, y = 15 до точки с координатами x = 200, y = 270
x1 = 10: y1 = 15: x2 = 200: y2 = 270 LINE (x1, y1)–(x2, y2), 2, BF Оператор рисует прямоугольник, как в предыдущем случае, заливая его тем же цветом 2.
LINE –(40, 40), 1 Оператор рисует линию от последней точки, заданной предыдущим оператором программы (пусть x = 10, y = 10), до точки с x = 40, y = 40.
LINE –STEP(40, 40), 1 Оператор рисует линию от последней точки, заданной предыдущим оператором программы (пусть x = 10, y = 10), до точки с x = 50, y = 50.
LINE (20,20)–STEP(40, 40), 1 Оператор рисует линию от точки c x = 20, y = 20 до точки с x = 60, y = 60.
LINE STEP(20,20)–STEP(40, 40), 1 Оператор рисует линию (пусть последняя точка x = 20, y = 20) от точки c x = 40, y = 40 до точки с x = 80, y = 80.
LINE STEP(20,20)–(60, 60), 1 Оператор рисует линию (пусть последняя точка x = 10, y = 10) от точки c x = 30, y = 30 до точки с x = 60, y = 60.
LINE (120, 180)–(290, 180), 1, ,&H2A0F Оператор рисует линию, стиль которой задается 16-ричным числом 2A0F
LINE (120, 180)–(290, 280), 1, B,&H6С5F Оператор рисует прямоугольник, стиль линии которого задается 16-ричным числом 6С5F
Примечание: 1. Стиль не влияет на закрашенные прямоугольники. 2. Если в операторе LINE не указан номер цвета, то он рисует основным, а если указан 0 – то фоновым цветом. 3. Координаты и цвет в операторе LINE могут задаваться числами (например, 120), переменными (x1), элементами массива (y(i,j)), выражением (например, (i + 2) / 3). 4. Операторы PSET и PRESET работают одинаково, но если цвет не указан, PSET использует основной цвет, а PRESET – фоновый. 5. Если координаты точки находятся вне экрана, то никаких действий не производится и сообщение об ошибке не выдается

При построении гиперболы и некоторых других кривых будет возникать ошибка "Деление на ноль", избежать которой можно перескочив через критическую точку (x = 320), используя

IF x = 319 THEN x = x + 2

Если функция, задающая кривую, содержит выражение под знаком квадратного корня, то приходится брать его по абсолютной величине (применяя функцию ABS(x)). Это может привести к потере части кривой, что необходимо восполнить, задав дополнительные "координатные" выражения для потерянной симметричной половины кривой (варьируя знаками – и + в этих выражениях).

Таблица 0.6.2


Режим Разрешение. Страницы видеопамяти Количество цветов
SCREEN 0 Текстовый режим.
SCREEN 1 320х200, 1 страница
SCREEN 2 640х200, 1 страница
SCREEN 7 320х200, 8 страниц
SCREEN 8 640х200, 4 страницы
SCREEN 9 640х350, 2 страницы
SCREEN 10 640х350, 2 страницы
SCREEN 11 640х480, 1 страница
SCREEN 12 640х480, 1 страница
SCREEN 13 320х200, 1 страница

 
 
Таблица 0.6.3


Номер Цвет Номер Цвет
Черный Темно-серый
Синий Светло-синий
Зеленый Светло-зеленый
Голубой Светло-голубой
Красный Светло-красный
Фиолетовый Васильковый
Коричневый Желтый
Светло-серый Ярко-белый

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

CLS: SCREEN 9: COLOR 1, 2

'GOTO 50 'Убирает сетку не стирая

'==1======== Блок построения сетки ============

FOR xc = 0 TO 650 STEP 10

IF xc MOD 100 = 0 THEN kc = 8 ELSE kc = 15

LINE (xc, 0)-(xc, 370), kc 'Вертикальные линии

LINE (0, xc)-(650, xc), kc 'Горизонтальные линии

NEXT xc

50 SLEEP 'Для продолжения нажать любую клавишу

'=========================================

К лабораторной работе № 7

Цель работы: приобретение практических навыков в разработке и отладке программ для работы со статической графикой.

Структура создаваемой программы: установка экранного режима; выполнение рисунка.

Установка экранного режима осуществляется операторами SCREEN и COLOR. В данной работе используется SCREEN 9.

Изображение разбивается на фрагменты, рисуемые с помощью графических примитивов: точек (операторы PSET, PRESET), линий, прямоугольников и закрашенных прямоугольников (оператор LINE), окружностей, эллипсов и дуг окружностей и эллипсов (оператор CIRCLE). Примеры этих операторов приведены в таблице 0.7.1 и 0.6.1. Более сложные контуры рисуются с использованием оператора DRAW – таблица 0.7.2. Рекомендуется нарисованные контуры сразу же закрашивать (оператор PAINT), соблюдая следующие правила:

¨ Контур должен быть замкнут, в нем не должно быть прокола хотя бы на одну экранную точку.

¨ Контур должен быть одноцветен, разноцветность составляющих замкнутого контура для Бейсика равноценна разрыву.

¨ Координаты точки начала закраски должны лежать внутри контура.

Если точка закраски попала вне контура, то закрасится весь экран за исключением самого контура. Если точка закраски попала на контур или на точку с цветом контура, то ничего не закрасится.

Программа перевода 2-ичного числа в 10-ичную систему - student2.ru Для проверки попадания точки начала закраски внутрь контура рекомендуется использовать оператор PSET, рисующий точку ярким контрастным цветом, после чего заменить его PAINT с теми же координатами.

Используя тригонометрическую окружность, пред-ставленную на рисунке, удобно определять начало и конец дуг, рисуемых оператором CIRCLE. Следует заметить, что радиус от 0 нарисовать не-возможно, с этой целью используется малая величина, например, 0.01. Так, напри-мер, как видно из рисунка, верхнюю полуокружность с радиусами (диаметром) нарисует:

CIRCLE (x, y), R, cvet, -0.01, -3.14

А нижнюю полуокружность без радиусов:

CIRCLE (x, y), R, cvet, 3.14 (поскольку параметр, определяющий конец дуги опущен, то по умолча-нию дуга рисуется до 6.28, т.е. до конца).

Перед созданием программы начертите рисуемое изображение в масштабе на бумаге в клетку. Тогда, используя выводимую на экран координатную сетку, нетрудно это изображение запрограммировать. Дополнительно к сетке неплохо использовать PRINT "x = "; POINT(0); "y = "; POINT(1), выводящий на экран координаты последней точки.

Необходимо определить координаты начальной (опорной) точки, привязав к ней фрагменты изображения, используя относительные координаты (графические операторы с параметром STEP, либо выражения для координат типа

x = x +dx и y = y + dy). Тогда можно передвигать рисунок по экрану без изменения программы, меняя лишь координаты опорной точки.

Определите последовательность построения и закраски замкнутых контуров, нередко она имеет большое значение. Рисуйте контрастным хорошо различимым на фоне цветом, его всегда потом можно изменить. Контролируйте свои шаги при создании программы, постоянно запуская ее после введения новой команды оператора DRAW или написания очередных операторов LINE, CIRCLE и пр. Если шаг был удачным, сохраните его, чтобы иметь в запасе, на всякий случай, выход без сохранения. Старайтесь, чтобы текст программы не выходил за боковые границы экрана. Например, оператор DRAW всегда можно непосредственно продолжить новым DRAW на новой строке. Проиллюстрируем построение изображения на примере рисунка трамвая.

Программа перевода 2-ичного числа в 10-ичную систему - student2.ru 'tramvay.bas Трамвай

10 CLS 'Очистка экрана

20 SCREEN 9 'Установка экранного режима

30 COLOR , 2 'Установка экранных цветов

'==1=== Блок рисования вагона ============================

40 DRAW "bm402,160 c11 l154 g8 d22 r170 u22 h8 bm+0,+2 p12,11"

50 DRAW "bm-32,-10 ta45 c1 u15 l15 d15 r15" 'Токоприемник

'==2=== Блок рисования окон и колес трамвая =================

60 y = POINT(1) + 16 'Установки цикла для окон от последней точки

70 xn = POINT(0) – 130: xk = xn + 170: p = 25

80 FOR x = xn TO xk STEP p 'Цикл для рисования окон и колес

90 IF a = 0 THEN LINE (x, y)-(x + 20, y + 14), 11, BF 'Окна трамвая

100 IF a => 1 THEN CIRCLE (x, y), 7, 8, -3.14, -6.28: PAINT (x, y + 2), 8

110 NEXT x

'==3=== Блок переустановки цикла для колес ===================

120 a = a + 1: p = 14 'a = 1 – задние колеса, a = 2 – передние колеса

130 IF a = 1 THEN xn = xn + 22: xk = xn + 28: y = y + 22: goto 80

140 IF a = 2 THEN xn = xn + 98: xk = xn + 28: goto 80

150 END

За начальную (опорную) точку выбрана правая верхняя точка корпуса вагона с координатами x = 402, y = 160, задаваемая командой bm402,160 оператора DRAW в строке 40. Координаты в других командах и операторах задаются относительно этой точки. Причем, в строках 60 и 70 относительные координаты задаются с помощью операторов POINT(1) и POINT(0), выводящих координаты y и x, соответственно, последней (текущей) точки.

Таблица 0.7.1


Оператор и его описание
CIRCLE (200, 100), 50, 1 Графический оператор, рисующий окружность с центром x = 200, y = 100, радиусом r = 50, цветом 1 (синий).
CIRCLE STEP(100, 100), 20, 2 Графический оператор, рисующий окружность со смещением центра относительно текущей позиции курсора, т.е. (пусть последняя точка x = 100, y = 0) с центром x = 200, y = 100, радиусом r = 20, цветом 2 (зеленый).
CIRCLE (200, 100), 40, 3, 1.57, 4.71 Графический оператор, рисующий дугу окружности с центром x = 200, y = 100, радиусом r = 40, цветом 3 (голубой). 1.57 задает начало дуги, 4.71 – конец.
CIRCLE (200, 100), 40, 4, -1.57, -4.71 Графический оператор, рисующий дугу окружности с центром x = 200, y = 100 и радиусы от концов дуги; радиусом r = 40, цветом 4 (красный). -1.57 задает начало дуги и рисование радиуса, -4.71 – конец дуги и рисование радиуса.
CIRCLE (200, 100), 40, 5, 1.57 Графический оператор, рисующий дугу окружности с центром x = 200, y = 100, радиусом r = 40, цветом 5 (фиолетовый). 1.57 задает начало дуги, 6.28 – конец (поскольку параметр опущен).
CIRCLE (100, 200), 30, 3, , 4.71 Графический оператор, рисующий дугу окружности с центром x = 100, y = 200, радиусом r = 30, цветом 6 (коричневый). 0 задает начало дуги (т.к. параметр опущен), 4.71 – конец.
CIRCLE (200, 100), 50, 7, , , 0.3 Графический оператор, рисующий эллипс с центром x = 200, y = 100, радиусом r = 50, цветом 7 (серый) и сжатием по оси y (т.к. параметр < 1).
CIRCLE (200, 100), 50, 7, , , 3 Графический оператор, рисующий эллипс с центром x = 200, y = 100, радиусом r = 50, цветом 7 (серый) и сжатием по оси x (т.к. параметр > 1).
PAINT (200, 100), 9, 8 Графический оператор, закрашивающий цветом 9 (светло-синий) замкнутый кон-тур, ограниченный линией цвета 8 (темно-серый), начиная с точки с координатами x = 200, y = 100.
PAINT STEP(200, 100), 2, 1 Графический оператор, закрашивающий цветом 2 (зеленый) замкнутый контур, ограниченный линией цвета 1 (синий), начиная с точки (пусть последняя точка x = 100, y = 100) с координатами x = 300, y = 200.
Примечание: 1.Последняя точка после завершения CIRCLE – центр окружности 2. Если в операторе CIRCLEне указан номер цвета, то он рисует основным, а если указан 0 – то фоновым цветом. 3. Дуги эллипсов рисуются аналогично дугам окружности. 4. Координаты и параметры в операторе LINE могут задаваться числами, переменными (x1), элементами массива (y(i,j)), выражением (например, (i + 2) / 3).

Программа перевода 2-ичного числа в 10-ичную систему - student2.ru


Оператор DRAW
Команда Описание
U10 Вверх на 10
D7 Вниз на 7
L15 Влево на 15
R22 Вправо на 22
E11 Вправо вверх на 11
F5 Вправо вниз на 5
G7 Влево вниз на 7
H6 Влево вверх на 6
M20,30 Линия от последней точки до точки с координатами x =20, y = 30
M+5,-10 Линия от последней точки (пусть x = 20, y = 20) до точки с координатами x = 25, y = 10 (шаг)
BM10,8 Переход, не рисуя, в точку с координатами x = 10, y = 8
C2 Установка цвета 2 (зеленый)
P1,2 Закрашивание замкнутой фигуры, где 1 (синий) – цвет фигуры, 2 (зеленый) – цвет границы
S7 Установка масштаба 7 (параметр масштаба 1 £ и £ 255). Увеличивает единицы перемещения команд U, D, L, R, M
A2 Установка угла поворота 2 (на 1800). 0 – на 00, 1 – на 900, 3 – 2700.
TA30 Поворачивает изображение на угол в 300 (угол поворота в пределах от –3600 до 3600). Если угол > 0, то поворот против часовой стрелки, иначе – по часовой стре-лке.
NR8 Рисует вправо на 8 и возвращается назад в исходную точку (буква N).
Примечание:1. Перед командой Pn,n необходимо перейти без рисования внутрь закрашиваемой фигуры. 2. Цвет по ходу рисования можно неоднократно переустанавливать командой Cn. 3. Замкнутый контур не будет замкнутым для Pn,n, если линия границы контура содержит хотя бы одну точку другого цвета.

К лабораторной работе № 8

Цель работы: приобретение практических навыков в разработке и отладке программ для работы с динамической графикой.

Структура создаваемой программы: установка экранного режима; выполнение статичного изображения, блок движения изображения.

Установка экранного режима осуществляется операторами SCREEN и COLOR. В данной работе используется SCREEN 9.

Для осуществления динамики иногда требуется нарисовать не одно статичное изображение. Приемы создания статичных рисунков рассмотрены в работе № 7. Контур страны проще рисовать оператором DRAW в масштабе, задаваемом координатной сеткой. Потом размер рисунка можно увеличить до необходимого соответствующей масштабирующей командой Sn оператора DRAW. Блок ввода и распечатки городов можно организовать с помощью цикла FOR… NEXT, в тело которого войдет оператор READ m1$(i), m2(i), m3(i), x(i), y(i) и соответствующие ему DATA, например, DATA "Рим", 10, 57, 443, 135 Где m1$(i) вводит название города, m2(i) и m3(i) – параметры оператора LOCATE, предваряющего оператор PRINT, который выводит на экран название города, x(i), y(i) – координаты изображающей город точки (рисовать либо парой операторов CIRCLE – PAINT, либо LINE).

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

1) Выводить изображение различными цветами переднего плана, а стирать, выводя то же самое изображение цветом фона.

2) Выводить, как в предыдущем, а стирать - оператором CLS.

3) Выводить, как в предыдущем, а стирать – прямоугольником, цвет контура и заливки которого совпадает с цветом фона.

4) Выводить как в предыдущем, а стирать задние фронты изображения.

5) Записать изображение в буфер, размещаемый в динамической памяти, а затем выводить его в нужных местах экрана. Стирать повторным наложением изображения из буфера, либо одним из способов п.п.2,3.

Существуют и другие способы, здесь не приводимые. Наиболее качественное изображение получается 4-м способом, но он достаточно легко реализуется лишь в случае прямолинейного движения.

При выполнении "туристских" заданий предлагается воспользоваться 5-м способом, стирая изображение прямоугольником.

Структура программы: 1) Блок рисования карты страны посредством оператора DRAW, 2) Блок ввода и распечатки городов, 3) Блок рисования и снятия в буфер изображения парохода (яхты) или автобуса (машины), 4) Блок движения транспортного средства, 5) Подпрограмма вывода сообщений.

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

В блоке снятия изображения в буфер сначала рисуется изображение парохода (яхты, автобуса или машины, в зависимости от варианта), которое затем копируется оператором GET. Рассмотрим этот блок:

'==3== Блок снятия изображения парохода ========================

120 'Рисует пароход

130 b = 4 + INT((55+7) / 8*4*18) ' Расчет объема памяти

140 REDIM bug1(b) ' Задает буфер для запоминания

150 GET (460, 23)-STEP(54, 17), bug1 ' Снимает картинку

160 SLEEP 2 ' Начальная выдержка времени

170 LINE (460, 23)-STEP(54, 17), 9, BF 'Стирает картинку

'=========================================================

Оператор LINE из строки 170 используется сначала с параметром В для определения параметров оператора GET в строке 150 и значений для формулы в строке 130. Изображение должно полностью помещаться в рамке оператора LINE, тогда координаты из него переносятся в GET, а разности координат дают значения для формулы. После чего параметр B оператора LINE переделывается в BF, а цвет изменяется на цвет фона. Размер массива в байтах вычисляется по формуле:

Таблица 0.8.1
4 + INT(((x2 – x1 +1) * k1 + 7) / 8) * k2 * ((y2 – y1) + 1)

Наши рекомендации

Режим экрана Битов на точ-ку в одном слое (k1) Ч