C++ Bc. 28 cpp

Z GeoWikiCZ
Verze z 25. 1. 2011, 15:57, kterou vytvořil Cepek (diskuse | příspěvky) (+ srand)
(rozdíl) ← Starší verze | zobrazit aktuální verzi (rozdíl) | Novější verze → (rozdíl)
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <iostream>
#include <iomanip>

double rab(double a, double b)        // nahodne cislo z intervalu <a, b>
{
  return a + (b-a)*rand()/(RAND_MAX + 1.0);
}

double pokus()
{
  double novak = rab(16.00, 17.00);   // pan Novak prichazi na zastavku

  double interval = 10.0/60.0;        // interval autobusove linky
  double zpozdeni =  5.0/60.0;        // maximalni zpozdeni
  double bus = 15.00 + 30.0/60.0;     // prvni testovany autobus
  double cas;                         // cas prijezdu autobusu
  bool   obsazen;                     // autobus je/neni obsazen

  do
    {
      bus += interval;
      cas  = bus + rab(0, zpozdeni);

      obsazen = rab(0,5) > 4;         // kazdy paty autobus je obsazen
    }
  while (cas < novak || obsazen);

  return (cas - novak)*60;            // cekani v minutach
}

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

  cout.setf(ios_base::fixed, ios_base::floatfield);
  for (int n=1; n<=10; n++)
    {
      const int N=100000;
      double suma=0, sum2=0;
      for (int i=0; i<N; i++) 
        {
          double p = pokus();
          suma += p;
          sum2 += p*p;
        }
      
      double prumer   = suma/N;
      double variance = sum2/N - prumer*prumer;
      double stddev   = sqrt(variance);         // smerodatna odchylka

      cout << setw(2) << n << " : " << prumer << "   " << stddev << endl;
    }
}

[ Zpět ]