Diskuse:C++ Bc. 37

Z GeoWikiCZ
Verze z 5. 12. 2011, 13:21, kterou vytvořil Cepek (diskuse | příspěvky) (Založena nová stránka: Přímý výpočet je v daném případě pochopitelně rychlejší <pre> #include <iostream> #include <vector> #include <cstdlib> #include <ctime> #include <algorithm> i...)
(rozdíl) ← Starší verze | zobrazit aktuální verzi (rozdíl) | Novější verze → (rozdíl)
Skočit na navigaci Skočit na vyhledávání

Přímý výpočet je v daném případě pochopitelně rychlejší

#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>
#include <algorithm>

int main()
{
  enum {bila, cerna};

  std::vector<int> prvni;
  prvni.push_back(bila);
  prvni.push_back(bila);
  prvni.push_back(cerna);
  prvni.push_back(cerna);
  prvni.push_back(cerna);
  prvni.push_back(cerna);

  std::vector<int> druha;
  druha.push_back(bila);
  druha.push_back(bila);
  druha.push_back(bila);
  druha.push_back(bila);
  druha.push_back(cerna);
  druha.push_back(cerna);

  std::vector<int> treti;
  treti.push_back(bila);
  treti.push_back(bila);
  treti.push_back(bila);
  treti.push_back(cerna);
  treti.push_back(cerna);
  treti.push_back(cerna);

  srand(time(0));

  const int N = 1000000;
  int indx, urna, koule;

  double tpb = 0, tpbn = 0, tpc = 0, tpcn = 0;
  for (int k=0; k<10; k++)
    {
      double pb = 0, pbn = 0, pc = 0, pcn = 0;
      for (int n=0; n<N; n++)
	{
	  urna = int(3*(rand()/(RAND_MAX+1.0)));
	  indx = int(6*(rand()/(RAND_MAX+1.0)));
	  if (urna == 0)
	    {
	      koule = prvni[indx];
	    }
	  else if (urna == 1)
	    {
	      koule = druha[indx];
	    }
	  else
	    {
	      koule = treti[indx];
	    }

	  if (koule == bila)
	    {
	      if (urna == 0) pb++;
	      pbn++;
	    }
	  else
	    {
	      if (urna == 0) pc++;
	      pcn++;
	    }
	}

      tpb  += pb;
      tpbn += pbn;
      tpc  += pc;
      tpcn += pcn;

      std::cout << "bila  " << pb/pbn << "\t" << tpb/tpbn << "\t\t"
		<< "cerna " << pc/pcn << "\t" << tpc/tpcn << "\n";
    }
}