ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

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

     

    Інформатика, програмування

    Емуляція ПРОГРАМА РОЗВИТКУ ТВАРИН

    1. ВСТУП.

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

    Умови були такі, що в емуляції повинні брати участь дві популяції: хижаки і травоїдні, які б взаємодіяли один з одним шляхом поїдання травоїдних хижаками.

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

    - Вік тварин

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

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

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

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

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

    2. Основна частина.

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

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

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

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

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

    2.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 для зберігання хижаків

    2.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

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

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

    Процедури:

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

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

    ramka - виведення прямокутника символами 186,187,188,200,201,205

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

    Функції:

    colword - перетворення чисел від одного до п'ятнадцяти в

    рядок з найменуванням кольору

    mes - перетворення чисел від нуля до триста шістдесяти п'яти до рядка з назвою місяця

    2.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 - організація основного меню

    3. ВИСНОВОК

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

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

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

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

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

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

    Дана програма може служити в якості навчального посібника з програмування на мові 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 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: = g-x;

    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: = m-x;

    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);

    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 ( 'Кал:'); (народжуваність)

    -18 --

    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 prey');

    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 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 keypressed 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.

    Бібліотека Fauna1

    (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 prey', 'Environment'. При натисканні 'H' або 'h' будуть задаватися параметри травоїдних. При натисканні 'B' або 'b' будуть задаватися параметри хижаків. При натисканні 'E' або 'e' будуть задаватися параметри навколишнього середовища. При введенні параметрів хижаків, травоїдних і навколишнього середовища треба слідувати підказкам що з'являються внизу екрана.

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

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

         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати ! DMCA.com Protection Status