Программа нахождения корня методом касательных

      Комментарии к записи Программа нахождения корня методом касательных отключены

INPUT e,x‘ввод погрешности и начального значения Х

INPUT a,b,c,d‘ввод коэффициентов уравнения

DO‘цикл итераций

y=a*x^3+b*x^2+c*x+d‘вычисление функции

py=3*a*x^2+2*b*x+c‘вычисление производной

x1=x‘запоминание старого корня

x=x–y/py‘вычисление нового корня

‘если фактическая погрешность больше допустимой,

LOOP WHILE ABS(x1–x)e ‘цикл повторяется

PRINT “Корень равен =” x‘печать значения корня

Здесь: Y – текущее значение функции, PY – текущее значение производной, X1 – предыдущее значение корня, X – последнее значение корня.

2.9. ВЫЯВЛЕНИЕ НАЖАТИЯ КЛАВИШ

Для управления процессом обработки данных необходимо иметь средства влияния на него с помощью некоторых, назначенных программистом, клавиш. В ПК следует различать код самой клавиши (скан-код) и код символа (ASCII-код), находящегося на ней. На одной клавише, в общем случае, могут размещаться четыре символа: заглавная и строчная английские буквы, заглавная и строчная русские буквы. ASCII-коды можно посмотреть в любом справочнике.

Возможность выявить нажатия на клавиатуру предоставляют следующие функции и операторы.

uINKEY$

Функция возвращает одно- или двухбайтную строку, содержащую символ, считанный с клавиатуры. Если символ не был считан, возвращается нулевая строка. Однобайтовая строка содержит ASCII-символ. Двухбайтная строка содержит расширенный код: первый символ содержит 0, второй – расширенный код специальной клавиши или клавиши управления курсором. Эти коды приведены в приложении.

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

DO

a$ = INKEY$

LOOP WHILE a$ =

Здесь цикл DO повторяется до тех пор, пока переменная a$ остается пустой (a$ =пустые кавычки). Внутри цикла этой переменной функцией INKEY$ каждый раз присваивается значение нажатой клавиши. Как только будет нажата любая клавиша – цикл завершится. Далее будет можно анализировать переменную a$ с целью выяснения того, какая же именно клавиша была нажата.

Ниже приведена программа, выводящая ASCII-коды всех нажатых клавиш (как буквенно-цифровых, так и управляющих). Для выяснения того, к какой их этих двух групп относится данная клавиши, ее код сначала анализируется на длину. Если длина 1, значит клавиша обычная, если – 2, то управляющая. В последнем случае выводится только код второго символа из a$, т.е. ASC(RIGHT$(a$, 1)). Справа от программы изображены результаты ее работы при нажатии клавиш q, w, ц, у, , ®, ¯.

PRINT Символ КодDODO‘цикл ожидания нажатияa$ = INKEY$‘символ клавишиLOOP WHILE a$ = IF LEN(a$) = 1 THEN‘если длина кода – 1‘печать символа на клавише и ее кодаPRINT a$; TAB(9); ASC(a$)ELSE‘если длина кода – 2‘печать кода управляющей клавишиPRINT TAB(9); ASC(RIGHT$(a$, 1))END IFLOOP Символ Кодq 113w 119ц 230у 227

Оператор

uON KEY (код_клавиши) GOSUB метка

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

1-10,30,31 – функциональные клавиши F1-F10 и F11, F12,

11,12,13,14 – клавиши®¯.

Этот оператор в форме

uON KEY (код_клавиши) ON/OFF

включает/отключает действие, назначенное клавише оператором вида ON KEY (…) GOSUB.

Состояние задержки на заданное число секунд для просмотра большого объема данных на экране и/или для восприятия какого-либо события можно организовать оператором

uSLEEP [число_секунд_задержки]

Пауза может быть прекращена нажатием любой клавиши. Если параметр число секунд отсутствует, ожидание будет бесконечным. Например, в следующем фрагменте программы производится предъявление элементов массива А “порциями” по 20 элементов. Пауза позволяет просмотреть выведенные данные. Если пользователь хочет прервать процесс, он может нажать клавишу F10.

CLS

ON KEY(10) GOSUB m:

KEY(10) ON

DIM a(100)

. . .

FOR i = 1 TO 100

IF i MOD 20 = 0 THEN SLEEP ELSE PRINT a(i)

NEXT

m: PRINT Конец просмотра

KEY(10) STOP

2.10. РАБОТА С ГРАФИКОЙ

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

0 черный1 голубой2 зеленый3 бирюзовый 4 красный5 розовый6 коричневый7 белый 8 серый9 ярко-голубой10 ярко-зеленый11 ярко-бирюзовый 12 ярко-красный13 ярко-розовый14 желтый15 ярко-белый

¶УСТАНОВЛЕНИЕ ГРАФИЧЕСКОГО РЕЖИМА ЭКРАНА

осуществляется оператором

uSCREEN режим

Здесь режим – номер экранного режима. В настоящее время широко используются графические адаптеры SVGA, для которых обычен режим номер 12 с разрешением 640 точек по горизонтали и 480 точек по вертикали, т.е. возможна адресация по оси Y от 0 до 479, по оси Х от 0 до 639. В дальнейшем мы будем использовать оператор выбора графического режима в форме SCREEN 12.

Непосредственно после оператора SCREEN графический курсор устанавливается в центр экрана – в нашем случае в точку 320,240. Аналогичный результат получается после применения оператора CLS.

¶ОПЕРАТОРЫ ВЫВОДА ГРАФИЧЕСКИХ ПРИМИТИВ

Оператор

uPSET/PRESET [STEP] (x,y) [,цвет]

рисует точку на экране в позиции X,Y указанным цветом. Если задан параметр STEP, координаты берутся как смещение относительно текущего положения графического курсора, иначе – они интерпретируются как абсолютные координаты. Если цвет не указан, оператор PSET, использует текущий основной цвет. PRESET работает также, но если цвет не указан, то используется цвет фона (удобно для стирания уже выведенных точек). Если координаты точки находятся вне экрана, то никаких действий не производится и сообщений об ошибке не выдается.

Оператор

uCIRCLE [STEP] (x,y), радиус [, цвет]

рисует окружность с центром в точке X,Y заданным радиусом и цветом. STEP – указывает на то, что используются относительные координаты.

Примеры:

‘окружность радиусом 100 с центром в точке с координатами 50, 50 цвета 4

CYRCLE (50, 150),100,4

CYRCLE STEP(0,0),5’окружность радиусом 5 с центром в текущей точке

Оператор

uLINE [[STEP](x1,y1)] – [STEP](x2,y2) [, [цвет] [B[F]]]

рисует линию или прямоугольник с начальными координатами x1,y1 и конечными – x2,y2. Если используется ключ В – рисуется прямоугольник с координатами левого верхнего угла х1, у1 и нижнего правого – х2, у2. Если использованы ключи BF – прямоугольник закрашивается. Параметр STEP указывает на относительные координаты.

Примеры:

LINE –(50, 50) ‘линия от текущей точки до точки 50,50

LINE –STEP(50, 50) ‘линия от текущей точки до точки,

‘отстоящей от х и у на 50 и 50 пикселей

LINE (25, 25)–STEP(50, 50),5,BF’прямоугольник с координатами левой верхней точки 25,25 и правой нижней –75, 75, закрашенный цветом 5

Универсальный оператор рисования

uDRAW символьное_выражение

позволяет выполнять действия по перемещению, масштабированию, вращению и раскрашиванию образов.

Команде может предшествовать префикс, влияющий на результат:

B – предписывает двигаться, но не рисовать;

N – двигаться, рисовать, вернуться в исходную точку.

Команды перемещения
Un,Dn,Ln,Rn – Вверх, вниз, влево, вправо (рис. 2.10.1).
En,Fn,Gn,Hn – По диагонали в направлении: вверх вправо, вниз вправо, вниз влево, вверх влево.
Mx,y – Абсолютное или относительное движение. Если х или у имеет знак (+ или –), движение осуществляется относительно текущей точки, т.е. значения х и у будут прибавлены к значениям соответствующих текущих координат (или вычтены из них). Если знаков нет, движение будет абсолютным из текущей точки в точку с указанными координатами.
Команды трансформации
A n – Установка угла поворота n. Значение n находится в пределах от 0 до 3, где 0=0°, 1=90°, 2=180°, и 3=270°. Размеры фигур, повернутых на угол 90° или 270° масштабируются в отношении 4/3 к их размерам в углах 0° или 180°.
TA n – Поворачивает изображение на угол n градусов. Значение n находится в пределах от -360 до 360. Если n0, то поворот производится против часовой стрелки, иначе – по часовой.
C n – Установка цвета n.
S n – Определяет масштаб, согласно которому уменьшаются/увеличиваются длины отрезков, вычерчиваемых, следующими в строке командами перемещения (U,D,L,R,М). Масштабный коэффициент n находится в пределах от 1 до 255. Истинное значение масштабного коэффициента вычисляется как n/4. По умолчанию n=4, что соответствует коэффициенту 1/4.
P n,m– Установка цвета нарисованной фигуры: n – цвет содержимого окрашенной области, m – цвет границ.

Пример. Построить шестиугольник, начиная с точки 100,100 (рис.2.10.2).

DRAW bm100,100 r20 f20 d20 g20 l20 h20 u20 e20

Пример. Нарисовать фигуру “колесо с касательными” (рис. 2.10.3).

SCREEN 12

FOR I = 0 TO 360 STEP 5

DRAW nu80ta+STR$(I)+u5’касательная

SLEEP’пауза для просмотра

NEXT

Пример. Нарисовать фигуру (схематическую “восьмерку” рис.2.10.4), изображенную справа. Ее левый верхний угол находится в точке 40,80. Ширина 60 пикселей, высота – 140. Внутренние прямоугольники имеют размер 20 на 40.

Операторы, формирующие изображение приведены ниже.

DRAW bm40,80‘переход в левый верхний угол (40,80)

DRAW r60d140l60u140‘большой прямоугольник

DRAW bm+20,+20r20d40l20u40‘верхнее “окно”

DRAW bm+0,+60r20d40l20u40‘нижнее “окно”

Последовательность действий иллюстрирует рис.2.10.5. Элементарные шаги пронумерованы. Так, номер 1 соответствует команде r60; 2 – d140; 3 – l60; 4 – u140; 5 – bm+20, +20; 6 – r20; 7 – d40; 8 – l20; 9 – u40 и т.д. Отдельные действия разнесены по разным операторам только для наглядности. Возможно их объединение, как показано ниже

DRAW r60d140l60u140 bm+20,+20r20d40l20u40m+0,+60r20d40l20u40

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

Оператор

uPAINT [STEP] (x,y)[,[цвет_заполнения][,цвет_рамки]]

дает возможность закрасить ограниченную площадь цветом заполнения. Если цвет заполнения не задан, используется цвет фона. Закрашивание начинается с точки с абсолютными (или относительными – STEP) координатами X,Y. Точка может быть указана внутри фигуры (раскрашивается фигура) или вне ее (раскрашивается фон), но не на границе. Если цвет рамки не указан, рамка окрашивается в цветом заполнения.

¶ФОРМИРОВАНИЕ ОКОН

Оператор

uVIEW (Xн,Yн)-(Xк,Yк)[,[цвет_окна] [,цвет_рамки]]

позволяет выделить определенную часть экрана (окно), в которой в дальнейшем будут воспроизводиться все графические объекты. Им определяются размер и положение окна графического вывода на экране монитора. Если VIEW выполняется без аргументов, окном вывода будет весь экран.

Параметры оператора:

Xн,Yн – координаты левого верхнего угла окна (в пикселях).

Xк,Yк – координаты правого нижнего угла окна.

цвет окна – цвет фона окна (если не указан, окно не закрашивается).

цвет рамки – цвет рамки окна.

Оператор

uWINDOW [SCREEN] (Xmin,Ymin)–(Xmax,Ymax)

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

Здесь

Xmin,Ymin – минимальные значения физических координат выводимого на экран объекта.

Xmax,Ymax – максимальные значения физических координат.

SCREEN – определяет направление координат. По умолчанию, вывод производится в декартовых координатах (рис.2.10.6а) с обычным направлением оси Y (вверх). Если использован параметр SCREEN, Y направляется вниз (рис.2.10.6б).

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

Пример. Положим нам нужно вывести на экран график функции Y=SinX, для Х, изменяющегося в диапазоне от 0 до 20. Программа вывода приведена ниже, график на рис.2.10.7.

SCREEN 12

VIEW (25, 10)-(600, 435),,1‘формируется окно вывода с экранными

‘координатами (в пикселях): х=25, у=10 на х=600, у=435

Xmin = 0: Xmax = 20 ‘масштабирование (заданы крайние

Ymin = -1: Ymax = 1 ‘значения Х =[0,20] и Y=[-1.1])

WINDOW (Xmin,Ymin)-(Xmax,Ymax)‘задаются физические координаты

FOR x=0 TO 20 STEP .01 ‘генерация значений Х от 0 до 20 с шагом 0.01

PSET (x, SIN(x)), 4 ‘вывод функции SinX

PSET (x, 0), 4 ‘одновременный вывод оси Х

NEXT

¶СОЗДАНИЕ ДИНАМИЧЕСКИХ ОБРАЗОВ осуществляется с помощью двух операторов (GET и PUT), сохраняющих образ в массиве и извлекающих его оттуда (рис.2.10.8).

Оператор

uGET [STEP](X1,Y1) – [STEP](X2,Y2) [,массив]

позволяет сохранить графическое изображение в массиве чисел.

Здесь:

X1,Y1,X2,Y2 – координаты левого верхнего и правого нижнего углов прямоугольной области экрана.

STEP – параметр, указывающий, что координаты берутся относительно последней нарисованной точки.

массив – имя числового массива для записи изображения. Размер массива в байтах определяется по формуле: 4+INT(((Х2–Х1+1)+7)/8)*4*((Y2–Y1)+1)

Оператор

uPUT [STEP] (X,Y), массив [,действие]

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

Здесь:

X,Y – координаты левого верхнего угла прямоугольника, в котором будет размещаться изображение.

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

массив – имя массива с изображением.

действие – параметр, позволяющий накладывать образ на экран с созданием специальных эффектов (по умолчанию – XOR):

PSET – Каждая точка имеет запомненный в массиве цвет.

PRESET – Выдается инверсное (негативное) изображение образа.

AND – Выводимое изображение накладывается на существующее. Точки, имеющие одинаковый цвет, сохраняются, остальные цвет меняют.

OR – В результате наложения получается образ, являющийся результатом применения логического ИЛИ.

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

Рассмотрим несколько более интересных примеров.

Пример. Составим программу вывода шести концентрических окружностей с координатами центра в центре экрана (точка: 320, 240), последовательно раскрашенных в цвета с первого по шестой (рис.2.10.9).

SCREEN 12

FOR i = 1 TO 6‘цикл рисования шести окружностей

‘круг с центром в точке 320,240, радиусом 25i с цветом линии 1

CIRCLE (320, 240), i*25,1

‘закрашивание цветом i объекта, замкнутого относительно точки

PAINT (320+i*25-1,240), i,1‘с координатами 320+i*25-1, 240

NEXT

Как видим, программа очень несложна. Сделаем пояснения только к раскрашиванию. Здесь координата Y остается постоянной (240). Координата Х меняется таким образом, чтобы точка находилась внутри очередной окружности, хотя бы на один пиксель отступя от края (320+i*25-1).

Пример. Составим программу вывода текущего времени в формате ЧЧ-ММ-СС. Вывод цифр времени будем осуществлять большими “рисованными” символами (как, например, на рис.2.10.10).

SCREEN 12

t$ =

DO’бесконечный цикл опроса времени

‘если нажата какая-то клавиша

IF INKEY$ THEN END’завершение программы

IF t$TIME$ THEN’если время изменилось

CLS’экран очищается

t$ = TIME$’запоминается новое время

END IF

FOR i=1 TO 8’перебор цифр времени

x$=MID$(TIME$, i, 1)’выделение очередного символа времени

‘позиционирование точки начала рисования:

IF i = 1 THEN DRAW bm40,80’позиция первой цифры часов

IF i = 2 THEN DRAW bm110,80

‘тире часы-минуты

IF i = 3 THEN DRAW bm185,80bm+0,+60r20d20l20u20

IF i = 4 THEN DRAW bm220,80’позиция первой цифры минут

IF i = 5 THEN DRAW bm295,80

‘тире минуты-секунды

IF i = 6 THEN DRAW bm370,80bm+0,+60r20d20l20u20

IF i = 7 THEN DRAW bm405,80’позиция первой цифры секунд

IF i = 8 THEN DRAW bm475,80

‘вывод символов времени:

IF x$=1 THEN DRAW r40d120r20d20l60u20r20u100l20u20

IF x$=2 THEN DRAW r60d80l40d40r40d20l60u80r40u40l40u20

IF x$=3 THEN DRAW r60d140l60u20r40u40l20u20r20u40l40u20

IF x$=4 THEN DRAW r20d60r20u60r20d140l20u60l40u80

IF x$=5 THEN DRAW r60d20l40d40r40d80l60u20r40u40l40u80

IF x$=6 THEN DRAW

r60d20l40d40r40d80l60u140bm+20,+80r20d40l20u40”

IF x$=7 THEN DRAW r60d60g30d50l20u50e30u40l40u20

IF x$=8 THEN DRAW

r60d140l60u140 bm+20,+20r20d40l20u40bm+0,+60r20d40l20u40

IF x$=9 THEN DRAW

r60d140l60u20r40u40l40u80bm+20,+20r20d40 l20u40

IF x$=0 THEN DRAW r60d140l60u140bm+20,+20r20d100l20u100

NEXT

LOOP

Здесь в переменную t$ заносится символьное значение времени с помощью функции TIME$. В бесконечном цикле производится опрос нажатия клавиши. Нажатие любой клавиши является сигналом завершения программы (IF INKEY$ THEN END). Если в очередном цикле произошло изменение значения времени, экран очищается и запоминается новое время. Далее просматриваются все восемь символов строки времени. Первая группа операторов IF в зависимости от номера символа, фиксирует текущие координаты в нужном месте экрана. Следующая группа операторов IF выводит уже изображение нужного символа, начиная с этой точки.

Пример. Составим программу, отображающую стрелочный секундомер (только секундную стрелку). В левом верхнем углу экрана (рис.2.10.11) отобразим уже в числовом виде текущее время и число секунд от начала работы программы. Для вычисления абсолютного числа прошедших секунд (DS) из текущего времени (TIME$) извлекаются две цифры часов и умножаются на 360, плюс число минут, умноженных на 60, плюс просто число секунд (переменная S). Это значение является точкой отсчета для секундомера, который работает три минуты (180 секунд) от запуска программы. Важным является преобразование числа секунд в угол поворота стрелки. Заметим, что одна минута равна шести градусам и отсчет градусов идет от горизонтальной оси, а минут – от вертикальной, т.е. следует отнять 90 градусов.

Статьи к прочтению:

Нахождение числа по его дроби


Похожие статьи: