Advertisement
Guest User

Untitled

a guest
Sep 21st, 2017
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.78 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. #include <cstdlib>
  4. #include <sstream>
  5. #include <iomanip>
  6.  
  7. using namespace std;
  8.  
  9.  
  10.  
  11. double zaok(double x)
  12. {
  13.     return round(x*100)/100;
  14. }
  15.  
  16. double losuj(double fmin, double fmax)
  17. {
  18.     double f = (double)rand() / RAND_MAX;
  19.     return fmin + f * (fmax - fmin);
  20. }
  21.  
  22. template <typename T> string tostr(const T& t) {
  23.    ostringstream os;
  24.    os << t;
  25.    return os.str();
  26. }
  27.  
  28. void ZamianaAB(double &a, double &b)
  29. {
  30.     double pom;
  31.     pom = a;
  32.     a = b;
  33.     b = pom;
  34. }
  35.  
  36. void ZamianaString(string &a, string &b)
  37. {
  38.     string pom;
  39.     pom = a;
  40.     a = b;
  41.     b = pom;
  42. }
  43.  
  44. double losujRzeczywiste(double a, double c)
  45. {
  46.     return a + (1.0 * rand() / (RAND_MAX-1))*(c-a);
  47. }
  48.  
  49.  
  50. string przybliz(double x)
  51. {
  52.     string s = tostr(x);
  53.  
  54.     for(int i = s.size()-1;i>=4;i--){
  55.         if(s[i] >='5' && s[i] <=':'){
  56.             if(s[i-1] != '.'){
  57.                 s[i-1]+=1;
  58.                 s[i] = '0';
  59.             }
  60.             else{
  61.                 s[i-2]+=1;
  62.                 s[i] = '0';
  63.                 break;
  64.             }
  65.         }
  66.     }
  67.  
  68.     return s;
  69.  
  70. }
  71.  
  72. double RzutowanieNaDouble(string s)
  73. {
  74.     double wynik;
  75.     istringstream iss(s);
  76.     iss>>wynik;
  77.     return wynik;
  78. }
  79.  
  80.  
  81.  
  82.  
  83. double Oblicz_wielomian(double * tab, int n,double x)
  84. {
  85.     double wynik = 0;
  86.     for(int i = 0; i<n;i++){
  87.         wynik += tab[i] * pow(x,i);
  88.     }
  89.     return wynik;
  90. }
  91.  
  92. double Oblicz_ex(double a, double x)
  93. {
  94.     return exp(-a*x*x);
  95. }
  96.  
  97. double wczytaj_wielomian()
  98. {
  99.     int n;
  100.     double licznik = 0;
  101.     cin>>n;
  102.     double granicaL,granicaP;
  103.     double *tab = new double[n];
  104.     double ilosc_losowan = 100000000;
  105.     for(int i = 0 ; i<n; i++){
  106.         cin>>tab[i];
  107.     }
  108.     cin>>granicaL;
  109.     cin>>granicaP;
  110.     ZamianaAB(granicaL,granicaP);
  111.     string pom = "0";
  112.     //cout<<"Pole: "<<pole<<endl;
  113.     double pomD = RzutowanieNaDouble(pom);
  114.     pom = przybliz(pomD);
  115.     ZamianaAB(granicaL,granicaP);
  116.     double pole = 200*(granicaP - granicaL);
  117.     for(int i = 0; i<ilosc_losowan;i++){
  118.  
  119.     double WylosowanyX = losuj(granicaL,granicaP);
  120.     //cout<<WylosowanyX<<endl;
  121.     double WylosowanyY = losuj(-100,100);
  122.     double wynikWielomianu = Oblicz_wielomian(tab,n,WylosowanyX);
  123.     if(WylosowanyY < 0 && WylosowanyY >= wynikWielomianu ){
  124.         licznik --;
  125.     }
  126.     if(WylosowanyY > 0 && WylosowanyY < wynikWielomianu){
  127.         licznik ++;
  128.     }
  129.     }
  130.  
  131.     double wynik = pole * (licznik/ilosc_losowan);
  132.     //cout<<"Licznik: "<<licznik<<endl;
  133.     //cout<<"Wynik: "<<wynik<<endl;
  134.  
  135.     return wynik;
  136. }
  137.  
  138. double ex()
  139. {
  140.     double licznik = 0;
  141.     double a;
  142.     cin>>a;
  143.     double granicaL,granicaP;
  144.     double WylosowanyY;
  145.     double WylosowanyX;
  146.     cin>>granicaL;
  147.     cin>>granicaP;
  148.     double ilosc_losowan = 100000000;
  149.     double pole = (granicaP - granicaL) * 1;
  150.     WylosowanyY = losujRzeczywiste(granicaL,granicaP);
  151.     WylosowanyX = losujRzeczywiste(0,1);
  152.     for(int i = 0; i<ilosc_losowan;i++){
  153.     WylosowanyX = losuj(granicaL,granicaP);
  154.     WylosowanyY = losuj(0,1);
  155.     double wynikWielomianu = Oblicz_ex(a,WylosowanyX);
  156.     if(WylosowanyY <= wynikWielomianu ){
  157.         licznik ++;
  158.     }
  159.     }
  160.  
  161.     double wynik = pole * (licznik/ilosc_losowan);
  162.     return wynik;
  163.  
  164.  
  165. }
  166.  
  167. int main()
  168. {
  169.     int n;
  170.     cin>>n;
  171.     char znak;
  172.     double wynik;
  173.     for(int i = 0; i<n;i++)
  174.     {
  175.         cin>>znak;
  176.         if(znak == 'C'){
  177.             wynik = wczytaj_wielomian();
  178.             //cout<<"Wynik przed zaok:"<<wynik<<endl;
  179.             cout<<zaok(wynik)<<endl;
  180.         }
  181.         if(znak == 'E'){
  182.             wynik = ex();
  183.             //cout<<"Wynik przed zaok:"<<wynik<<endl;
  184.             cout<<zaok(wynik)<<endl;
  185.         }
  186.     }
  187.  
  188.     //cout << "Hello world!" << endl;
  189.     return 0;
  190. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement