Программа
DEF FNF! (X!) = 10 * X! + X! * X! 'Отображаемая функция
SUB OutGraph (Left!, Right!, Stp!) ' Процедура вывода графика
MaxX% = 319 'Максимальная координата X
MaxY% = 199 'Максимальная координата Y
LINE (0, 0)-(MaxX%, MaxY%), 15, B 'Прорисовка рамки
ScaleX! = (Right! - Left!) / (MaxX% * 8) * 10 'Вычисление масштаба по оси X
IF ScaleX! = 0 THEN ScaleX! = 1
'Если масштаб по оси X равен 0, то переопределение масштаба
'Поиск максимального и минимального значений функции на выводимом промежутке:
HiY! = FNF!(Left!) 'Начальное определение максимума
LoY! = HiY! 'Начальное определение минимума
FOR i% = 1 TO CINT((Right! - Left!) / Stp!)
'Цикл просмотра значений функции на выводимом промежутке
BufY! = FNF!(Left! + i% * Stp!) 'Вычисление функции в текущей точке
IF BufY! > HiY! THEN 'Если значение функции перевосходит максимальное
HiY! = BufY! 'то переопределение
'максимального значения функции
ELSEIF BufY! < LoY! THEN
'Иначе, если значение функции меньше минимального
'то переопределение минимального значения функции
LoY! = BufY!
END IF
NEXT i%
ScaleY! = (HiY! - LoY!) / (MaxY% * 8) * 10 'Вычисление масштаба по оси Y
IF ScaleY! = 0 THEN ScaleY! = 1
'Если масштаб по оси Y равен 0, то переопределение масштаба
PSET (CINT(MaxX% / 10), CINT(MaxY% * 9 / 10 - (FNF!(Left!) - LoY!) / ScaleY!)), 15
'Прорисовка первой точки графика
FOR i% = 1 TO CINT((Right! - Left!) / Stp!)'Цикл прорисовки графика
LINE -(CINT((.1 + i% * Stp! / (Right! - Left!) * .8) * MaxX%), CINT(MaxY% * 9 / 10 - (FNF!(Left! + i% * Stp!) - LoY!) / ScaleY!)), 15
'Прорисовка линии от предыдущей точки к текущей
NEXT i%
OXy! = MaxY% * 9 / 10 + LoY! / ScaleY! 'Вычисление Y-координаты оси OX
'Определение масок типа линий:
HiColor% = &HFFFF
LoColor% = &HF0F0
'Если Y-координата оси OX выходит за границу вывода, то переопределение
'Y-координаты и определение типа линии:
IF OXy! > MaxY% * 19 / 20 THEN
OXy! = MaxY% * 19 / 20
Style% = LoColor%
ELSEIF OXy! < MaxY% / 20 THEN
OXy! = MaxY% / 20
Style% = LoColor%
ELSE
Style% = HiColor%
END IF
LINE (CINT(MaxX% / 20), CINT(OXy!))-(CINT(MaxX% * 19 / 20), CINT(OXy!)), 15, , Style%
'Прорисовка оси OX
'Прорисовка стрелки на оси OX:
LINE (CINT(MaxX% * 19 / 20), CINT(OXy!))-(CINT(MaxX% * 18.5 / 20), CINT(OXy! + MaxY% / 90)), 15
LINE (CINT(MaxX% * 19 / 20), CINT(OXy!))-(CINT(MaxX% * 18.5 / 20), CINT(OXy! - MaxY% / 90)), 15
OYx! = MaxX% / 10 - Left! / ScaleX! 'Вычисление X-координаты оси OY
'Если X-координата оси OY выходит за границу вывода, то переопределение
'X-координаты и определение типа линии:
IF OYx! > MaxX% * 19 / 20 THEN
OYx! = MaxX% * 19 / 20
Style% = LoColor%
ELSEIF OYx! < MaxX% / 20 THEN
OYx! = MaxX% / 20
Style% = LoColor%
ELSE
Style% = HiColor%
END IF
LINE (CINT(OYx!), CINT(MaxY% / 20))-(CINT(OYx!), CINT(MaxY% * 19 / 20)), 15, , Style%
'Прорисовка оси OY
'Прорисовка стрелки на оси OY:
LINE (CINT(OYx!), CINT(MaxY% / 20))-(CINT(OYx! + MaxX% / 120), CINT(MaxY% / 20 + MaxY% * 9 / 160)), 15
LINE (CINT(OYx!), CINT(MaxY% / 20))-(CINT(OYx! - MaxX% / 120), CINT(MaxY% / 20 + MaxY% * 9 / 160)), 15
END SUB
'-------------------------------------------------------------------------------
SCREEN 1 'Переключение видеосистемы в графический режим
CALL OutGraph(-15, 15, 1) 'Вывод графика
Бесплатные примеры программ
Примеры написанных программ
Помощь студентам по программированию