C++ Bc. 43 cpp

Z GeoWikiCZ
Skočit na navigaci Skočit na vyhledávání
// kruhova parcela ma polomer 1 se stredem v bode (1, 1)
// koze je uvazana na provaze delky r=1 v bode (1, 0)

// nahodne vygenerovany bod na zahrade
// true/false - koza na nej dosahne/nedosahne

bool bod()
{
  const double r = 1; // pro r=1.1583...  spase koza 50% plochy
  double x, y, dx, dy, dx2;

  do {
    x = 2.0*rand()/(RAND_MAX + 1.0);
    y = 2.0*rand()/(RAND_MAX + 1.0);
    dx = x - 1.0;
    dy = y - 1.0;
    dx2 = dx*dx;
  } 
  while (dx2 + dy*dy > 1.0);   // bod musi lezet na parcele
    
  return dx2 + y*y <= r*r;     // koza dosahne na bod
}


int main()
{
  using namespace std;
  srand(time(0));   

  const int M = 10;
  const int N = 100000;

  int total = 0;
  for (int m=1; m<=M; m++)
    {
      int priznive = 0;
      for (int n=1; n<=N; n++)
	{
	  if (bod()) priznive++;
	}
      total += priznive;

      cout << setw(3) << m 
	   << setprecision(2) << fixed << setw(9) << 100.0*priznive/N 
	   << setprecision(2) << fixed << setw(9) << 100.0*total/m/N 
	   << endl;
    }
}

Příklad výstupu:

 1    39.21    39.21
 2    39.06    39.13
 3    39.07    39.11
 4    38.86    39.05
 5    39.04    39.05
 6    38.95    39.03
 7    38.96    39.02
 8    39.10    39.03
 9    39.29    39.06
10    39.04    39.06

[ Zpět ]