- •Оглавление
- •2.6. Модульное программирование
- •2.8. Численные методы анализа
- •2.1. Элементы языка
- •Мантисса e порядок
- •2.2. Операторы языка
- •Input [приглашение ;/,] список_вводимых_переменных
- •Операторы управления
- •If логическое_условие then оператор
- •If логическое_условие goto метка_оператора
- •If логическое_условие then оператор else оператор
- •I f логическое_условие then
- •2.3. Организация ветвлений
- •Input “Укажите х”, X
- •15 ? “Неверно”
- •2.4. Организация циклов
- •Программа к задаче 9
- •Input "Введите числа X и y", X, y
- •2.5. Работа с массивами
- •Input "Введите число вкладчиков и процент ",n,p
- •2.6. Модульное программирование
- •2.7. ОбРаботка Символьных данных
- •Пример. ?instr(”Саша”,”а”),instr(3,”Саша”,”а”) Результат: 2,4
- •2.8. Численные методы анализа
- •Input “Введите левую и правую границы a и в ”, a, b,
- •Input “Введите допустимую погрешность e ”, e
- •2.9. Выявление нажатия клавиш
- •2.10. Работа с графикой
- •2.11. Работа с дисковыми файлами
- •Тесты по курсу
- •Литература
Input “Введите левую и правую границы a и в ”, a, b,
Input “Введите допустимую погрешность e ”, e
y1=COS(a): y2=COS(b) ‘вычисляем функцию на границах отрезка
WHILE ABS(b-a)>=e ‘сравниваем длину отрезка с погрешностью
‘если отрезок длиннее, вычисления повторяются снова
c=(b-a)/2+a ‘находим середину нового отрезка
y3=COS(c) ‘вычисляем функцию в этой точке
‘если на этом отрезке функция пересекает ось Х, в качестве
‘новой левой границы берем эту точку, иначе берем ее в качестве
IF y1*y3 > 0 THEN a=c ELSE b=c ‘правой границы
WEND
PRINT “Корень уравнения=” a,“Значение функции в точке А=” COS(a)
Более быстрым средством нахождения корней является метод Ньютона (метод касательных). Рассмотрим графическую интерпретацию метода (рис.2.8.5) нахождения корня на участке [А,В]. Примем, например, правую границу В интервала за начальное приближение. Восстановим перпендикуляр из этой точки до пересечения с кривой Y(Xо). Затем через Y(Xо) проведем касательную к кривой до пересечения с осью абсцисс. Точка пересечения Х1 является первым приближением к искомому корню Х. Повторив эти действия, получим приближение Х2, затем Х3 и т.д., причем каждое последующее приближение расположено ближе к истинному корню Х, никогда не достигая его. Алгоритм решения изображен на рис.2.8.6. Известно, что производная в точке Y(Xo) равна тангенсу угла
Y'(Xo)=Tg()=Y(Xo)/(Xo–X1)
Отсюда: X1=Xo–Y(Xo)/Y'(Xo); X2=X1–Y(X1)/Y'(X1)
Или, в общем случае: Xi+1=Xi–Y(Xi)/Y'(Xi)
П роцесс последовательного приближения (итерации) закончим, когда Хi–Хi+1<E, где E – заранее заданное малое число (допустимая погрешность). Ниже приведена программа уточнения корней для уравнения вида: AX3+BX2+CX+D=0.
Программа нахождения корня методом касательных
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-коды можно посмотреть в любом справочнике.
Возможность выявить нажатия на клавиатуру предоставляют следующие функции и операторы.
INKEY$
Функция возвращает одно- или двухбайтную строку, содержащую символ, считанный с клавиатуры. Если символ не был считан, возвращается нулевая строка. Однобайтовая строка содержит ASCII-символ. Двухбайтная строка содержит расширенный код: первый символ содержит 0, второй – расширенный код специальной клавиши или клавиши управления курсором. Эти коды приведены в приложении.
Поскольку функция не создает состояние ожидания, следует использовать бесконечный цикл для фиксации нажатия, как, например, показано ниже.
DO
a$ = INKEY$
LOOP WHILE a$ = ""
Здесь цикл DO повторяется до тех пор, пока переменная a$ остается пустой (a$ =пустые кавычки). Внутри цикла этой переменной функцией INKEY$ каждый раз присваивается значение нажатой клавиши. Как только будет нажата любая клавиша – цикл завершится. Далее будет можно анализировать переменную a$ с целью выяснения того, какая же именно клавиша была нажата.
Ниже приведена программа, выводящая ASCII-коды всех нажатых клавиш (как буквенно-цифровых, так и управляющих). Для выяснения того, к какой их этих двух групп относится данная клавиши, ее код сначала анализируется на длину. Если длина 1, значит клавиша обычная, если – 2, то управляющая. В последнем случае выводится только код второго символа из a$, т.е. ASC(RIGHT$(a$, 1)). Справа от программы изображены результаты ее работы при нажатии клавиш q, w, ц, у, .
-
PRINT "Символ Код"
DO
DO ‘цикл ожидания нажатия
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 IF
LOOP
Символ Код
q 113
w 119
ц 230
у 227
72
77
80
Оператор
ON KEY (код_клавиши) GOSUB метка
позволяет отслеживать нажатие функциональной или управляющей клавиши с указанным кодом с передачей управления к оператору с заданной меткой. Для таких клавиш назначены здесь следующим коды:
1-10,30,31 – функциональные клавиши F1-F10 и F11, F12,
11,12,13,14 – клавиши .
Этот оператор в форме
ON KEY (код_клавиши) ON/OFF
включает/отключает действие, назначенное клавише оператором вида ON KEY (...) GOSUB.
Состояние задержки на заданное число секунд для просмотра большого объема данных на экране и/или для восприятия какого-либо события можно организовать оператором
SLEEP [число_секунд_задержки]
Пауза может быть прекращена нажатием любой клавиши. Если параметр число секунд отсутствует, ожидание будет бесконечным. Например, в следующем фрагменте программы производится предъявление элементов массива А “порциями” по 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