6_60.cpp
上传用户:zipjojo
上传日期:2009-07-20
资源大小:70k
文件大小:1k
源码类别:

文章/文档

开发平台:

C/C++

  1. #include<iostream.h>
  2. #include<iomanip.h>
  3. #include<time.h>
  4. const unsigned long maxshort=65536L;
  5. const unsigned long multiplier=1194211693L;
  6. const unsigned long adder=12345;
  7. class RandomNumber
  8. {
  9. private:
  10. unsigned long randSeed;
  11. public:
  12. RandomNumber(unsigned long s=0);
  13. unsigned short Random(unsigned long n);
  14. double fRandom(void);
  15. };
  16. RandomNumber::RandomNumber(unsigned long s)
  17. {
  18. if (s==0)
  19. randSeed=time(0);
  20. else
  21. randSeed=s;
  22. }
  23. unsigned short RandomNumber::Random(unsigned long n)
  24. {
  25. randSeed=multiplier*randSeed+adder;
  26. return (unsigned short)((randSeed>>16)%n);
  27. }
  28. double RandomNumber::fRandom(void)
  29. {
  30. return Random(maxshort)/double(maxshort);
  31. }
  32. int TossCoins(int numberCoins)  //模拟抛硬币得到的正面事件频率
  33. {
  34. static RandomNumber coinToss;
  35. int i,tosses=0;
  36. for(i=0;i<numberCoins;i++)
  37. tosses+=coinToss.Random(2);
  38. return tosses;
  39. }
  40. void main(void)
  41. {
  42. const int NCOINS=10;
  43. const long NTOSSES=100000L;
  44. long i,heads[NCOINS+1];  //heads[i]存放每一事件得到正面的次数
  45. int j,position;
  46. for(j=0;j<NCOINS+1;j++)
  47. heads[j]=0;  //初始化
  48. for(i=0;i<NTOSSES;i++)  //重复事件NTOSSES次
  49. heads[TossCoins(NCOINS)]++;
  50. for(i=0;i<=NCOINS;i++)  //输出频率图
  51. {
  52. position=int(float(heads[i])/NTOSSES*100);
  53. cout<<setw(6)<<i<<" ";
  54. for(j=0;j<position-1;j++)
  55. cout<<" ";
  56. cout<<"*"<<endl;
  57. }
  58. }