Построить графики функций (на одной координатной сетке) - QBasic
Формулировка задачи:
Срочно нужна помощь по графике.
Задача.
Построить графики функций (на одной координатной сетке).
Вывести всю сопроводительную информацию
(обозначение осей, масштаб, единичный отрезок, надписать графики функций)
Примеры
Хнач Хкон шаг Примеры
-10 10 0.01 1)y=150-20*x
0 10 0.03 2) y= exp(0.8*x)
-5 10 0.1 3) y=2*x^2-4
Буду очень признателен если будут пояснения, спасибо.
Решение задачи: «Построить графики функций (на одной координатной сетке)»
textual
Листинг программы
- SCREEN 12
- DIM MinX, MinY, MaxX, MaxY
- DIM XRazn, YRazn, MnogX, MnogY
- DIM StpScX AS INTEGER, StpScY AS INTEGER
- ' Функции графиков
- DEF FnY1 (x) = 150 - 20 * x
- DEF FnY2 (x) = EXP(.8 * x)
- DEF FnY3 (x) = 2 * x ^ 2 - 4
- ' Ф-ция поиска границ
- DEF FnMinMax (x, y)
- IF x < MinX THEN MinX = x
- IF x > MaxX THEN MaxX = x
- IF y < MinY THEN MinY = y
- IF y > MaxY THEN MaxY = y
- END DEF
- ' Экранное преобразование
- DEF FnGetX (x) = x * MnogX - MinX * MnogX
- DEF FnGetY (y) = y * MnogY - MaxY * MnogY
- ' Параметры трассировки функций
- Str1 = -10: Str2 = 0: Str3 = -5
- End1 = 10: End2 = 10: End3 = 10
- Stp1 = .01: Stp2 = .03: Stp3 = .1
- ' Переменные для трассировки
- x1 = Str1: x2 = Str2: x3 = Str3
- y1 = FnY1(x1): y2 = FnY2(x2): y3 = FnY3(x3)
- ' Вычисляем параметры графиков
- DO
- Go = 0: y1 = FnY1(x1): y2 = FnY2(x2): y3 = FnY3(x3)
- IF x1 < End1 THEN x1 = x1 + Stp1: y1 = FnY1(x1): Go = -1
- IF x2 < End2 THEN x2 = x2 + Stp2: y2 = FnY2(x2): Go = -1
- IF x3 < End3 THEN x3 = x3 + Stp3: y3 = FnY3(x3): Go = -1
- i = FnMinMax(x1, y1) ' Ищем границы
- i = FnMinMax(x2, y2)
- i = FnMinMax(x3, y3)
- LOOP WHILE Go
- PRINT " "; INT(MinX); INT(MinY); INT(MaxX); INT(MaxY)
- ' Реинициализация трассировки
- x1 = Str1: x2 = Str2: x3 = Str3
- y1 = FnY1(x1): y2 = FnY2(x2): y3 = FnY3(x3)
- ' Старые координаты(Прошлый шаг трассировки)
- xo1 = x1: xo2 = x2: xo3 = x3
- yo1 = y1: yo2 = y2: yo3 = y3
- ' Делаем фрейм пошире, чтобы больше было видно
- ' + сетку, если она где-то рядом
- XRazn = MaxX - MinX
- YRazn = MinY - MaxY
- MinX = MinX - XRazn / 4
- MaxX = MaxX + XRazn / 4
- MinY = MinY + YRazn / 4
- MaxY = MaxY - YRazn / 4
- ' Для преобразования координат в экранные
- XRazn = MaxX - MinX ' Разности координат графиков
- YRazn = MinY - MaxY
- IF XRazn = 0 THEN XRazn = .00001
- IF YRazn = 0 THEN YRazn = .00001
- MnogX = 640 / XRazn ' Отнош. к разностям коо. гр.
- MnogY = 480 / YRazn
- StpScX = 1: StpScY = 1 ' Шаг сетки
- ' Если сетка не умещается увеличиваем шаг сетки
- DO: ScTst = 0
- IF ABS(XRazn / StpScX) > 160 THEN StpScX = StpScX * 10: ScTst = -1
- IF ABS(YRazn / StpScY) > 120 THEN StpScY = StpScY * 10: ScTst = -1
- LOOP WHILE ScTst
- ' Нарисуем сетку
- DlSc = SQR(1 / ABS(XRazn / StpScX) + 1 / ABS(XRazn / StpScX)) * 10
- IF DlSc > 10 THEN DlSc = 10
- IF DlSc < 2 THEN DlSc = 2
- LINE (FnGetX(MinX), FnGetY(0))-(FnGetX(MaxX), FnGetY(0)), 8
- LINE (FnGetX(0), FnGetY(MinY))-(FnGetX(0), FnGetY(MaxY)), 8
- FOR i = INT(MinX) TO INT(MaxX) STEP StpScX
- LINE (FnGetX(i), FnGetY(0) - DlSc)-(FnGetX(i), FnGetY(0) + DlSc), 8
- NEXT
- FOR i = INT(MinY) TO INT(MaxY) STEP StpScY
- LINE (FnGetX(0) - DlSc, FnGetY(i))-(FnGetX(0) + DlSc, FnGetY(i)), 8
- NEXT
- ' Рисуем графики
- DO
- Go = 0: y1 = FnY1(x1): y2 = FnY2(x2): y3 = FnY3(x3)
- IF x1 < End1 THEN x1 = x1 + Stp1: y1 = FnY1(x1): Go = -1
- IF x2 < End2 THEN x2 = x2 + Stp2: y2 = FnY2(x2): Go = -1
- IF x3 < End3 THEN x3 = x3 + Stp3: y3 = FnY3(x3): Go = -1
- LINE (FnGetX(xo1), FnGetY(yo1))-(FnGetX(x1), FnGetY(y1)), 9
- LINE (FnGetX(xo2), FnGetY(yo2))-(FnGetX(x2), FnGetY(y2)), 10
- LINE (FnGetX(xo3), FnGetY(yo3))-(FnGetX(x3), FnGetY(y3)), 14
- xo1 = x1: xo2 = x2: xo3 = x3 ' Старые координаты
- yo1 = y1: yo2 = y2: yo3 = y3
- LOOP WHILE Go
- WHILE INKEY$ = "": WEND ' Ждать кнопку
Объяснение кода листинга программы
- Строка
SCREEN 12
устанавливает размер экрана 12. - Строки
DIM MinX, MinY, MaxX, MaxY
определяют переменные для хранения минимальных и максимальных значений координат. - Строки
DIM XRazn, YRazn, MnogX, MnogY
определяют переменные для хранения разности координат графиков и отношения к размеру экрана. - Строки
StpScX AS INTEGER, StpScY AS INTEGER
определяют переменные для хранения шага сетки. - Строки
DEF FnY1 (x) = 150 - 20 * x
,DEF FnY2 (x) = EXP(.8 * x)
,DEF FnY3 (x) = 2 * x ^ 2 - 4
определяют функции для построения графиков. - Строка
DEF FnMinMax (x, y)
определяет функцию для поиска границ графиков. - Строки
DEF FnGetX (x) = x * MnogX - MinX * MnogX
,DEF FnGetY (y) = y * MnogY - MaxY * MnogY
определяют функции для преобразования координат в экранные. - Строки
Str1 = -10: Str2 = 0: Str3 = -5
,End1 = 10: End2 = 10: End3 = 10
,Stp1 = .01: Stp2 = .03: Stp3 = .1
определяют начальные и конечные точки и шаг трассировки для каждой функции. - Строки
x1 = Str1: x2 = Str2: x3 = Str3
,y1 = FnY1(x1): y2 = FnY2(x2): y3 = FnY3(x3)
определяют начальные точки трассировки для каждой функции. - Строки
DO
,LOOP WHILE Go
используются для цикла трассировки функций. - Строки
LINE (FnGetX(xo1), FnGetY(yo1))-(FnGetX(x1), FnGetY(y1))
рисуют линии для каждой функции. - Строка
WHILE INKEY$ = ``: WEND
используется для ожидания нажатия клавиши.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д