Страница 1 из 1

График функций в С++

Добавлено: 17 мар 2014, 17:51
balans
Здравия Вам желаю, товарищи форумчане.
Пытался составить программу для построения графика. Вроде бы все сделал правильно, но графика все равно не видать.

Код: Выбрать все

#include <graphics.h>
#include <conio.h>
int main()
{
  float s,ds,M,dt,t;
  int gdriver = DETECT, gmode;

  initgraph(&gdriver, &gmode, "");
  t=0;
  s=1;

  do
  {
    M = 186.99*s/(s*s+0.0081)-81.3-305.84*(1-s)*(1-s)/0.98631;
    ds=-M*dt/4.7;
    s=s+ds;

    lineto(10*s+getmaxx()/2, 10*t+getmaxy()/2);
    t=t+0.02;
  }
  while(s>0);

  getch();    
  closegraph();

  return 0;
}


Подскажите, что же я опять упустил.

График функций в С++

Добавлено: 17 мар 2014, 18:02
zykov
Вот эти "initgraph" к C++ не имеют отношения. Это внешние библиотеки, которые вряд ли кто здесь знает. (В любом случае Вам нужно было бы самому написать, что Вы тут используете.)

Если Вам нужны графики для исследований, то лучше в C/C++ коде сбросить данные в текстовый файл (по строчкам, в строчке разделение запятой для .csv или просто пробелами/табуляциями). Потом его можно прочитать в excel или matlab и там построить графики какие нужно и при необходимости скинуть их в файл-картинку (.png, .pdf и т.д.).

График функций в С++

Добавлено: 17 мар 2014, 19:33
Wild Bill
Или сразу в gnuplot...

График функций в С++

Добавлено: 18 мар 2014, 17:42
guryev
balans писал(а):Source of the post
Пытался составить программу для построения графика.

Код: Выбрать все

#include <graphics.h>
#include <conio.h>
int main()
{
float s,ds,M,dt,t;
int gdriver = DETECT, gmode;
initgraph(&gdriver, &gmode, "");
t=0;
s=1;
do
{
M= 186.99*s/(s*s+0.0081)-81.3-305.84*(1-s)*(1-s)/0.98631;
       ds=-M*dt/4.7;
       s=s+ds;
lineto(10*s+getmaxx()/2, 10*t+getmaxy()/2);
t=t+0.02;
}
while(s>0);
getch();    
closegraph();
return 0;
}

А вы случаем не забыли проинициализировать dt ?

График функций в С++

Добавлено: 18 мар 2014, 20:09
balans
Здравия Вам желаю.
guryev писал(а):Source of the post
А вы случаем не забыли проинициализировать dt ?

Вы правы. Исправил и избавился от лишнего.
Получил программку

Код: Выбрать все

#include <graphics.h>
#include <math.h>
int main()
{
float s,ds,M1,M2,M,I,dt,t;
int gdriver = DETECT, gmode;
initgraph(&gdriver, &gmode, "");
t=0;
s=1;
dt=0.02;
do
{
          M1= 186.99*s/(s*s+0.0081);
          M2=-81.3*0-305.84*(1-s)*(1-s)/0.98631;
          M=M1-M2;
          ds=-M*dt/2800;
          s=s+ds;
          I=sqrt(M1*s);
          lineto(40*t,-20*I+getmaxx()/2);
          t=t+dt;
}
while(s>0.015);
getch();    
closegraph();
return 0;
}