fork(1) download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. // FX 9.11: r,rho(r),m(r)
  4. // by Xellos
  5. // integrovane Eulerovou metodou
  6. // jednotky: SI zakladne
  7. typedef long double ld;
  8.  
  9. // konstanty
  10. ld R =8.314; // univ. plynova konstanta
  11. ld G =6.67e-11; // gravitacna konstanta
  12. ld M =2e-3; // molova hmotnost H2
  13. ld pi =3.1415;
  14.  
  15. ld dif_rho(ld r, ld rho, ld m, ld T) {
  16. // d(rho)/dr
  17. return -G*M*rho*m/(R*T*pow(r,2));}
  18.  
  19. ld V(ld r) {
  20. // objem gule s polomerom r
  21. return 4*pi/3*pow(r,3);}
  22.  
  23. ld S(ld r) {
  24. // povrch gule s polomerom r
  25. return 4*pi*pow(r,2);}
  26.  
  27. int main() {
  28. cout << scientific << setprecision(4);
  29.  
  30. // vstupne parametre
  31. ld T; // teplota mraku
  32. ld rho_c; // hustota v strede
  33. ld m_t; // hmotnost mraku
  34. cin >> T >> rho_c >> m_t;
  35.  
  36. // init ratanych premennych
  37. ld r =1e5; // polomer
  38. ld rho =rho_c; // rho(r)
  39. ld m =V(r)*rho; // m(r)
  40.  
  41. int t =0, K =10000; // vypisuj len kazdy K-ty riadok
  42.  
  43. while(m < m_t) {
  44. if((t++)%K == 0)
  45. cout << r << " " << rho << " " << m << "\n";
  46.  
  47. ld dr =r/1e6; // krok
  48. rho +=dif_rho(r,rho,m,T)*dr;
  49. m +=S(r)*rho*dr;
  50. r +=dr;
  51.  
  52. if(rho < 0) {
  53. cout << "FAIL\n";
  54. return 0;}
  55. }
  56.  
  57. return 0;}
  58.  
Success #stdin #stdout 0s 3296KB
stdin
Standard input is empty
stdout
Standard output is empty