C++ Bc. 25 cpp
#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 ]