C++ Bc. 25 cpp: Porovnání verzí
Bez shrnutí editace |
m +kategorie programovani, c++ |
||
(Nejsou zobrazeny 4 mezilehlé verze 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 38: | Řádek 38: | ||
double tp = 0, tc = 0; // soucty jevu ve vsech davkach | double tp = 0, tc = 0; // soucty jevu ve vsech davkach | ||
cout << "d = " << D << " l = " << | cout << "d = " << D << " l = " << L << "\n\n"; | ||
cout.setf(ios_base::fixed, ios_base::floatfield); | cout.setf(ios_base::fixed, ios_base::floatfield); | ||
Řádek 59: | Řádek 59: | ||
} | } | ||
[ [[C | [ [[C++ Bc. 25| Zpět]] ] | ||
[[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 ]