Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2012, 21:13   #1
botane4ka
 
Регистрация: 03.12.2011
Сообщений: 9
По умолчанию задача о бросании тела (дифференциальные уравнения)

Нужна помощь в решении задачи.

Тело бросается под углом альфа к горизонту с начальной скоростью V0. На тело действуют сила тяжести и сила трения о воздух.
Нам были дана две формулы - дискретное решение и аналитическое.
Необходимо, чтобы программа строила на одном графике оба решения.
Задается нами угол, коэффициент трения, начальная скорость, масса тела.
Аналитическое решение имеет вид:
xa=(vt/g)*v0*cos(alpha)*(1- exp (-t*(g/vt)));
ya=(vt/g)*(v0*sin(alpha)+vt)*(1-exp(-(t*g)/vt)-vt*t);
Вот в нем и состоит проблема. Значения по у-ку считает отрицательными, из-за этого не троит график. Хотя подсчитывала вручную, вроде другие значения. Вот текст программы в Borland C++:



#include <graphics.h>
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#include <stdlib.h>
#include <math.h>



double plot(double m, double c,double v0,double alpha)

{

/* request auto detection */
int gdriver = DETECT, gmode, errorcode;
int xmax, ymax;

/* initialize graphics and local variables */
initgraph(&gdriver, &gmode, "d:\\borlandc\\bgi");

/* read result of initialization */
errorcode = graphresult();
/* an error occurred */
if (errorcode != grOk)
{
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1);
}

setcolor(getmaxcolor());
xmax = getmaxx();
ymax = getmaxy();

/* draw a diagonal line */
//line(0, 0, xmax, ymax);


int x0, y0, sx=50, sy=50, i, j, k ;

// x0=xmax/2;
y0=ymax/2;



//osi koordinat
// 1 sistema koordinat

line (5, ymax-5, xmax-5, ymax-5); //Ox
line (5, y0, 5, ymax-5); //Oy

//shtrixi po ox
for (j=0; j<=xmax/sx; j++)
{ line (5+sx*j, ymax-7,5+sx*j,ymax-3);
}

//shtrixi po oy
for (k=y0/sy; k<=(ymax-5)/sy; k++)
{line (3, sy*k,7, sy*k);
}


//MOE SO4INENIE

// const int n=10;
double vx, vy, x, y, xx, yy, g=9.8, dt=0.005, t, xa, ya, xxa, yya;

alpha=alpha*0.01745;
vx=v0*cos(alpha);
vy=v0*sin(alpha);
x=0;
y=0;


while (y>=0)
{
vx=(-(c*dt)/m+1)*vx;
vy=-g*dt +(-c*dt/m +1)*vy;
x=dt*vx+x;
y=dt*vy+y;

xx=x*sx+5;
yy=ymax-y*sy-5;
putpixel(xx, yy, 5);

}



double vt=(m*g)/c;
t=0;
int n=10;
while (n>=0)
{
xa=(vt/g)*v0*cos(alpha)*(1- exp (-t*(g/vt)));
ya=(vt/g)*(v0*sin(alpha)+vt)*(1-exp(-(t*g)/vt)-vt*t);
t=t+dt;

n=n-1;
xxa=xa+5;
yya=ymax-ya-5;

cout<<endl<<" "<<xa<<"\t"<<ya<<"\t"<<xxa<<"\t"<<y ya;
getch();
putpixel(xxa, yya, 2);

}


/* clean up */
getch();
closegraph();
return 0;

}



main ()

{ int om;
double m, c, v0, alpha;

clrscr();
// while(om!=0)

// {
/*
cout<<"massa tela m=";
cin>>m;
cout<<endl<<"koeffizient trenia c=";
cin>>c;
cout<<endl<<"na4alnaia skorost' v0=";
cin>>v0;
cout<<endl<<"ygol alpha=";
cin>>alpha;
*/

m=20;
c=30;
v0=15;
alpha=70;

plot (m, c, v0, alpha);

getch();

// cout<<"One more? (no-0/yes- any other)";
// cin>>om;

// }

return 0;

}
botane4ka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача, взаимоотменяемые условия уравнения Sagara2_kis7 Помощь студентам 1 02.03.2011 17:05
Задача на нахождение корней уравнения DarkSwan Общие вопросы C/C++ 0 19.10.2010 15:16
краевая задача диф.уравнения методом стрельбы Laplas Помощь студентам 2 26.12.2009 23:56
Дифференциальные уравнения StudentPolitech Общие вопросы C/C++ 12 07.06.2009 17:48
Дифференциальные уравнения ACE Valery Свободное общение 4 28.05.2009 23:21