C++ Bc. 25 cpp

Z GeoWikiCZ
Přejít na: navigace, hledání
#include <iostream>
#include <iomanip>
#include <cmath>
#include <cstdlib>
#include <ctime>

using namespace std;

// generator pseudonahodnych cisel z intervalu <0,1)

double r01()
{
  return rand()/(RAND_MAX + 1.0) ;
}


// funkce simuluje hod jehlou delky L na soustavu rovnobezek vzdalenosti D

bool buffon(double D, double L)
{
  const double x = r01()*D;
  const double f = r01()*M_PI;
  const double t = L/2*sin(f);

  return (x <= t) || (D - t <= x);
}


int main()
{
  srand(time(0));                    // inicializace generatoru rand()

  const double D = 1.0;              // vzdalenost rovnobezek
  const double L = 0.7;              // delka jehly
  const double P = 2*L / (M_PI*D);   // teoreticka pravdepodobnost
  const int    N = 100000;           // pocet pokus v jedne davce

  double tp = 0, tc = 0;             // soucty jevu ve vsech davkach

  cout << "d = " << D << "   l = " << L << "\n\n";

  cout.setf(ios_base::fixed, ios_base::floatfield);
  cout.precision(4);
  for (int n=1; n<=10; n++)
    {
      double p = 0;
      for (int i=0; i<N; i++) 
        if ( buffon(D, L) )
          p++;                       // pocet priznivych jevu v davce

      tp += p;
      tc += N;

      cout << setw(2) << n << " : "
           << P << "  ~  "           // teoreticka hodnota pravdepodobnosti
           << p/N << "   "           // odhad z n-te davky
           << tp/tc << endl;         // odhad ze vsech davek
    }
}

[ Zpět ]