Программа
'Эйлер
'Вывести функцию на интервале
'с заданным шагом, заданную
'производной
DEF FNDerivative!(X!,Y!)=X!+sin(Y!/Sqr(10)) 'Производная
DEF FNDifAyl!(X!,Y!,S,Xresult!) 'Вычисление значения исходной функции
IF S<>0 THEN
Break%=(Xresult!-X!)/S 'Определение шага разбиения
for Meter%=0 to Break%-1
Y!=Y!+S*(FNDerivative!(X!+Meter%*S,Y!))
'Вычисление первообразной в точке Xresul
NEXT Meter%
END IF
FNDifAyl!=Y! 'Определение значения функции
END DEF
DEF FNF!(X!,Stp)=FNDifAyl!(X0!,Y0!,Stp,X!) 'Отображаемая функция
SUB OutGraph(Left!,Right!,Stp) ' Процедура вывода графика
MaxX%=127 'Максимальная координата X
MaxY%=127 'Максимальная координата 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!,Stp) 'Начальное определение максимума
LoY!=HiY! 'Начальное определение минимума
FOR i%=1 TO CINT(MaxX%*8/10) STEP CINT(MaxX%*8/10/(Right!-Left!)*Stp)
'Цикл просмотра значений функции на выводимом промежутке
BufY!=FNF!(Left!+i%*ScaleX!,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!,Stp)-LoY!)/ScaleY!)),15
'Прорисовка первой точки графика
FOR i%=1 TO CINT(MaxX%*8/10) STEP CINT(MaxX%*8/10/(Right!-Left!)*Stp)
'Цикл прорисовки графика
LINE -(CINT(i%+MaxX%/10),CINT(MaxY%*9/10-(FNF(Left!+i%*ScaleX!,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
'-------------------------------------------------------------------------------
X0!=1.6
Y0!=2.9
SCREEN 2 'Переключение видеосистемы в графический режим
CALL OutGraph(1.6,4,0.05) 'Вывод графика
Бесплатные примеры программ
Примеры написанных программ
Помощь студентам по программированию