Програма емуляції розвитку популяцій тварин

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

Інститут Перепідготовки Кадрів

Уральського Державного Технічного Університету

Кафедра мікропроцесорної техніки

Курсова робота

Програми емуляції РОЗВИТКУ

ПОПУЛЯЦІЙ ТВАРИН

Керівник

Доцент

Слухач

Група СП-923 С.А.

Нягань

2001р.

Зміст

ВСТУП ....................................... 3

1. ОСНОВНА ЧАСТИНА .............................. 4

Методика взаємодії популяцій ......... 4

Опис програми ........................ 4

Опис бібліотеки Fauna1 ............... 5

Опис бібліотеки Mycrt ................ 6

Опис основного тіла програми ......... 7

2. ВИСНОВОК ................................. 8

Додаток 1. Основна програма .............. 9

Додаток 2. Бібліотека Fauna1 ............... 23

Додаток 3. Бібліотека Mycrt ................ 24

Додаток 4. Інструкція користувача ......... 26

ВСТУП.

Заради інтересу було вирішено написати програму типу "Життя", з деякими початковими умовами.

Умови були такі, що в емуляції повинні брати участь

дві популяції: хижаки і травоїдні, які взаємодіяли

б один з одним шляхом поїдання травоїдних хижаками.

У процесі розробки програми були введені додаткові

параметри:

- Вік тварин

- Мінімальний і максимальний репродуктивний вік

тварин

- Кількість їжі потрібної тваринам для підтримки життя

- Кількість трави

- Відсоток відновлення трави

- Імовірність природних катаклізмів впливають на популяції тварин

1. ОСНОВНА ЧАСТИНА.

2.1 Методика взаємодії популяцій.

Методика взаємодій хижака і травоїдного полягає в тому, що і хижаки, і травоїдні представлені у вигляді точок, які пересуваються по екрану з кроком в один піксель. При цьому задано умова, якщо в радіусі один піксель від точки належить хижакові з'являється точка належить травоїдній, то вважається, що хижак з'їв травоїдного.

Спосіб пересування точок на екрані був організований за алгоритмом випадкового блукання, тобто пересування по осях Х і Y з кроком в один піксель вибирається випадковим чином.

Померли своїм життям травоїдні вважаються, як з'їли хижаками.

При недоїданні обома популяціями, особини помирають у процесі зменшення віку, тобто чим більше вік тварини, тим більше ймовірність загинути від голоду. Через великі проміжних розрахунків облік за недоїдання був обраний

так, що хижаки враховуються один раз на рік, а травоїдні дванадцять разів на рік.

1.2 Опис програми.

Дана програма написана з використанням об'єктно-орієнтованої мови Borland Pascal 7.1 і побудована на обробці масивів типу tosob описаного в об'єктному модулі fauna1. Цей тип має такі параметри:

x - розташування по координаті Х екрану

y - розташування по координаті Y екрану

age - вік точки

col - колір виводу на екран

Програма забезпечує наступні операції:

- Завдання параметрів популяції травоїдних

- Завдання параметрів популяції хижаків

- Завдання параметрів навколишнього середовища

- Перегляд взаємодії тварин в графічному режимі

- Індикація результатів щодо виходу з режиму перегляду

взаємодії тварин

- Вихід з програми

За допомогою зарезервованого слова "uses" до програми підключається стандартні бібліотечні модулі TPCRT, GRAPH, DOS і бібліотечні модулі написані програмістом-розробником MYCRT і FAUNA1.

У розділі опису констант і змінних були оголошення наступні змінні:

- Gd, gm типу integer для ініціалізації графіки

- Q, x, y, x1, y1, t, i, j, k, at, at1, ct1, ctp типу integer для

використання їх у тілі циклів

- G, m типу integer для завдання початкового кількості тварин

- V, w типу integer для завдання максимального віку тварин

- Ct, ch типу shortint для завдання кольору відображаються точок

- Tmin, tmax, hmin, hmax, tp, hp типу integer для завдання факторів

впливають на репродуктивність тварин

- Tt типу integer для врахування померлих і з'їдених травоїдних

- Kata типу integer для завдання ймовірності природних катаклізмів

- Ht типу integer для завдання кількості травоїдних потрібних хижакові для їжі

- Ttt типу real для завдання кількості трави потрібних травоїдній для їжі

- Tr типу real для завдання відсотка відновлення кількості

трави

- Tree, tree1 типу longint для завдання й модифікації кількості трави

- Z типу longint для лічильника часу

- Key типу boolean для відстеження натиснення клавіш

- S, ss типу string розміром в сімнадцять символів для виведення

на екран у графічному режимі

- Pal типу FillPatternType стандартна мінлива бібліотеки

GRAPH для зберігання типу і кольору заливки графічних фігур об'єктів

- Tg масив обсягом 4400 точок типу tosob для зберігання травоїдних

- Hr масив об'ємом 1350 точок типу tosob для зберігання хижаків

1.3 ОПИС БІБЛІОТЕКИ FAUNA1

У даній бібліотеці описано два типи даних Tposition і Tosob. Тип Tposition має два параметри:

x - розташування по координаті Х екрану

y - розташування по координаті Y екрану

Задіяні функції:

getx - отримання координати Х

gety - отримання координати Y

А також процедура ініціалізації об'єкту init

Тип Tosob має чотири параметри:

x - розташування по координаті Х екрану

y - розташування по координаті Y екрану

age - вік точки

col - колір виводу на екран

Задіяні функції:

daizwet - отримання кольору точки

daiage - отримання параметра age

vidnoli - отримання факту відображення на екрані

процедури:

blind - гасіння точки

show - відображення точки

init - створення об'єкта Tosob

done - знищення об'єкта Tosob

1.4 ОПИС БІБЛІОТЕКИ MYCRT

До цієї бібліотеку включені функції та процедури призначені для роботи в текстовому режимі.

Процедури:

fon - завдання кольору фону екрану

txt - завдання кольору виведених символів

ramka - висновок прямокутника символами

186,187,188,200,201,205

colorwind - висновок вікна з рамкою

Функції:

colword - перетворення чисел від одного до п'ятнадцяти до рядка з найменуванням кольору

mes - перетворення чисел від нуля до триста шістдесяти

п'яти до рядка з назвою місяця

1.4 ОПИС ОСНОВНОГО ТІЛА ПРОГРАМИ

В основному модулі програми включені процедури:

ini - виведення на екран масивів hr і tr зі стартовими

параметрами

tnew - рух точки належить масиву tr з

перевіркою віку

hnew - рух точки належить масиву hr з

перевіркою віку

trod - створення нових точок масиву tr

hrod - створення нових точок масиву hr

dead - процес поглинання точки масиву tr точкою

| Масиву hr

havka - процес знищення точок масиву tr в

залежно від значення змінної tt

tmor - процес знищення випадкового кількості

точок масиву tr

hmor - процес знищення випадкового кількості

точок масиву hr

zasux - підрахунок змінної tree

quit - вихід з програми

herb - організація введення стартових значень змінних

для масиву tr

beast - організація введення стартових значень змінних

для масиву hr

env - організація введення значень змінних для

завдання змінних tree, tr, kata, q

info - організація інформаційного вікна

gmenu - промальовування основного меню

omenu - промальовування меню Option

start - запуск графічного режиму і запуск основного

циклу

komenu - організація меню Option

gkmenu - організація основного меню

ВИСНОВОК

Дана програма представляє досить грубу модель життєдіяльності і взаємодії живих організмів. Однак, навіть таке моделювання дозволяє простежити основні моменти циклу життя популяції. При можливому додаванні деяких додаткових факторів, моделювання може більше наблизитися до реальної ситуації. Такими факторами можуть бути:

- Сезонні зміни клімату

- «Технологія» полювання

- Навколишнє флора і фауна

- Вплив життєдіяльності людини

- Взаємодія особин всередині популяції

Дана програма може служити в якості навчального посібника з програмування на мові Pascal.

Додаток 1.

Основна програма

program fauna;

uses mycrt, dos, graph, fauna1, tpcrt;

var

q, x, y, x1, y1, gd, gm, t, i, j, k, AT, at1, ct1, ctp: integer; {загальні}

g, v, m, w: integer; {}

ct, ch: shortint; {колір}

tmin, tmax, hmin, hmax, tp, hp: integer; {дітородності}

tt: integer; {трупи і з'їдені травоїдні за 1 рік}

kata, ht: integer;

ttt, tr: real;

z, tree, TREE1: longint;

key: boolean;

s, ss: string [17];

tg: array [1 .. 4400] of tosob; {green-травоїдних}

hr: array [1 .. 1350] of tosob; {red-хижаків}

pal: FillPatternType;

{************************************************* **********}

procedure ini;

begin

for i: = 1 to g do

begin

at: = RANDOM (v) +1;

tg [i]. init ((random (630) +5), (random (462) +18), at, ct);

tg [i]. show;

end;

for i: = 1 to m do

begin

at: = random (w) +1;

HR [i]. Init ((random (630) +5), (random (462) +18), at, ch);

hr [i]. show;

end;

end;

{************************************************* **********}

procedure tnew;

begin

I: = 0;

REPEAT

I: = I +1;

begin

x: = tg [i]. getx;

y: = tg [i]. gety;

AT: = TG [I]. DAIAGE;

CTP: = TG [I]. DAIZWET;

if (z mod 365) = 0 then

BEGIN

at: = at +1; {Happy New Year!}

TG [I]. INIT (X, Y, AT, CTP);

END;

if at> v then {Old?}

begin

tg [i]. done;

tg [i]. init (0,0,0,0);

tt: = tt +1; {померле тварина}

for j: = i +1 to g do

begin

x1: = tg [j]. getx;

y1: = tg [j]. gety;

at1: = tg [j]. daiage;

ct1: = tg [j]. daizwet;

tg [j]. done;

tg [j-1]. init (x1, y1, at1, ct1);

tg [j-1]. show;

end;

TG [G]. INIT (0,0,0,0);

G: = G-1;

I: = I-1;

CONTINUE;

end;

x: = tg [i]. getx;

y: = tg [i]. gety;

x: = x + (random (3) -1);

y: = y + (random (3) -1);

if x <5 then x: = 6; if x> 635 then x: = 634; if y <17 then y: = 18;

if y> 480 then y: = 479;

AT: = TG [I]. DAIAGE;

CTP: = TG [I]. DAIZWET;

tg [i]. done;

IF CT <> 0 THEN

BEGIN

tg [i]. init (x, y, at, CTP);

tg [i]. show;

END;

END;

UNTIL I> = G;

end;

{************************************************* **********}

procedure trod;

begin

if (z mod 365) = 0 then {Happy New Year!}

begin

t: = 0;

for i: = 1 to g do

begin

at: = tg [i]. daiage;

if (tmin <= at) AND (AT <= tmax) then t: = t +1;

end;

t: = (t div 2);

x: = 0;

if t> 0 then

begin

FOR I: = 1 TO T DO

begin

J: = RANDOM (TP);

x: = x + j;

end;

for y: = g +1 to g +1 + x do

begin

tg [y]. init ((random (630) +5), (random (462) +18), 0, ct);

tg [y]. show;

if y> 4100 then break;

end;

g: = g +1 + x;

if g> 4000 then

begin

key: = true;

end;

end

else

begin

end;

end;

end;

{************************************************* **********}

procedure hnew;

begin

I: = 0;

REPEAT

I: = I +1;

begin

x: = hr [i]. getx;

y: = hr [i]. gety;

At: = hr [I]. DAIAGE;

CTp: = hr [I]. DAIZWET;

if (z mod 365) = 0 then

BEGIN

at: = at +1; {Happy New Year!}

hr [I]. INIT (X, Y, At, CTp);

END;

if at> w then {Old?}

begin

hr [i]. done;

hr [i]. init (0,0,0,0);

for j: = i +1 to m do

begin

x1: = hr [j]. getx;

y1: = hr [j]. gety;

at1: = hr [j]. daiage;

ct1: = hr [j]. daizwet;

hr [j]. done;

hr [j-1]. init (x1, y1, at1, ct1);

hr [j-1]. show;

end;

hr [m]. INIT (0,0,0,0);

m: = m-1;

I: = I-1;

CONTINUE;

end;

x: = hr [i]. getx;

y: = hr [i]. gety;

x: = x + (random (3) -1);

y: = y + (random (3) -1);

if x <5 then x: = 6; if x> 635 then x: = 634; if y <17 then y: = 18;

if y> 480 then y: = 479;

AT: = hr [I]. DAIAGE;

CTp: = hr [I]. DAIZWET;

hr [i]. done;

IF CTp <> 0 THEN

BEGIN

hr [i]. init (x, y, at, CTp);

hr [i]. show;

END;

END;

UNTIL I> = m;

end;

{************************************************* *********}

procedure hrod;

begin

if (z mod 365) = 0 then {Happy New Year!}

begin

t: = 0;

for i: = 1 to m do

begin

at: = hr [i]. daiage;

if (hmin <= at) AND (AT <= hmax) then t: = t +1;

end;

t: = (t div 2);

if t> 0 then

begin

x: = 0;

FOR I: = 1 TO T DO

begin

J: = RANDOM (hP);

x: = x + j;

end;

for y: = m +1 to m +1 + x do

begin

hr [y]. init ((random (630) +5), (random (462) +18), 0, ch);

hr [y]. show;

end;

m: = m +1 + x;

if (m> 1000) or (m <= 0) then

begin

key: = true;

end;

end;

end;

end;

{************************************************* **********}

procedure dead; {хижаки едеят в радіусі 1 піксель}

begin

for i: = 1 to m do

begin

x: = hr [i]. getx;

y: = hr [i]. gety;

j: = 0;

repeat

j: = j +1;

x1: = tg [j]. getx;

y1: = tg [j]. gety;

if ((x = x1) and (y = y1)) or ((x = x1) and (y = y1-1)) or ((x = x1)

and (y = y1 +1)) or ((x = x1-1) and (y = y1)) or ((x = x1-1) and (y = y1-1))

or ((x = x1-1) and (y = y1 +1)) or ((x = x1 +1) and (y = y1)) or ((x = x1 +1) and

(Y = y1-1)) or ((x = x1 +1) and (y = y1 +1)) then

begin

tg [j]. done;

tg [j]. init (0,0,0,0);

tt: = tt +1;

k: = j;

repeat

k: = k +1;

x1: = tg [k]. getx;

y1: = tg [k]. gety;

at1: = tg [k]. daiage;

ct1: = tg [k]. daizwet;

tg [k]. done;

tg [k-1]. init (x1, y1, at1, ct1);

tg [k-1]. show;

until k> = g;

TG [G]. INIT (0,0,0,0);

G: = G-1;

j: = j-1;

end

else

begin

end;

until j> = g;

end;

end;

{************************************************* *********}

procedure havka;

begin

if ((z mod 365) = 0) and (tt> 0) then

begin

x1: = (tt div ht); {скільки прогодуватися в цьому році}

j: = 0;

y1: = w; {max vozrast}

if x1 = 0 then

begin

for i: = 1 to m do

begin

hr [i]. init (0,0,0,0);

hr [i]. done;

end;

end;

if (x1 <m) and (x1 <> 0) then

begin

repeat

j: = j +1;

if hr [j]. daiage = y1 then

begin

hr [j]. done;

hr [j]. init (0,0,0,0);

for i: = j +1 to m do

begin

x: = hr [i]. getx;

y: = hr [i]. gety;

at1: = hr [i]. daiage;

ct1: = hr [i]. daizwet;

hr [i]. done;

hr [i-1]. init (x, y, at1, ct1);

HR [i-1]. Show;

end;

hr [m]. init (0,0,0,0);

m: = m-1;

if m <= 0 then

begin

key: = true;

break;

end;

end;

if j> = m then

begin

j: = 0;

y1: = y1-1;

end;

if m <= 0 then break;

until x1 = m

end;

end;

end;

{************************************************* **********}

procedure tmor; {мор травоїдних}

begin

y: = gx;

if x> 0 then

begin

repeat

j: = random (g) +1;

tg [j]. done;

tg [j]. init (0,0,0,0);

tt: = tt +1;

for i: = j +1 to g do

begin

x1: = tg [i]. getx;

y1: = tg [i]. gety;

at1: = tg [i]. daiage;

ct1: = tg [i]. daizwet;

tg [i]. done;

tg [i-1]. init (x1, y1, at1, ct1);

tg [i-1]. show;

end;

tg [g]. done;

tg [g]. init (0,0,0,0);

g: = g-1;

until y = g;

end;

end;

{************************************************* **********}

procedure hmor; {мор хижаків}

begin

y: = mx;

if x> 0 then

begin

repeat

j: = random (m) +1;

hr [j]. done;

hr [j]. init (0,0,0,0);

for i: = j +1 to m do

begin

x1: = hr [i]. getx;

y1: = hr [i]. gety;

at1: = hr [i]. daiage;

ct1: = hr [i]. daizwet;

hr [i]. done;

hr [i-1]. init (x1, y1, at1, ct1);

hr [i-1]. show;

end;

hr [m]. done;

hr [m]. init (0,0,0,0);

m: = m-1;

until m = y;

end;

end;

{************************************************* **********}

procedure zasux; {посуха}

begin

tree: = tree - random (round (tree/10));

end;

{************************************************* **********}

procedure quit;

begin

window (1,1,80,25);

fon (black);

clrscr;

GOTOXY (1,24);

txt (White);

WRITELN ('----------------------------------------------- ---

----------------------------');

txt (yellow);

WRITELN ('Antony Sokolov | FidoNet 2:5078 / 20.4 AKA

2:5078 / 20.666 AKA 2:5078 / 22.666 ');

txt (White);

WRITELN ('----------------------------------------------- ---

----------------------------');

end;

{************************************************* **********}

procedure herb; {травоїдні}

begin

colorwind (3,20,77,25, black, yellow);

gotoxy (32,1);

writeln ("Правила введення для травоїдних ');

gotoxy (2,2); write ('Кількість травоїдних не більше 3000.');

write ('Корм на місяць в кілограмах.'); gotoxy (2,3);

write ('Кал - у дитинчат.'); write ('Колір виведення від 1

до 15 ');

colorwind (40,10,65,19, black, green);

gotoxy (6,1);

txt (Yellow);

write ('Травоїдні');

gotoxy (2,2);

write ('Кількість:'); {початкова кількість травоїдних}

readln (g);

txt (yellow);

gotoxy (2,3);

write ('Корм:'); {к-ть корму в рік на одного

травоїдного}

readln (ttt);

ttt: = ttt/1000;

gotoxy (2,4);

write ('Кал:'); {народжуваність}

readln (tp);

gotoxy (2,5);

write ('Min дітородний:');

read (tmin);

gotoxy (2,6);

write ('Max дітородний:');

read (tmax);

gotoxy (2,7);

write ('Max возрaст:');

read (v);

gotoxy (2,8);

write ('Колір виведення:');

read (ct);

colorwind (3,20,77,25, black, black);

end;

{************************************************* **********}

procedure beast; {хижаки}

begin

colorwind (3,20,77,25, black, yellow);

gotoxy (32,1);

writeln ("Правила введення для хижаків ');

gotoxy (2,2); write ('Кількість хижаків не більше 1000.');

write ('Корм - у травоїдних на рік. "); gotoxy (2,3);

write ('Кал - у дитинчат.'); write ('Колір виведення від 1

до 15 ');

colorwind (40,10,65,19, black, red);

gotoxy (8,1);

txt (Yellow);

write ('Хижаки');

gotoxy (2,2);

txt (yellow);

write ('Кількість:');

readln (m);

gotoxy (2,3);

write ('Корм:'); {початкова кількість хижаків}

readln (ht);

gotoxy (2,4);

write ('Кал:'); {народжуваність}

readln (hp);

gotoxy (2,5);

write ('Min дітородний:'); {природна смертність}

read (hmin);

gotoxy (2,6);

write ('Max дітородний:'); {природна смертність}

read (hmax);

gotoxy (2,7);

write ('Max вік:'); {природна смертність}

read (w);

gotoxy (2,8);

write ('Колір виведення:');

read (ch);

colorwind (3,20,77,25, black, black);

end;

{************************************************* **********}

procedure env; {середовище проживання}

begin

colorwind (3,20,77,25, black, yellow);

gotoxy (32,1);

writeln ("Правила введення для середовища");

gotoxy (2,2); write ('Кількість трави не менше 1000.');

write ('Відсоток відновлення будь-хто.'); gotoxy (2,3);

write ('Катастрофи: 0 або 1 - немає, 2 і більш-є.');

gotoxy (2,4);

write ('Затримка повідомлень у мс. Рекомендується не менш

1000 ');

colorwind (40,10,75,17, black, Magenta);

gotoxy (13,1);

txt (Yellow);

write ('Навколишнє середовище ");

gotoxy (2,2);

txt (yellow);

write ('Кількість трави:'); {Кількість востанавливается

їжі для травоїдних на рік}

readln (tree);

gotoxy (2,3);

write ('Відсоток відновлення:');

readln (tr);

gotoxy (2,4);

write ('Наявність катастроф:');

readln (kata);

gotoxy (2,5);

write ('Затримка повідомлень:');

readln (q);

colorwind (3,20,77,25, black, black);

end;

{************************************************* **********}

procedure info;

begin

fon (15);

colorwind (1,4,70,16, black, Lightblue);

txt (Green);

gotoxy (2,2); write ('травоїдних-', g, 'Хижаків-', m);

str (ttt: 1:2, s);

gotoxy (2,3);

write (s, 'т. трави і', ht, 'туш потрібно на прокорм тварин');

gotoxy (2,4);

write ('Max вік травоїдних', v, ', хижаків', w);

gotoxy (2,5);

write ('Дітородний вік травоїдних від', tmin, 'до', tmax);

gotoxy (2,6);

write ('Дітородний вік хижаків від', hmin, 'до', hmax);

gotoxy (2,7);

write ('Кал травоїдних до', tp, ', хижаків до', hp);

gotoxy (2,8); write ('Трави', tree, 'тонн');

str (tr: 1:2, s);

gotoxy (2,9); write ('Приріст трави на кожен місяць', s ,'%');

if (kata = 0) or (kata = 1) then s: = 'пропущені' else

s: = 'присутній';

gotoxy (2,10); write ('Імовірність катаклізмів', s);

s: = colword (ct);

gotoxy (2,11); write ('Колір травоїдних', s);

s: = colword (ch);

write ('Колір хижаків', s);

end;

{************************************************* **********}

procedure Gmenu;

begin

fon (black);

clrscr;

colorwind (1,1,80,4, black, darkgray);

txt (14);

gotoxy (5,2);

write ('S');

txt (white);

write ('tart');

txt (yellow);

write ('O');

txt (white);

write ('ption');

txt (yellow);

write ('Q');

txt (white);

write ('uit');

END;

{************************************************* **********}

PROCEDURE Omenu;

begin

colorwind (45,3,62,8, black, darkgray);

hiddencursor;

txt (14);

gotoxy (2,2);

write ('H');

txt (white);

writeln ('erbivorous');

txt (yellow);

gotoxy (2,3);

write ('B');

txt (white);

writeln ('east of divy');

txt (yellow);

gotoxy (2,4);

write ('E');

txt (white);

write ('nvironment');

end;

{************************************************* **********}

procedure start;

begin

randomize;

gD: = Detect;

InitGraph (gD, gM ,'');

setfillpattern (pal, black);

z: = 0; {початок ери}

tt: = 0; {трупи і з'їдені}

ini;

repeat

key: = false;

z: = z +1;

if ((z mod 365) = 0) or ((z mod 365) = 31) or ((z mod 365) = 59)

or ((z mod 365) = 90) or ((z mod 365) = 120) or ((z mod

365) = 151) or ((z mod 365) = 181) or ((z mod 365) = 212) or

((Z mod 365) = 242) or ((z mod 365) = 273) or ((z mod

365) = 303) or ((z mod 365) = 334) then

begin

tree: = round (tree-g * ttt); {з'їли за місяць}

tree: = tree + round (tree * (tr/100)); {приріст трави на місяць}

x: = round (tree * ttt); {травоїдні вмирають від недоїдання}

if tree <= 0 then

begin

key: = true;

g: = 0;

m: = 0;

end

else

begin

if x <g then

begin

repeat

j: = random (g) +1;

tg [j]. done;

tg [j]. init (0,0,0,0);

tt: = tt +1;

for i: = j +1 to g do

begin

x1: = tg [i]. getx;

y1: = tg [i]. gety;

at1: = tg [i]. daiage;

ct1: = tg [i]. daizwet;

tg [i]. done;

tg [i-1]. init (x1, y1, at1, ct1);

tg [i-1]. show;

end;

tg [g]. done;

tg [g]. init (0,0,0,0);

g: = g-1;

until x = g

end;

end;

end;

if g> 0 then tnew; {природна смертність травоїдних}

if m> 0 then

begin

dead; {хижаки їдять травоїдних}

hnew; {природна смертність хижаків}

havka; {хижаки вмирають від недоїдання}

hrod; {народження хижаків}

end;

if ((z mod 365) = 180) and (g> 0) and (m> 0) then

begin

if random (kata) <> 0 then

begin

x: = random (4);

if x = 0 then

begin

x: = random (round (g/50)) +5;

moveto (320,240); setcolor (Lightred); str (x, s);

Outtext ('Хвороба травоїдних забрала');

Outtext (s); Outtext ('життів');

tmor;

end;

if x = 1 then

begin

x: = random (round (m/40)) +1;

moveto (320,240); setcolor (Lightred); str (x, s);

Outtext ('Хвороба хижаків забрала');

Outtext (s); Outtext ('життів');

hmor;

end;

if x = 2 then

begin

zasux;

moveto (320,240); setcolor (Lightred);

str (tree1, s); Outtext ('Засуха! Втрачено');

Outtext (s); Outtext ('тонн трави');

delay (q);

end;

if x = 3 then

begin

x: = random (round (g/50)) +5;

moveto (0,240); setcolor (Lightred); str (x, s);

Outtext ('Повінь згубило'); Outtext (s); Outtext ('

травоїдних, ');

tmor;

x: = random (round (m/40)) +1;

str (x, s); Outtext (s); Outtext ('хижаків,');

hmor;

zasux;

str (tree1, s); Outtext (s); Outtext ('тонн трави');

delay (q);

end;

delay (q);

bar (0,240,640,260);

end;

end;

if g> 0 then trod; {народження травоїдних}

if g> 4000 then break;

if keydivssed then key: = true;

if (g> 4000) or (g <= 0) or (m <= 0) or (m> 1000) then

key: = true;

setcolor (white);

bar (0,0,640,17);

moveto (0,0);

outtext ('Травоїдні Хижаки з'їдено

Трава Рік ');

setcolor (ct); moveto (0,10); str (g, s); outtext (s);

setcolor (ch); moveto (175,10); str (m, s); outtext (s);

setcolor (red); moveto (300,10); str (tt, s); outtext (s);

setcolor (green); moveto (400,10); str ((tree), s); outtext (s);

setcolor (magenta); moveto (510,10); str ((z div 365), s);

outtext (mes (z)); outtext (''); outtext (s); outtext ('року');

if (z mod 365) = 0 then tt: = 0;

until key = true;

closegraph;

end;

{************************************************* **********}

procedure komenu;

var key: char;

begin

repeat

key: = readkey;

if (key = 'h') or (key = 'H') then

begin

herb;

window (40,10,80,25);

fon (black);

clrscr;

info;

omenu;

end;

if (key = 'B') or (key = 'b') then

begin

beast;

window (40,10,80,25);

fon (black);

clrscr;

info;

omenu;

end;

if (key = 'E') or (key = 'e') then

begin

env;

window (40,10,80,25);

fon (black);

clrscr;

info;

omenu;

end;

until key = # 27;

quit;

CLRSCR;

end;

{************************************************* **********}

PROCEDURE GKMENU;

var key2: char;

key1: boolean;

begin

gmenu;

info;

repeat

key2: = readkey;

if (key2 = 's') or (key2 = 'S') then

begin

if (g> 0) and (m> 0) and (ttt> 0) and (tp> 0) and (tmin> 0) and (tmax> 0)

and (ct> 0) and (ht> 0) and (hp> 0) and (hmin> 0) and (hmax> 0) and

(Ch> 0) and (tree> 0) and (tr> 0) and (kata> 0) then

begin

start; gmenu; info;

key1: = false;

end;

end;

if (key2 = 'o') or (key2 = 'O') then

begin

Omenu; komenu;

GMENU;

info; key1: = false;

end;

if (key2 = 'q') or (key2 = 'Q') or (key2 = # 27) then

begin

key1: = true; quit;

end;

until key1 = true;

end;

{************************************************* **********}

{Body program}

begin

g: = 1200; {травоїдні кол-во}

v: = 30; {вік травоїдного}

m: = 200; {хижаки кол-во}

w: = 25; {вік хижака}

ct: = yellow; ch: = red;

tmin: = 2; tmax: = 28;

hmin: = 3; hmax: = 24;

tp: = 3; hp: = 7; {дітородності}

kata: = 9; ht: = 3; ttt: = 1; tree: = 1300; tr: = 15.1;

hiddencursor;

GKMENU;

end.

Додаток 2.

Бібліотека Fauna 1

{Init object}

unit fauna1;

interface

uses graph;

Type TPosition = object

x, y: integer;

procedure Init (x0, y0: integer);

function getx: integer;

function gety: integer;

end;

type Tosob = object (TPosition)

color: word;

vidno: boolean;

AGE: INTEGER;

constructor Init (x0, y0, age0: integer; col: word);

destructor Done; virtual;

procedure Show; virtual;

procedure Blind; virtual;

function Daizwet: word;

function VidnoLi: boolean;

FUNCTION DAIAGE: INTEGER;

end;

Posob = ^ Tosob;

{Metod Tposition}

Implementation

Procedure Tposition.Init (x0, y0: integer);

Begin

x: = x0;

y: = y0;

End;

Function Tposition.Getx: integer;

Begin GetX: = x End;

Function Tposition.Gety: integer;

Begin Gety: = y End;

Constructor Tosob.Init (x0, y0, age0: integer; col: word);

Begin

Tposition.Init (x0, y0);

AGE: = AGE0;

color: = col;

vidno: = false;

End;

Destructor Tosob.Done;

Begin

Tosob.blind;

End;

procedure Tosob.Show;

Begin

putpixel (TPosition.GetX, TPosition.GetY, color);

vidno: = True;

End;

procedure Tosob.Blind;

Begin

putpixel (TPosition.GetX, TPosition.GetY, GetBKColor);

vidno: = False;

End;

Function Tosob.Daizwet: word;

Begin Daizwet: = color End;

Function Tosob.VidnoLi: Boolean;

Begin VidnoLi: = Vidno End;

FUNCTION TOSOB.DAIAGE: INTEGER;

BEGIN DAIAGE: = AGE END;

End.

Додаток 3.

Бібліотека Mycrt

unit Mycrt;

interface

uses tpcrt, dos;

procedure fon (x: byte);

procedure txt (col: byte);

procedure ramka (x1, y1, x2, y2: integer);

procedure colorwind (v1, v2, v3, v4, fon, text: byte);

FUNCTION COLWORD (COL: BYTE): STRING;

function mes (z: longint): string;

implementation

{************************************************* **********}

function mes;

var col: string;

x: integer;

begin

x: = z mod 365;

if (x> = 0) and (x <= 30) then col: = 'січня';

if (x> = 31) and (x <= 58) then col: = 'лютого';

if (x> = 59) and (x <= 89) then col: = 'березня';

if (x> = 90) and (x <= 119) then col: = 'Квітень';

if (x> = 120) and (x <= 150) then col: = 'травня';

if (x> = 151) and (x <= 180) then col: = 'червня';

if (x> = 181) and (x <= 211) then col: = 'липні';

if (x> = 212) and (x <= 241) then col: = 'серпня';

if (x> = 242) and (x <= 272) then col: = 'вересня';

if (x> = 273) and (x <= 303) then col: = 'Жовтень';

if (x> = 304) and (x <= 335) then col: = 'листопада';

if (x> = 336) and (x <= 365) then col: = 'грудня';

mes: = col;

end;

{************************************************* **********}

FUNCTION COLWORD;

VAR COLO: STRING;

BEGIN

IF COL = 0 THEN COLO: = 'ЧОРНИЙ';

IF COL = 1 THEN COLO: = 'СИНІЙ';

IF COL = 2 THEN COLO: = 'ЗЕЛЕНИЙ';

IF COL = 3 THEN COLO: = 'БЛАКИТНИЙ';

IF COL = 4 THEN COLO: = 'ЧЕРВОНИЙ';

IF COL = 5 THEN COLO: = 'ФІОЛЕТОВИЙ';

IF COL = 6 THEN COLO: = 'КОРИЧНЕВИЙ';

IF COL = 7 THEN COLO: = 'СВІТЛО-СІРИЙ';

IF COL = 8 THEN COLO: = 'ТЕМНО-СІРИЙ';

IF COL = 9 THEN COLO: = 'СВІТЛО-СИНІЙ';

IF COL = 10 THEN COLO: = 'СВІТЛО-ЗЕЛЕНИЙ';

IF COL = 11 THEN COLO: = 'СВІТЛО-БЛАКИТНИЙ';

IF COL = 12 THEN COLO: = 'СВІТЛО-ЧЕРВОНИЙ';

IF COL = 13 THEN COLO: = 'СВІТЛО-ФІОЛЕТОВИЙ';

IF COL = 14 THEN COLO: = 'ЖОВТИЙ';

IF COL = 15 THEN COLO: = 'БІЛИЙ';

COLWORD: = COLO;

END;

{************************************************* **********}

procedure fon;

begin

textbackground (x);

end;

{************************************************* **********}

procedure txt;

begin

textcolor (col);

end;

{************************************************* **********}

procedure ramka; {вивести рамку}

const

a = # 186; b = # 187; c = # 188; d = # 200; e = # 201; f = # 205;

{T}

var i, j: integer;

begin

hiddencursor;

gotoxy (x1, y1);

write (e);

for i: = (x1 +1) to (x2-1) do write (f);

write (b);

for i: = (y1 +1) to (y2-1) do

begin

gotoxy (x1, i);

write (a);

gotoxy (x2, i);

write (a);

end;

gotoxy (x1, y2);

write (d);

for i: = (x1 +1) to (x2-1) do write (f);

write (c);

hiddencursor;

end;

{************************************************* **********}

procedure colorwind; {зробити вікно з рамкою}

begin

window (v1, v2, v3, v4);

textbackground (fon);

clrscr;

textcolor (text);

ramka (1,1, v3-v1, v4-v2);

end;

{************************************************* **********}

begin

end.

Додаток 4.

Інструкція користувача.

Запустити на виконання файл 'fauna.exe', який

винен знаходиться в одному каталозі з файлом 'egavga.bgi'.

На екрані з'явитися основне горизонтальне меню, з трьома пунктами: 'Start', 'Option', 'Quit'.

Активізація графічний режим і запуск відображення на екран станеться при натисненні клавіш 's' або 'S'.

Вихід з програми можна здійснити клавішами 'q' або 'Q'.

Активізація меню 'Option' відбудеться при натисканні клавіш 'O' або 'o'. У цьому меню з'явитися три пункти - 'Herbivorous', 'Beast of divy', 'Environment'. При натисканні 'H' або 'h' будуть задаватися параметри травоїдних. При натисканні 'B' або 'b' будуть задаватися параметри хижаків. При натисканні 'E' або 'e' будуть задаватися параметри навколишнього середовища. При введенні параметрів хижаків, травоїдних і навколишнього середовища треба слідувати підказкам з'являються внизу екрана.

При натисканні клавіші 'Esc' відбудеться вихід в DOS з

будь-якого місця програми.


Додати в блог або на сайт

Цей текст може містити помилки.

Медицина | Реферат
48.5кб. | скачати


Схожі роботи:
Програма емуляції роботи командного процесора операційної системи
Закономірності індивідуального розвитку тварин
Етапи розвитку людини і тварин
Програма розвитку сортувальної станції
Програма розвитку асертивності у підлітків
Структура і властивості популяцій
Програма реформування та розвитку житлового господарства
Основні закономірності росту і розвитку сільськогосподарських тварин
Програма СЕПІН універсальна технологія розвитку муніципального
© Усі права захищені
написати до нас