Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- #include <cstdlib>
- #include <sstream>
- #include <iomanip>
- using namespace std;
- double zaok(double x)
- {
- return round(x*100)/100;
- }
- double losuj(double fmin, double fmax)
- {
- double f = (double)rand() / RAND_MAX;
- return fmin + f * (fmax - fmin);
- }
- template <typename T> string tostr(const T& t) {
- ostringstream os;
- os << t;
- return os.str();
- }
- void ZamianaAB(double &a, double &b)
- {
- double pom;
- pom = a;
- a = b;
- b = pom;
- }
- void ZamianaString(string &a, string &b)
- {
- string pom;
- pom = a;
- a = b;
- b = pom;
- }
- double losujRzeczywiste(double a, double c)
- {
- return a + (1.0 * rand() / (RAND_MAX-1))*(c-a);
- }
- string przybliz(double x)
- {
- string s = tostr(x);
- for(int i = s.size()-1;i>=4;i--){
- if(s[i] >='5' && s[i] <=':'){
- if(s[i-1] != '.'){
- s[i-1]+=1;
- s[i] = '0';
- }
- else{
- s[i-2]+=1;
- s[i] = '0';
- break;
- }
- }
- }
- return s;
- }
- double RzutowanieNaDouble(string s)
- {
- double wynik;
- istringstream iss(s);
- iss>>wynik;
- return wynik;
- }
- double Oblicz_wielomian(double * tab, int n,double x)
- {
- double wynik = 0;
- for(int i = 0; i<n;i++){
- wynik += tab[i] * pow(x,i);
- }
- return wynik;
- }
- double Oblicz_ex(double a, double x)
- {
- return exp(-a*x*x);
- }
- double wczytaj_wielomian()
- {
- int n;
- double licznik = 0;
- cin>>n;
- double granicaL,granicaP;
- double *tab = new double[n];
- double ilosc_losowan = 100000000;
- for(int i = 0 ; i<n; i++){
- cin>>tab[i];
- }
- cin>>granicaL;
- cin>>granicaP;
- ZamianaAB(granicaL,granicaP);
- string pom = "0";
- //cout<<"Pole: "<<pole<<endl;
- double pomD = RzutowanieNaDouble(pom);
- pom = przybliz(pomD);
- ZamianaAB(granicaL,granicaP);
- double pole = 200*(granicaP - granicaL);
- for(int i = 0; i<ilosc_losowan;i++){
- double WylosowanyX = losuj(granicaL,granicaP);
- //cout<<WylosowanyX<<endl;
- double WylosowanyY = losuj(-100,100);
- double wynikWielomianu = Oblicz_wielomian(tab,n,WylosowanyX);
- if(WylosowanyY < 0 && WylosowanyY >= wynikWielomianu ){
- licznik --;
- }
- if(WylosowanyY > 0 && WylosowanyY < wynikWielomianu){
- licznik ++;
- }
- }
- double wynik = pole * (licznik/ilosc_losowan);
- //cout<<"Licznik: "<<licznik<<endl;
- //cout<<"Wynik: "<<wynik<<endl;
- return wynik;
- }
- double ex()
- {
- double licznik = 0;
- double a;
- cin>>a;
- double granicaL,granicaP;
- double WylosowanyY;
- double WylosowanyX;
- cin>>granicaL;
- cin>>granicaP;
- double ilosc_losowan = 100000000;
- double pole = (granicaP - granicaL) * 1;
- WylosowanyY = losujRzeczywiste(granicaL,granicaP);
- WylosowanyX = losujRzeczywiste(0,1);
- for(int i = 0; i<ilosc_losowan;i++){
- WylosowanyX = losuj(granicaL,granicaP);
- WylosowanyY = losuj(0,1);
- double wynikWielomianu = Oblicz_ex(a,WylosowanyX);
- if(WylosowanyY <= wynikWielomianu ){
- licznik ++;
- }
- }
- double wynik = pole * (licznik/ilosc_losowan);
- return wynik;
- }
- int main()
- {
- int n;
- cin>>n;
- char znak;
- double wynik;
- for(int i = 0; i<n;i++)
- {
- cin>>znak;
- if(znak == 'C'){
- wynik = wczytaj_wielomian();
- //cout<<"Wynik przed zaok:"<<wynik<<endl;
- cout<<zaok(wynik)<<endl;
- }
- if(znak == 'E'){
- wynik = ex();
- //cout<<"Wynik przed zaok:"<<wynik<<endl;
- cout<<zaok(wynik)<<endl;
- }
- }
- //cout << "Hello world!" << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement