Advertisement
Guest User

Untitled

a guest
Jan 21st, 2019
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.26 KB | None | 0 0
  1. // za ile wygina slonie
  2.  
  3. #include "pch.h"
  4. #include <iostream>
  5. #include <fstream>
  6.  
  7. #define M_PI 3.14
  8.  
  9. using namespace std;
  10.  
  11.  
  12. double losowanie() // losowanie przedzial <0, 1>
  13. {
  14. return (double)(rand()) / RAND_MAX;
  15. }
  16.  
  17. double losowaniePrzedzial(double a, double b) {
  18. return (double)(rand()) / RAND_MAX * (b - a) + a;
  19. }
  20.  
  21. int losowanieCalkowite(int min, int max) {
  22. return rand() % (max - min + 1) + min;
  23. }
  24.  
  25. double boxMuler(double mi, double sigma)
  26. {
  27. double y1;
  28. double y2;
  29.  
  30. y1 = losowanie();
  31. y2 = losowanie();
  32.  
  33. double r = sqrt(-2. * log(y1));
  34. double theta = 2 * M_PI * y2;
  35.  
  36. double z = r * cos(theta);
  37.  
  38. return z * sigma + mi;
  39. }
  40.  
  41. // Etap 1 - ilosc naturalnych zgonów w ciagu jednego roku.
  42. double etap1() {
  43.  
  44. double iloscZgonow = losowanie();
  45. double ilosc = 0.0;
  46.  
  47. // mala
  48. if (iloscZgonow <= 0.33)
  49. {
  50. ilosc += boxMuler(20. , 3.);
  51. }
  52. // srednia
  53. else if (iloscZgonow <= 0.66)
  54. {
  55. ilosc += boxMuler(30., 3.);
  56. }
  57. // duza
  58. else if (iloscZgonow <= 1.)
  59. {
  60. ilosc += boxMuler(40., 3.);
  61. }
  62.  
  63. return ilosc;
  64. }
  65.  
  66.  
  67. // Etap 2 - ilosc urodzonych sloni w ciagu jednego roku
  68. double etap2() {
  69.  
  70. double iloscNarodzin = losowanie();
  71. double ilosc = 0.0;
  72.  
  73. // mala
  74. if (iloscNarodzin <= 0.33)
  75. {
  76. ilosc += boxMuler(20., 3.);
  77. }
  78. // srednia
  79. else if (iloscNarodzin <= 0.66)
  80. {
  81. ilosc += boxMuler(30., 3.);
  82. }
  83. // duza
  84. else if (iloscNarodzin <= 1.)
  85. {
  86. ilosc += boxMuler(40., 3.);
  87. }
  88.  
  89. return ilosc;
  90. }
  91.  
  92. // Etap 3 - ilosc zabitych sloni przez klusownikow w ciagu jednego roku.
  93. double etap3() {
  94.  
  95. double iloscKlusownikow = losowanie();
  96. double ilosc = 0.0;
  97.  
  98. // mala
  99. if (iloscKlusownikow <= 0.33)
  100. {
  101. ilosc += losowanieCalkowite(1, 5);
  102. }
  103. // srednia
  104. else if (iloscKlusownikow <= 0.66)
  105. {
  106. ilosc += losowanieCalkowite(5, 10);
  107. }
  108. // duza
  109. else if (iloscKlusownikow <= 1.)
  110. {
  111. ilosc += losowanieCalkowite(10, 15);
  112. }
  113.  
  114. return (double)ilosc;
  115. }
  116. // Etap 4 - szkodliwa ingerencja czlowieka w naturalne srodowisko sloni (wycinka lasow i pozary).
  117. double etap4() {
  118.  
  119. double dzialalnoscCzlowieka = losowanie();
  120. double ilosc = 0.0;
  121.  
  122. // mala
  123. if (dzialalnoscCzlowieka <= 0.5)
  124. {
  125. ilosc += losowaniePrzedzial(5, 13);
  126. }
  127. // duza
  128. else if (dzialalnoscCzlowieka <= 1.)
  129. {
  130. ilosc += losowanieCalkowite(13, 21);
  131. }
  132.  
  133. return ilosc;
  134. }
  135.  
  136. // Etap 5 - pozytywna dzialalnosc czlowieka, tworzenie rezerwatow i fundacji.
  137. double etap5() {
  138.  
  139. double iloscWolontariuszy = losowanie();
  140. double ilosc = 0.0;
  141.  
  142. // mala
  143. if (iloscWolontariuszy <= 0.5)
  144. {
  145. ilosc += losowaniePrzedzial(2, 4);
  146. }
  147. // duza
  148. else if (iloscWolontariuszy <= 1.)
  149. {
  150. ilosc += losowanieCalkowite(4, 8);
  151. }
  152.  
  153. return ilosc;
  154. }
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161. int main()
  162. {
  163. int liczbaSymulacji = 2000;
  164.  
  165. fstream p;
  166. p.open("plik.txt", ios::out);
  167.  
  168. for (int i = 0; i <= liczbaSymulacji; i++)
  169. {
  170. int iloscSloni = 500; // wartosc w tys.
  171. int ilosc = 0;
  172. int lata = 0;
  173. while (iloscSloni >= 0)
  174. {
  175. ilosc -= (int)etap1();
  176. ilosc += (int)etap2();
  177. ilosc -= (int)etap3();
  178. ilosc -= (int)etap4();
  179. ilosc += (int)etap5();
  180.  
  181. //cout << ilosc << endl;
  182. iloscSloni = iloscSloni + (ilosc);
  183.  
  184. ilosc = 0;
  185. lata++;
  186.  
  187. }
  188. p << lata << endl;
  189. cout << lata << endl;
  190. lata = 0;
  191. }
  192.  
  193.  
  194. system("pause");
  195. return 0;
  196.  
  197. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement