Построить графики функций (на одной координатной сетке) - 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 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
используется для ожидания нажатия клавиши.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д