Ask Question

Name:
Title:
Your Question:

Answer Question

Name:
Your Answer:
User Submitted Source Code!


Description:
  ddd
Language: C/C++
Code:
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <math.h>
#include <time.h>
#include <string>
using namespace std;

double randomPoint(double a, double b) {
     return a + (double)rand() / (double)(RAND_MAX + 1) * (b - a);
}

double fx(double x)
{
     return(3 * x *x + 7 * x + 3); //funkcja kwadratowa f(x)=2x^2+7x+3, w tym miejscu mozemy zmieniac nasza funkcje w zaleznosci od potrzeb     
 //a =3, b=7, c=3
 // monza tez zrobic ogolnie dodac zmienne int a,b,c;     
 //                                      cout<<"podaj a";
 //                                    cin>>a;     
 //                                       cout<<"podaj b;
 //               cin>>b;
 //                                        cout<<"podaj c;
 //                         cin>>c;
 //  i we wzorze podwawic                      return(a * x *x + b * x+c);
}

int warunek(double x, float y) {
     if ((y > 0) && (y <= fx(x))) // jesli punkt leży jednoczenie nad osia i pod wykresem
          return 1;
     else if ((y > 0) && (y <= fx(x))) // jesli punkt leży jednoczenie pod osia i nad wykresem
          return -1;
     return 0;
}

int main()
{

     float tab[101];
     float o;

     int i, s;
     const int N = 10000; //liczba punktów losowych
     const int M = 100; //liczba powtórzeń

     float yp, yk, calka;
     double xp = 0, xk = 1, k, c, sr; //xp-poczatek przedziału w moim przypadku 0, xk-koniec przedziału czyli u mnie 1, podobnie jak przy f-cji kw. mozemy zapytac sie o przedział
                      //     cout<<"podaj xp;
                      //  cin>>xp;
                      //     cout<<"podaj xk;
                      //  cin>>xk;


     yp = 0;

     yk = ceil(fmax(fx(xp), fx(xk)));
     cout << setprecision(4);  //ilosc liczb po przecinku

     cout << "poczatek przedzialu ";
     cout << xp <<endl;
     cout << "koniec przedzialu ";   //zadeklarowałam stały przedział (0,1)        
     cout << xk << endl;
     srand(time(NULL));
     k = 0;
     c = xk - xp; //wyznaczanie prostokata i zliczanie pod wykresem i dł. podstawy c



     for (i = 1; i <= N; i++) {
          k += warunek(randomPoint(xp, xk), randomPoint(yp, yk));
     } //wyliczanie wartosci liczb      pseudolosowych z przedziału(0, 1)

          calka = (k / (double)N /*n*/)  * ((xk - xp) * (yk - yp));

     //s = s + k;

     cout << "Wartosc całki wynosi : " << calka << endl;
     //cout << "śriednia : " << sr<<"n";
     int x;
     cin >> x;
     
       return 0;


}

          
          
Comments: