Программа


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

Бесплатные примеры программ
Примеры написанных программ
Помощь студентам по программированию