программирование на языке бейсик

 

УРОК 9. Построение графика функции

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

CLS

FOR i1 = 0 TO 1 STEP .1 ' цикл

PRINT i1, SIN(i1)

NEXT i1

В данном примере производится вычисление значений функции синуса для разных аргументов, которые принимают значение от 0 до 1 с шагом .1 (STEP), то есть аргумент принимает значения: 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9 и 1.0. В силу неточности вычислений, переменная i1 для последних значений аргумент будет принимать значение не 0.8, а 0.8000001. Можно выбрать переменную двойной точности, тогда результат вычислений будет точнее, но для наших целей одинарной точности достаточно.

В тексте программы операторы внутри цикла (в данном случае оператор PRINT) сдвинут на два пробела вправо для того, чтобы выделить его для более легкого чтения текста. Компилятор при переводе данных инструкций в машинный язык будет их игнорировать. Теперь выведем график синуса на экран.

SCREEN 9

CLS

LINE (0, 100) - (360, 100) ' ось Х

LINE (0, 0) - (0, 200) ' ось У

FOR i1% = 0 TO 360 ' цикл для графика

PSET (i1%, SIN(i1% * 3.141593 / 180) * 50 + 100)

NEXT i1%

Рассмотрим данный пример подробнее. Первый оператор, как обычно, устанавливает вид экрана, второй его очищает. Далее находятся два оператора, которые выводят на экран оси координат, третий - ось Х, четвертый - ось У. Почему данные линии не устанавливаются на ноль? Очень просто, ведь экран содержит точки (пикселы) по оси Х от 0 до 639, а по оси У - от 0 до 349. Поэтому, если примем за начало координат точку с координатами (0,0), на экран не будут выведены отрицательные значения. Поэтому начало координат будет на экране в точке (0,100), то есть со сдвигом по оси У на сто пикселов.

Далее находится цикл для вычисления значений функции. Оператор FOR проводит цикл для переменной i1%, которая принимает значение в градусах от 0 до 360 с шагом 1 градус. Если ключевое слово STEP не указано, то шаг принимается равным единице.

Ниже находится оператор PSET, устанавливающий точку на экране и имеет два аргумента: один по оси Х (i1%), другой по оси У («SIN(i1% * 3.141593 / 180) * 50 + 100»). Во втором аргументе вначале вычисляется значение синуса, причем аргумент синуса переводится из градусов в радианы, умножается на 50, который является множителем, чтобы значения функции находились в пределах от -50 до 50. Затем прибавляется значение 100 для того, чтобы диапазон изменения стал от 0 до 100, так как отрицательные значения на экран не выводятся.

Можно создать разные графики. Для примера приведем исходный текст программы, которая выводит функцию у=1/х.

SCREEN 9

CLS

WINDOW (-10, -10)-(10, 10)

LINE (-9, 0)-(9, 0) ' ось Х

LINE (0, -9)-(0, 9) ' ось У

FOR i1# = -8.0025 TO 8.0025 STEP .005

PSET (i1#, 1 / i1#)

NEXT i1#

В данном примере введен оператор WINDOW, который переводит координаты окна на дисплее от (0,0)-(349,639) в координаты (-10,-10)-(10,10), что очень удобно, так как в дальнейшем не нужно пересчитывать координаты на экране. Цикл по переменной i1# проводится не от значения 8, а с 8.0025, так как иначе в цикле будет деление на ноль, а этот диапазон и шаг позволяют его миновать.

Для графиков можно устанавливать линии разметки и символы, например название осей. Так, строчка LOCATE 12, 5: PRINT "ось Х" позволяет установить курсор на 12 строчке, 5 столбец экрана (в текстовом режиме) и там вывести название. Трудность состоит в том, что нужно вычислять координаты, где будет находиться курсор. Имея в виду, что на экране расположены 24 строчки и 80 столбцов и зная текущую разметку экрана можно оценить, где будет находиться текст. В данном примере 12 строчка означает позицию чуть выше, чем ось, а 5 столбец позволяет отступить от левой границы экрана на 5 позиций (см. рис. 6).

Операторы, которые приведены ниже, позволяют нарисовать координатную сетку.

FOR i1 = -8 TO 8: LINE (-8, i1)-(8, i1): NEXT i1

FOR i1 = -8 TO 8: LINE (i1, -8)-(i1, 8): NEXT i1

Отметим, что для красоты графика можно добавить стрелки для осей координат следующими операторами.

LINE (8.7, .3)-(9, 0)

LINE (8.7, -.3)-(9, 0)

LINE (.2, 8.7)-(0, 9)

LINE (-.2, 8.7)-(0, 9)

По горизонтали был взята координата 0.3, а по вертикали 0.2, так как по горизонтали больше точек при одном измерении (650/20=32.5, 350/20=17.5).

Существуют вложенные циклы, то есть цикл, вложенный в другой цикл. Рассмотрим это на примере.

SCREEN 9

CLS

FOR i1% = 1 TO 7

LINE (10, 20 * i1%)-(30 + 5 * i1%, 20 * (i1% + 1)), , B

i3% = (20 + 5 * i1%) / 6

FOR i2% = 1 TO 5

LINE (10 + i3% * i2%, 20 * i1%)-(13 + i3% * i2%, 20 * (i1% + 1))

NEXT i2%

NEXT i1%

Данная программа рисует ступеньки и проводит их штриховку. Четвертый оператор выводит прямоугольники. Далее в переменную i3% заносится шаг, с которым будет проводиться штриховка. Он равен длине прямоугольника, деленную на количество интервалов (6). Потом находится цикл для штриховки, в которой переменная i2% определяет номер штриховой линии.

Операторы внутри второго цикла также сдвинуты относительно других операторов. Может быть и третий цикл, четвертый и операторы внутри каждого цикла также лучше сдвигать вправо для лучшего чтения программы. Эти принципы заложены в теории структурного программирования, согласно которым программа должна быть легко прочитана.

Отметим, что в операторе цикла при неправильном указании параметров можно не выполнить нужные действия. Например, оператор «FOR i1% = 0 TO -1» имеет по умолчанию шаг 1, а значения переменной i1% , будут 0, 1, 2, 3, … и так далее и не достигнут -1. Поэтому программа не будет выполняться. В других языках программирования данный пример может дать выполнение бесконечного цикла.

Задачи.

1. Какие значения принимает переменная i1% в следующих операторах:

а) FOR i1% = 0 TO 1 б) FOR i1% = -2 TO 0 в) FOR i1% = 0 TO 10 STEP 2 г) FOR i1% = 3 TO 13 STEP 3 д) FOR i1% = 10 TO 1 STEP -1

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

3. Нарисуйте на экране фасад Вашей школы и дома, в котором проживаете.

(переход на следующую страницу)

 

О↙О↘О↙О↘О↙О↘О↙О↘О↙О↘О↙О↘О↙О↘О↙О↘О











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

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


 
 
 
Яндекс.Метрика


Каталог@MAIL.RU - каталог ресурсов интернет