C++ Bc. 26 cpp
#include <iostream> #include <iomanip> #include <vector> #include <cstdlib> #include <ctime> using namespace std; // generator pseudonahodnych cisel <0, N) int random(int N) { return int( rand()/(RAND_MAX + 1.0)*N ); // int(vyraz) je explicitni konverze } // nahodna permutace std vektoru - zamichani karet void permutace(std::vector<int>& p) { for (int i=p.size()-1; i>0; i--) std::swap(p[i], p[random(i)]); } bool simulace(std::vector<int>& karty) { // libovolnym zpusobem ocislujeme karty, napriklad: // cervene zelene kule zaludy // 0 8 16 24 sedma // 1 9 17 25 osma // 2 10 18 26 devitka // 3 11 19 27 desitka // 4 12 20 28 spodek // 5 13 21 29 filek // 6 14 22 30 kral // 7 15 23 31 eso // indexy: talon 0, 1 | hrac1 2-11 | hrac2 12-21 | hrac3 22-31 permutace(karty); int t=0; for (int i=0; i<=1; i++) switch(karty[i]) { case 3: // pocitam desitky v talonu case 11: case 19: case 27: t++; break; case 7: // pocitam esa case 15: case 23: case 31: t++; break; } return t == 2; // pocet desitek a es v talonu } int main() { srand(time(0)); // inicializace generatoru rand() std::vector<int> karty(32); for (int i=0; i<32; i++) karty[i] = i; const int N = 100000; // pocet simulaci v jedne davce const double P = 0.056452; // teoreticka pravdepodobnost double tp = 0, tc = 0; // soucty jevu ve vsech davkach cout.setf(ios_base::fixed, ios_base::floatfield); for (int n=1; n<=10; n++) { double p = 0; for (int i=0; i<N; i++) if ( simulace(karty) ) p++; // pocet priznivych jevu v davce tp += p; tc += N; cout << setw(2) << n << " : " << setprecision(5) << P << " ~ " // teoreticka hodnota pravdepodobnosti << setprecision(4) << p/N << " " // odhad z n-te davky << tp/tc << endl; // odhad ze vsech davek } }
[ Zpět ]