Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2014
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.86 KB | None | 0 0
  1. //Hanna Szreter, Mateusz Wasilewski, Karol Żala sem.VII IŚ
  2. //Metody Sanitarne
  3. //Zadanie Komin
  4. #include <fstream>
  5. #include <iostream>
  6. #include <cmath>
  7. using namespace std;
  8.  
  9. float g=9.80665,Cd=0.44,Fc,ro=1.2,rom=2500.0,ms=0.5,V,vx,vx2,vy,vy2,vx0,vy0=4.0,dt=0.001,u=3.0,d=0.0001,e=0.00001,vt,z1,z2,x,y=50.0;
  10. int a,j;
  11.  
  12. float vsx(float vx0, float vx)//ruch poziomy
  13. {
  14.     vt=vx0+dt/2.0*z1*((u-vx0)*(u-vx0)+(u-vx)*(u-vx));
  15.     return vt;
  16. }
  17.  
  18. float vsyw(float vy0, float vy)//wznoszenie
  19. {
  20.     vt=vy0+dt/2.0*(-z2-z1*(vy0*vy0+vy*vy));
  21.     return vt;
  22. }
  23.  
  24. float vsyo(float vy0, float vy)//opadanie
  25. {
  26.     vt=vy0+dt/2.0*(z2-z1*(vy0*vy0+vy*vy));
  27.     return vt;
  28. }
  29.  
  30. int main()
  31. {
  32.     ofstream dane("dane.txt");//otworzenie pliku
  33.     dane<<"Dane wejsciowe:\nVwiatru=3.0\nVwylotowe=4.0\nCd=0.44\nd=0.0001"<<endl;
  34.     dane<<"Czas X Y Vsx Vsy"<<endl;
  35.     dane<<0<<" "<<x<<" "<<y<<" "<<0<<" "<<vy0<<endl;
  36.     V=4.0/3.0*M_PI*d*d*d/8.0;//objętosc czastki
  37.     Fc=d*d*M_PI/4.0;//pole przekroju czastki
  38.     z1=Cd*Fc*ro/(2.0*(rom+ms*ro)*V);//stała pomocnicza
  39.     z2=2.0*(rom-ro)*g/(rom+ms*ro);//stała pomocnicza
  40.         do
  41.         {
  42.             j++;//zliczanie kolejnych kroków
  43.             do
  44.             {
  45.                 vx2=vx;//przypisanie obecnego przybliżenia Vsx do zmiennej pomocniczej (do porównania kolejnych wartosci)
  46.                 vx=vsx(vx0,vx);//wyliczenie kolejnego przybliżenia metodą trapezową
  47.             }
  48.             while (abs(vx-vx2)>=e);//warunek zakończenia kolejnych przybliżeń Vsx
  49.             if (a==0)//warunek dla wznoszenia
  50.             {
  51.                 do
  52.                 {
  53.                     vy2=vy;//przypisanie obecnego przybliżenia Vsy do zmiennej pomocniczej (do porównania kolejnych wartosci)
  54.                     vy=vsyw(vy0,vy);//wyliczenie kolejnego przybliżenia metodą trapezową
  55.                 }
  56.                 while (abs(vy-vy2)>=e);//warunek zakończenia kolejnych przybliżeń Vsy
  57.             }
  58.             if (vy<=0)//waunek rozpoczęcia opadania
  59.             {  
  60.                 a++;//zmiana wartosci a odpowiedzialnej za wznoszenie/opadanie
  61.                 vy=vy2;//anulowanie poprzedniego wyliczenia Vsy-cząstka zaczyna spadać, a liczylismy wznoszenie
  62.             }
  63.             if (a==1)//warunek dla opadania
  64.             {
  65.                 do
  66.                 {
  67.                     vy2=vy;//przypisanie obecnego przybliżenia Vsy do zmiennej pomocniczej (do porównania kolejnych wartosci)
  68.                     vy=vsyo(vy0,vy);//wyliczenie kolejnego przybliżenia metodą trapezową
  69.                 }
  70.                 while (abs(vy-vy2)>=e);//warunek zakończenia kolejnych przybliżeń Vsy
  71.             }
  72.             x+=dt*vx;//położenie x w nowym punkcie
  73.             if(a==0) y+=dt*vy;//położenie y w nowym punkcie (wznoszenie)
  74.             else y-=dt*vy;//położenie y w nowym punkcie (opadanie)
  75.             vx0=vx;//nowa prędkosć początkowa w kierunku x dla kolejnego punktu
  76.             vy0=vy;//nowa prędkosć początkowa w kierunku y dla kolejnego punktu
  77.             if(y>=0) dane<<dt*j<<" "<<x<<" "<<y<<" "<<vx<<" "<<vy<<endl;//zapis na bieżąco do pliku .txt
  78.         }
  79.         while (y>=0);//warunek zakończenia obliczeń (y osiąga 0 czyli cząstka spada na grunt)
  80.     dane.close();//zamykanie pliku
  81.     return 0;
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement