Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // za ile wygina slonie
- #include "pch.h"
- #include <iostream>
- #include <fstream>
- #define M_PI 3.14
- using namespace std;
- double losowanie() // losowanie przedzial <0, 1>
- {
- return (double)(rand()) / RAND_MAX;
- }
- double losowaniePrzedzial(double a, double b) {
- return (double)(rand()) / RAND_MAX * (b - a) + a;
- }
- int losowanieCalkowite(int min, int max) {
- return rand() % (max - min + 1) + min;
- }
- double boxMuler(double mi, double sigma)
- {
- double y1;
- double y2;
- y1 = losowanie();
- y2 = losowanie();
- double r = sqrt(-2. * log(y1));
- double theta = 2 * M_PI * y2;
- double z = r * cos(theta);
- return z * sigma + mi;
- }
- // Etap 1 - ilosc naturalnych zgonów w ciagu jednego roku.
- double etap1() {
- double iloscZgonow = losowanie();
- double ilosc = 0.0;
- // mala
- if (iloscZgonow <= 0.33)
- {
- ilosc += boxMuler(20. , 3.);
- }
- // srednia
- else if (iloscZgonow <= 0.66)
- {
- ilosc += boxMuler(30., 3.);
- }
- // duza
- else if (iloscZgonow <= 1.)
- {
- ilosc += boxMuler(40., 3.);
- }
- return ilosc;
- }
- // Etap 2 - ilosc urodzonych sloni w ciagu jednego roku
- double etap2() {
- double iloscNarodzin = losowanie();
- double ilosc = 0.0;
- // mala
- if (iloscNarodzin <= 0.33)
- {
- ilosc += boxMuler(20., 3.);
- }
- // srednia
- else if (iloscNarodzin <= 0.66)
- {
- ilosc += boxMuler(30., 3.);
- }
- // duza
- else if (iloscNarodzin <= 1.)
- {
- ilosc += boxMuler(40., 3.);
- }
- return ilosc;
- }
- // Etap 3 - ilosc zabitych sloni przez klusownikow w ciagu jednego roku.
- double etap3() {
- double iloscKlusownikow = losowanie();
- double ilosc = 0.0;
- // mala
- if (iloscKlusownikow <= 0.33)
- {
- ilosc += losowanieCalkowite(1, 5);
- }
- // srednia
- else if (iloscKlusownikow <= 0.66)
- {
- ilosc += losowanieCalkowite(5, 10);
- }
- // duza
- else if (iloscKlusownikow <= 1.)
- {
- ilosc += losowanieCalkowite(10, 15);
- }
- return (double)ilosc;
- }
- // Etap 4 - szkodliwa ingerencja czlowieka w naturalne srodowisko sloni (wycinka lasow i pozary).
- double etap4() {
- double dzialalnoscCzlowieka = losowanie();
- double ilosc = 0.0;
- // mala
- if (dzialalnoscCzlowieka <= 0.5)
- {
- ilosc += losowaniePrzedzial(5, 13);
- }
- // duza
- else if (dzialalnoscCzlowieka <= 1.)
- {
- ilosc += losowanieCalkowite(13, 21);
- }
- return ilosc;
- }
- // Etap 5 - pozytywna dzialalnosc czlowieka, tworzenie rezerwatow i fundacji.
- double etap5() {
- double iloscWolontariuszy = losowanie();
- double ilosc = 0.0;
- // mala
- if (iloscWolontariuszy <= 0.5)
- {
- ilosc += losowaniePrzedzial(2, 4);
- }
- // duza
- else if (iloscWolontariuszy <= 1.)
- {
- ilosc += losowanieCalkowite(4, 8);
- }
- return ilosc;
- }
- int main()
- {
- int liczbaSymulacji = 2000;
- fstream p;
- p.open("plik.txt", ios::out);
- for (int i = 0; i <= liczbaSymulacji; i++)
- {
- int iloscSloni = 500; // wartosc w tys.
- int ilosc = 0;
- int lata = 0;
- while (iloscSloni >= 0)
- {
- ilosc -= (int)etap1();
- ilosc += (int)etap2();
- ilosc -= (int)etap3();
- ilosc -= (int)etap4();
- ilosc += (int)etap5();
- //cout << ilosc << endl;
- iloscSloni = iloscSloni + (ilosc);
- ilosc = 0;
- lata++;
- }
- p << lata << endl;
- cout << lata << endl;
- lata = 0;
- }
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement