C++ Bc. 25 cpp: Porovnání verzí
Bez shrnutí editace |
m +kategorie programovani, c++ |
||
| (Není zobrazeno 9 mezilehlých verzí od 2 dalších uživatelů.) | |||
| Řádek 7: | Řádek 7: | ||
using namespace std; | using namespace std; | ||
// generator | // generator pseudonahodnych cisel z intervalu <0,1) | ||
double r01() | double r01() | ||
| Řádek 19: | Řádek 19: | ||
bool buffon(double D, double L) | bool buffon(double D, double L) | ||
{ | { | ||
double x = r01()*D; | const double x = r01()*D; | ||
double f = r01()*M_PI; | const double f = r01()*M_PI; | ||
double t = L/2*sin(f); | const double t = L/2*sin(f); | ||
return (x <= t) || (D - t <= x); | return (x <= t) || (D - t <= x); | ||
| Řádek 37: | Řádek 37: | ||
double tp = 0, tc = 0; // soucty jevu ve vsech davkach | 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.setf(ios_base::fixed, ios_base::floatfield); | ||
| Řádek 51: | Řádek 53: | ||
cout << setw(2) << n << " : " | cout << setw(2) << n << " : " | ||
<< P << " ~ " // teoreticka hodnota | << P << " ~ " // teoreticka hodnota pravdepodobnosti | ||
<< p/N << " " // odhad z n-te davky | << p/N << " " // odhad z n-te davky | ||
<< tp/tc << endl; // odhad ze vsech davek | << tp/tc << endl; // odhad ze vsech davek | ||
| Řádek 57: | Řádek 59: | ||
} | } | ||
[ [[C++ Bc. 25| Zpět]] ] | |||
[ [[C | [[Kategorie:Programování]] | ||
[[Kategorie:C++]] | |||
Aktuální verze z 2. 9. 2006, 10:59
#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 ]