C++ Bc. 26 cpp

Z GeoWikiCZ
(přesměrováno z C plus plus Bc. 26 cpp)
Přejít na: navigace, hledání
#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 ]