Построить графики функций (на одной координатной сетке) - 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   ' Ждать кнопку

Объяснение кода листинга программы

  1. Строка SCREEN 12 устанавливает размер экрана 12.
  2. Строки DIM MinX, MinY, MaxX, MaxY определяют переменные для хранения минимальных и максимальных значений координат.
  3. Строки DIM XRazn, YRazn, MnogX, MnogY определяют переменные для хранения разности координат графиков и отношения к размеру экрана.
  4. Строки StpScX AS INTEGER, StpScY AS INTEGER определяют переменные для хранения шага сетки.
  5. Строки DEF FnY1 (x) = 150 - 20 * x, DEF FnY2 (x) = EXP(.8 * x), DEF FnY3 (x) = 2 * x ^ 2 - 4 определяют функции для построения графиков.
  6. Строка DEF FnMinMax (x, y) определяет функцию для поиска границ графиков.
  7. Строки DEF FnGetX (x) = x * MnogX - MinX * MnogX, DEF FnGetY (y) = y * MnogY - MaxY * MnogY определяют функции для преобразования координат в экранные.
  8. Строки Str1 = -10: Str2 = 0: Str3 = -5, End1 = 10: End2 = 10: End3 = 10, Stp1 = .01: Stp2 = .03: Stp3 = .1 определяют начальные и конечные точки и шаг трассировки для каждой функции.
  9. Строки x1 = Str1: x2 = Str2: x3 = Str3, y1 = FnY1(x1): y2 = FnY2(x2): y3 = FnY3(x3) определяют начальные точки трассировки для каждой функции.
  10. Строки DO, LOOP WHILE Go используются для цикла трассировки функций.
  11. Строки LINE (FnGetX(xo1), FnGetY(yo1))-(FnGetX(x1), FnGetY(y1)) рисуют линии для каждой функции.
  12. Строка WHILE INKEY$ = ``: WEND используется для ожидания нажатия клавиши.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.556 из 5
Похожие ответы