Построить графики функций (на одной координатной сетке) - 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
Листинг программы
  1. SCREEN 12
  2. DIM MinX, MinY, MaxX, MaxY
  3. DIM XRazn, YRazn, MnogX, MnogY
  4. DIM StpScX AS INTEGER, StpScY AS INTEGER
  5.   '  Функции графиков
  6.   DEF FnY1 (x) = 150 - 20 * x
  7.   DEF FnY2 (x) = EXP(.8 * x)
  8.   DEF FnY3 (x) = 2 * x ^ 2 - 4
  9.  '  Ф-ция поиска границ
  10. DEF FnMinMax (x, y)
  11.     IF x < MinX THEN MinX = x
  12.     IF x > MaxX THEN MaxX = x
  13.     IF y < MinY THEN MinY = y
  14.     IF y > MaxY THEN MaxY = y
  15. END DEF
  16.  '  Экранное преобразование
  17. DEF FnGetX (x) = x * MnogX - MinX * MnogX
  18. DEF FnGetY (y) = y * MnogY - MaxY * MnogY
  19.  '  Параметры трассировки функций
  20. Str1 = -10: Str2 = 0: Str3 = -5
  21. End1 = 10: End2 = 10: End3 = 10
  22. Stp1 = .01: Stp2 = .03: Stp3 = .1
  23.  '  Переменные для трассировки
  24. x1 = Str1: x2 = Str2: x3 = Str3
  25. y1 = FnY1(x1): y2 = FnY2(x2): y3 = FnY3(x3)
  26.  '  Вычисляем параметры графиков
  27. DO
  28.   Go = 0: y1 = FnY1(x1): y2 = FnY2(x2): y3 = FnY3(x3)
  29.   IF x1 < End1 THEN x1 = x1 + Stp1: y1 = FnY1(x1): Go = -1
  30.   IF x2 < End2 THEN x2 = x2 + Stp2: y2 = FnY2(x2): Go = -1
  31.   IF x3 < End3 THEN x3 = x3 + Stp3: y3 = FnY3(x3): Go = -1
  32.   i = FnMinMax(x1, y1)     '  Ищем границы
  33.   i = FnMinMax(x2, y2)
  34.   i = FnMinMax(x3, y3)
  35. LOOP WHILE Go
  36.   PRINT
  37.   PRINT "  "; INT(MinX); INT(MinY); INT(MaxX); INT(MaxY)
  38.  '  Реинициализация трассировки
  39. x1 = Str1: x2 = Str2: x3 = Str3
  40. y1 = FnY1(x1): y2 = FnY2(x2): y3 = FnY3(x3)
  41.  '  Старые координаты(Прошлый шаг трассировки)
  42. xo1 = x1: xo2 = x2: xo3 = x3
  43. yo1 = y1: yo2 = y2: yo3 = y3
  44.  '  Делаем фрейм пошире, чтобы больше было видно
  45.  '  + сетку, если она где-то рядом
  46.  XRazn = MaxX - MinX
  47.  YRazn = MinY - MaxY
  48.  MinX = MinX - XRazn / 4
  49.  MaxX = MaxX + XRazn / 4
  50.  MinY = MinY + YRazn / 4
  51.  MaxY = MaxY - YRazn / 4
  52.  '  Для преобразования координат в экранные
  53. XRazn = MaxX - MinX    ' Разности координат графиков
  54. YRazn = MinY - MaxY
  55.   IF XRazn = 0 THEN XRazn = .00001
  56.   IF YRazn = 0 THEN YRazn = .00001
  57. MnogX = 640 / XRazn    ' Отнош. к разностям коо. гр.
  58. MnogY = 480 / YRazn
  59. StpScX = 1: StpScY = 1 ' Шаг сетки
  60.  '  Если сетка не умещается увеличиваем шаг сетки
  61. DO: ScTst = 0
  62.   IF ABS(XRazn / StpScX) > 160 THEN StpScX = StpScX * 10: ScTst = -1
  63.   IF ABS(YRazn / StpScY) > 120 THEN StpScY = StpScY * 10: ScTst = -1
  64. LOOP WHILE ScTst
  65.  
  66.  '  Нарисуем сетку
  67. DlSc = SQR(1 / ABS(XRazn / StpScX) + 1 / ABS(XRazn / StpScX)) * 10
  68. IF DlSc > 10 THEN DlSc = 10
  69. IF DlSc < 2 THEN DlSc = 2
  70. LINE (FnGetX(MinX), FnGetY(0))-(FnGetX(MaxX), FnGetY(0)), 8
  71. LINE (FnGetX(0), FnGetY(MinY))-(FnGetX(0), FnGetY(MaxY)), 8
  72. FOR i = INT(MinX) TO INT(MaxX) STEP StpScX
  73.   LINE (FnGetX(i), FnGetY(0) - DlSc)-(FnGetX(i), FnGetY(0) + DlSc), 8
  74. NEXT
  75. FOR i = INT(MinY) TO INT(MaxY) STEP StpScY
  76.   LINE (FnGetX(0) - DlSc, FnGetY(i))-(FnGetX(0) + DlSc, FnGetY(i)), 8
  77. NEXT
  78.  
  79.  '  Рисуем графики
  80. DO
  81.   Go = 0: y1 = FnY1(x1): y2 = FnY2(x2): y3 = FnY3(x3)
  82.   IF x1 < End1 THEN x1 = x1 + Stp1: y1 = FnY1(x1): Go = -1
  83.   IF x2 < End2 THEN x2 = x2 + Stp2: y2 = FnY2(x2): Go = -1
  84.   IF x3 < End3 THEN x3 = x3 + Stp3: y3 = FnY3(x3): Go = -1
  85.     LINE (FnGetX(xo1), FnGetY(yo1))-(FnGetX(x1), FnGetY(y1)), 9
  86.     LINE (FnGetX(xo2), FnGetY(yo2))-(FnGetX(x2), FnGetY(y2)), 10
  87.     LINE (FnGetX(xo3), FnGetY(yo3))-(FnGetX(x3), FnGetY(y3)), 14
  88.   xo1 = x1: xo2 = x2: xo3 = x3  ' Старые координаты
  89.   yo1 = y1: yo2 = y2: yo3 = y3
  90. LOOP WHILE Go
  91.  
  92. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы