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 ]