Klasyczny model Lotki-Volterry dotyczy zależności pomiędzy populacjami gatunku drapieżcy oraz ofiar. Przy pomocy równania jesteśmy w stanie wyznaczyć jak zmieni się liczba drapieżców i ofiar w kolejnych miesiącach.
Przyjmijmy, że liczebność drapieżcy oznaczymy przez , a populację gatunku ofiar przez, wtedy:
Parametrami modelu są tutaj współczynniki: a – współczynnik przyrostu liczby ofiar, b – współczynnik zjadanych ofiar oraz c – współczynnik umierania wilków
Przyjmijmy teraz, że będziemy rozpatrywać populację kotów i myszy. Przyjmijmy, że na początku mamy On = 40 myszy i Dn = 40 kotów. Przyjmijmy parametry: a = 0,09, b = 0,0025 i c = 0,22.
Wiadomo, że liczba zwierząt musi być całkowita, ale w przypadku obliczeń matematycznych możemy przyjąć, że wartości mogą należeć do liczb rzeczywistych. Wtedy liczba populacji gatunków w kolejnych miesiącach przedstawia się następująco:
(podane liczby zostały zaokrąglone do całkowitych w dół)
Miesiąc | Myszy (szt.) | Koty (szt.) | Wykres do zadania |
---|---|---|---|
0 | 100 | 40 | |
1 | 99 | 41 | |
2 | 97 | 42 | |
3 | 96 | 43 | |
4 | 94 | 44 | |
5 | 92 | 45 |
Wczytaj z pliku parametry.txt kolejno podane parametry a, b, c oraz wartość populacji początkowych (najpierw drapieżców potem ofiar) i wykonaj poniższe zadania. Zakładamy, że do obliczeń używamy liczb rzeczywistych, ale w odpowiedzi należy podać liczby zaokrąglone w dół.
Przykładowa zawartość pliku:
Sugerowany styl odpowiedzi do podpunktu 4.:
W programie wykorzystamy bibliotekę do wypisywania na konsolę iostream oraz będziemy wczytywać / zapisywać dane do pliku, więc potrzebujemy biblioteki fstream. Oczywiście będziemy używać standardowej przestrzenie nazw std.
(5.) Deklarujemy funkcję main() i (6.) otwieramy strumień z plikiem parametry.txt. (7.) Na pliku działamy tylko, gdy strumień jest prawidłowy.
(8.) Deklarujemy zmienne do przechowania parametrów i początkowej ilości ofiar oraz drapieżców. (9.) Wczytujemy dane z pliku.
(10.) Kopiujemy wartości zmiennych początkowych. (11.) Dla kolejnych 60 miesięcy: (12., 13.) obliczamy obydwie populacje zgodnie z równaniem i (14., 15.) przepisujemy jako wynik ostateczny. Nie możemy pominąć tego, ponieważ przy wyliczaniu obu populacji potrzebujemy Dn i On niezmienione. (17. - 19.) Wypisujemy wynik działania funkcji.
(20.) Przyjmujemy, że najmniejszą populacja była przed pierwszym miesiącem. (21.) Przywracamy zmiennym wartości pierwotne. (22.) Dla kolejnych 20 lat wyliczamy: (23., 24.) kolejne wartości populacji i (23., 24.) aktualizujemy oficjalne wartości. (27.) Jeśli wyliczona ilość drapieżników jest mniejsza od aktualnego minimum min to (28.) aktualizujemy wartość minimalną. (30., 31.) Wypisujemy wynik do podpunktu 2.
(32.) Tym razem deklarujemy zmienną i poza pętlą. Dzięki temu w momencie zatrzymania wyliczania wiemy na którym miesiącu się zatrzymaliśmy. (33.) Resetujemy aktualne wartości populacji. (35. - 38.) Wyliczamy ponownie wartości populacji dla n-tego miesiąca i (39.) zwiększamy, który to miesiąc. (40.) Wyliczanie przerywamy kiedy wyliczona populacja ofiar (zaokrąglona w dół!) wynosi 90. (41. - 42.) Wypisujemy na którym miesiącu się zatrzymaliśmy.
(43.) Otwieramy strumień do pliku zapisu. (44.) Jeśli otworzenie pliku się powiedzie to: (45.) Resetujemy wyliczone wartości populacji. (46., 47.) Do pliku zapisujemy nagłówki kolumn i pierwszy wiersz dla "miesiąca 0". (48.) Dla każdego miesiąca kolejnych 12 lat (49., 50.) wyliczamy wartość populacji n-tego miesiąca i (51., 52.) zatwierdzamy wyniki. (53. - 55.) Zapisujemy wyniki do pliku. Po zakończeniu obliczeń (58.) Zamykamy dostęp strumienia do zapisywania danych w pliku.
(60.) Zamykamy strumień otwartego pliku z argumentami. (61.) Czekamy na interakcję użytkownika i (62.) kończymy działanie programu zwracając sukces.