Программа
DEF FNP!(X!,Y!)=X!+(3+Y!*Y!)^(1/3) 'Функция вычисления производной
DEF FNDifRunKut! (X!, Y!, Break%, Xresult!)
' Функция вычисления значения искомой функции
IF X!<>Xresult! then
IF Break%=0 THEN Break%=1
S! = (Xresult! - X!) / Break% 'Определение шага разбиения
FOR Meter% = 0 TO Break% - 1 'Цикл вычисления первообразной в точке Xresul
k1! = S! * (FNP!(X! + Meter% * S!,Y!))
k2! = S! * (FNP!(X! + Meter% * S! + S! / 2,Y!))
k3! = S! * (FNP!(X! + Meter% * S! + S! / 2,Y!))
k4! = S! * (FNP!(X! + Meter% * S! + S!,Y!))
Y! = Y! + (k1! + 2 * k2! + 2 * k3! + k4!) / 6
NEXT Meter%
END IF
FNDifRunKut! = Y! ' Определение значения функции
END DEF
DEF FNF!(X!)=FNDifRunKut! (0.3,0.2,CINT((X!-0.3)/0.1), X!) 'Отображаемая функция
SUB OutGraph(Left!,Right!) ' Процедура вывода графика
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(MaxX%*8/10) STEP CINT(MaxX%*8/10/(Right!-Left!)*0.1) '!
'Цикл просмотра значений функции на выводимом промежутке
BufY!=FNF!(Left!+i%*ScaleX!)'Вычисление функции в текущей точке
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(MaxX%*8/10) STEP CINT(MaxX%*8/10/(Right!-Left!)*0.1) '!
'Цикл прорисовки графика
LINE -(CINT(i%+MaxX%/10),CINT(MaxY%*9/10-(FNF(Left!+i%*ScaleX!)-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(0.3,3.1) 'Вывод графика
END
Бесплатные примеры программ
Примеры написанных программ
Помощь студентам по программированию