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

     

     

     

     

     

         
     
    Моделювання схеми Життя
         

     

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

    Красноярський державний технічний університет

    Кафедра ВТ

    Утенков Валентин

    Володимирович

    Спеціальність 2201

    Шифр .448597

    Курсова робота за перший курс з предмету «Алгоритмічні мови та програмування»

    Тема: моделювання гри "Життя"

    1999

    Зміст

    1. Вступ 3
    2. Опис програми 5
    3. Висновок 11
    4. Додаток 12

    1. Введення

    У наше століття, коли космічні кораблі борознять простори Великого
    Театру, застосування комп'ютерів в різних галузях народного господарствастає необхідним і, як наслідок, неминучим. Комп'ютернітехнології та методи обробки даних стають застосовуються в будь-яких сферахлюдської діяльності від розрахунків графіків залізничних перевезень доскладання гороскопів. Звичайно, не у всіх питаннях комп'ютери можутьвидати рішення конкретної проблеми, але вони можуть, як мінімум, істотнополегшити накопичення, систематизацію та рутинну обробку даних.

    Методи вирішення завдань за допомогою комп'ютерів можна розділити на дваосновні групи.

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

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

    У даній роботі зроблена спроба на простому прикладі, який (звідомими допущеннями) застосуємо в біології, продемонструвати застосуванняцього методу для дослідження поведінки колоній мікроорганізмів.

    Модель поведінки системи гранично спрощена. Життєве простірпредставлено як поле, що складається з квадратних комірок розміром 50 (30 осередків;у кожної клітинки, очевидно, є 8 сусідніх. Кожна комірка може бути порожньоюабо містити клітку. Існування клітини визначається кількістюсусідів. Якщо в сусідніх комірках 2 або 3 клітини, то клітина живе, а якщосусідів більше трьох або менше двох то клітина гине (від
    «Перенаселення» чи то «самотності»). Якщо ж навколо порожньої коміркизнаходяться рівно 3 клітини, то в ній з'являється нова клітина.

    Таким чином, задані умови трьох основних процесів у живихістот: народження, існування і відмирання.

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

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

    2.1. Програма реалізована на Borland Pascal 7.0.

    2.2. Дані у програмі зберігаються в таких глобальних зміннихстандартних типів:

    2.2.1 A і B - основний і допоміжний масиви елементів типу
    Boolean розміром [0 .. 51,0 .. 31]. В основному масиві A зберігається інформація прозміст клітин в осередках поля. Допоміжний масив B введений длязанесення поточних змін вмісту осередків без зміни основногомасиву. Після заповнення масиву B його вміст копіюється в масив A.

    2.2.2. i і j - змінні типу integer. У первинному варіантіпрограми використовувалися як лічильники в циклах типу for. Згодом всіці цикли були переміщені з тіла програми в процедури, і ці зміннібули використані як параметри процедури InitGraph для установкиграфічного режиму.

    2.2.3. VP - змінна типу integer. Містить номер активноївідеосторінок. Використовується процедурою FlipVP (див. далі).

    2.2.4. step, live, dead і born - змінні типу integer. Містять,відповідно, номер кроку роботи програми, поточну кількість живихклітин на поле і кількість загиблих і що з'явилися за останній крок клітин.

    2.2.5. s і stri - змінні типу string. Змінна s застосовуєтьсяяк проміжна при переведенні чисел у строкове подання; з їїдопомогою формується мінлива stri, яка і виводиться на екранпроцедурою OutTextXY.

    2.3. Програма використовує стандартні модулі crt.tpu і graph.tpu атак само модуль mono3d.tpu, написаний для інших цілей, з якоговикористовується тільки процедура FlipVP.

    2.4. Основні блоки програми реалізовані в двох функціях і п'ятипроцедурах, що виконують наступні дії:

    2.4.1. Функція Nears. Повертає значення типу integer. Застосовуєтьсядля підрахунку клітин в сусідніх клітинках. Аргументами функції x і y єномер стовпця і рядка, що містять клітинку, для якої визначаєтьсякількість сусідів. При виконанні функції внутрішні лічильники i і jпробігають значення від x-1 до x 1 і від y-1 до y +1 відповідно. При цьомуперевіряється вміст кожної клітинки A [i, j] і, якщо вона не порожня, значенняпідсумовує змінної s збільшується на 1 (перед виконанням функціїмінлива s обнуляється). Таким чином в змінну s заноситьсякількість клітин у квадраті 3х3 клітинки з досліджуваної осередком в центрі.
    Після цього, якщо досліджувана клітинка не порожня, мінлива s зменшується на
    1 (оскільки нас цікавить тільки вміст навколишніх осередків). Даліфункція повертає значення змінної s.

    2.4.2. Функція Change виконує основні дії програми іповертає значення типу boolean. Під час її виконання внутрішнілічильники i та j пробігають діапазони значень, що охоплюють всюоброблювану площа поля. Для кожної комірки A [i, j] виконується перевірканаявності в ній клітини. Якщо в комірці є клітина, то за допомогою функції Nearsвизначається кількість її сусідів, якщо воно підходить під умовивідмирання, то осередок допоміжного масиву B [i, j] випорожнюється, амінлива dead збільшується на 1. Якщо комірка порожня, а функція Nearsповертає значення, що підходить під умову виникнення, то осередокдопоміжного масиву B [i, j] заповнюється, а мінлива bornзбільшується на 1. В інших випадках зміни даних не відбувається.

    На початку виконання змінні і born dead обнуляються, а функції
    Change присвоюється значення False. Якщо бодай одна змінаданих, функції присвоюється значення True. Оскільки ця функція єумовою виконання основного циклу програми, очевидно, що за відсутностідій відбуватиметься вихід з циклу.

    2.4.3. Процедура Setup випадковим чином заповнює поле клітинами.
    Щільність заповнення визначається аргументом стандартної функції Random.

    2.4.4. Процедура Copy копіює вміст допоміжного масиву Bв основний масив A.

    2.4.5. Процедура Count робить підрахунок клітин, що знаходяться вданий момент на поле. На початку її виконання мінлива live обнуляється.
    Після цього перевіряється вміст кожної оброблюваної осередку основногомасиву A [i, j] і, якщо вона не порожня, мінлива live збільшується на 1.

    2.4.6. Процедура Draw виводить зміст основного масиву A у виглядіграфічної побудови. Кожен осередок масиву A представлена на екраніпрямокутником 10х8 pix. У залежності від вмісту осередку він можемати яскраво-зелений колір і суцільну заливку (клітка) або темно-синій колір іштрихову заливку типу 9 (порожня осередок). Поверх заповненихпрямокутників (оператор Bar) на тому ж самому місці малюються контурніпрямокутники (оператор Rectangle) яскраво-синього кольору з яких виходитьсітка.

    2.4.7. Процедура Print здійснює вивід на екран супутньоїінформації (змінні step, live, і born dead c коментарями). Змінніперетворюються у послідовну форму за допомогою процедури Val та проміжноїзмінної s, після чого за допомогою стандартних арифметичних дій,застосовних до одиниць даних типу string, формується мінлива stri,яка і виводиться на екран оператором OutTextXY.

    2.4.8. Опис процедури FlipVP (модуль mono3d.tpu) виглядає так:

    Procedure FlipVP (var P: Integer);

    Begin

    () < p> () SetVisualPage (P);

    () P: = 1-P;

    () SetActivePage (p);

    () ClearDevice;

    ()

    End;

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

    2.5. Робота програми.

    2.5.1. Початок програми.

    2.5.1.1. Процедура Setup заповнює основний масив A (п. 2.4.3.)

    2. Змінним i і j присвоюються значення 9 і 1, що відповідає відеорежиму EGA640х350 pix, 16 кольорів.

    3. Оператор InitGraph встановлює цей режим відео.

    2.5.2. Основний цикл програми.

    2.5.2.1. Оператор While відкриває цикл.

    2.5.2.2. Функція Change використовується як умова виконання циклу,при цьому виконувані нею дії обробляють основний і допоміжниймасиви (п. 2.4.2.)

    2.5.2.3. Лічильник кроків step збільшується на 1.

    2.5.2.4. Процедура FlipVP перемикає активну і видимувідеосторінок (п. 2.4.8 .).

    2.5.2.5. Процедура Draw виводить на активну відеосторінок відображенняполя (масиву A п.2.4.6 .).

    2.5.2.6. Процедура Count підраховує поточну кількість клітин наполе (п. 2.4.5 .).

    2.5.2.7. Процедура Print виводить на активну відеосторінок поточнуінформацію про стан системи (п.п. 2.4.7. та 2.2.4 .).

    2.5.2.8. Оператор Delay забезпечує затримку виконання циклу длязручності візуального спостереження.

    2.5.2.9. За допомогою стандартних функцій KeyPressed і ReadKey каскадумовних переходів забезпечує вихід з циклу після натискання клавіші (дляцього в програмі оголошена мітка l).

    2.5.3. Закінчення програми.

    2.5.3.1. Після виходу з циклу після натискання клавіші (п. 2.5.2.9) або поумовою виходу (п. 2.5.2.2.) функція ReadKey призупиняє програму донатискання клавіші без зміни вмісту екрану.

    2.5.3.2. Оператор CloseGraph відключає графічний режим.

    2.5.3.3. Оператор ClrScr очищає екран, приводячи його у вихіднестан.

    5. Основні недоліки програми.

    1. Для нормальної роботи функції Change (а точніше Nears) в полі є крайні клітинки A [0,0 .. 31], A [51,0 .. 31], A [0 .. 51,0] і < p> A [0 .. 51,31], які не дивлячись ні на які умови завжди залишаються порожніми, що знижує чистоту моделювання.

    2. Деякі параметри, такі як частота оновлення, початкова щільність заповнення поля та ін змінюються тільки втручанням безпосередньо в текст програми.

    3. Не передбачено вихід з циклу при виникненні стабільних циклічних процесів, які сприймаються функцією Change як зміни, хоча практично перестають бути такими.

    2. Висновок.

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

    2. У нинішній формі програма дозволила виявити наступні нюанси:
    3.2.1. Кінцева картина видається майже однаковою при щільностізаповнення поля від 1/2 до 1/6. При щільності нижче 1/6 система звичайнодосить швидко приходить до повного «вимирання».
    3.2.2. Виявлено кілька видів стабільних фігур. Наприклад:

    Циклічні фігури. Наприклад:

    Рухомі фігури. Наприклад:

    3.3. У ході виконання роботи були закріплені навички програмування намовою Pascal: використання стандартних функцій модуля crt.tpu, застосуванняелементів графіки з модуля graph.tpu, написання і підключення власнихмодулів (mono3d.tpu), робота з компілятором і пр.

    3. Додаток
    Текст програми «Життя» (файл life.pas)

    uses crt, graph, mono3d;

    var
    A, B: array [0 .. 51,0 .. 31] of boolean; i, j, VP, step, live, dead, born: integer; s, stri: string;

    label l;

    Function Nears (x, y : integer): integer;

    ()

    () var

    () i, j, s: integer;

    ( )

    Begin

    ()

    () s: = 0;

    () for i: = x-1 to x 1 do

    () for j: = y-1 to y 1 do

    () if a [i, j] then s: = s +1;

    () if a [x, y] then s: = s-1;

    () Nears: = s;

    () < p> End;

    Function Change: Boolean;

    Begin

    ()

    () born: = 0;

    () dead: = 0;

    () Change: = False;

    ()

    () for i: = 1 to 50 do

    () for j: = 1 to 30 do

    () begin

    () ()

    () () if A [i, j] then

    () () begin

    () () () if ((Nears (i, j) 3)) then

    () () () begin

    () () () () B [i, j]: = False;

    () () () () dead: = dead 1;

    () () () () Change: = True;

    () () () end;

    ( ) () end

    () () else

    () () begin

    () () () if Nears (i, j) = 3 then

    () () () begin

    () () () () B [i, j]: = True;

    () ( ) () () born: = born 1;

    () () () () Change: = True;

    () () () end;

    () () end;

    () ()

    () end;

    ()

    End;
    Procedure Setup;

    ()

    () var

    () i, j: integer;

    ()

    Begin

    ()

    () Randomize;

    () for i: = 1 to 50 do

    () for j: = 1 to 30 do

    () if Random (2) = 0 then A [i, j]: = True;

    ()

    End;

    Procedure Draw;

    ()

    () var

    () i, j: integer;

    ()

    Begin

    ()

    () Rectangle (0,0,639,349);

    () for i : = 0 to 51 do

    () for j: = 0 to 31 do

    () begin

    () ()

    () () if A [i, j] then SetFillStyle (1,10)

    () () else SetFillStyle (9,1);

    () () Bar (55 +10 * i, 10 +8 * j, 65 +10 * i, 18 +8 * j);

    () () Rectangle (55 +10 * i, 10 +8 * j , 65 +10 * i, 18 +8 * j);

    () end;

    ()

    End;

    Procedure Copy;

    ()

    () var

    () i, j: integer;

    ()

    Begin

    ()

    () for i: = 1 to 50 do

    () for j: = 1 to 30 do

    () A [i, j]: = B [i, j];

    ()

    End;

    Procedure Print;

    Begin

    ()

    () Str (step: 3, s);

    () stri: = 'Крок #' + s;

    () Str (live: 3, s);

    () stri: = stri + 'Клітин' + s;

    () outtextxy (55,300, stri);

    () Str (born: 3, s);

    () stri: = 'З'явилося' + s;

    ( ) Str (dead: 3, s);

    () stri: = stri + 'Загинуло' + s;

    () outtextxy (55,315, stri); < p> ()

    ()

    End;

    Procedure Count;

    ()

    () var

    () i, j: integer;

    ()

    Begin

    ()

    ( ) live: = 0;

    () for i: = 1 to 50 do

    () for j: = 1 to 30 do

    () if A [i, j] then live: = live 1;

    ()

    End;

    BEGIN

    Setup;

    i: = 9;j: = 1;
    InitGraph (i, j, 'c: dos');

    SetColor (9);

    While Change dobegin
    () Step: step = 1;
    () FlipVP (VP);
    () Draw;
    () Count;
    () Print;
    () Copy;
    () Delay (22);
    () If KeyPressed then
    () If ReadKey''then
    () Goto l;end;

    l:

    ReadKey;

    CloseGraph;
    ClrScr;

    END.


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

     

     

     

     

     

     

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