![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 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; } |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
задача, взаимоотменяемые условия уравнения | 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 |