Процедура Setup случайным образом заполняет поле клетками. Плотность заполнения определяется аргументом стандартной функции Random

13297
знаков
0
таблиц
0
изображений

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

{}

{} SetVisualPage(P);

{} P:=1-P;

{} SetActivePage(p);

{} ClearDevice;

{}

End;

 

Она предназначена для того, чтобы скрыть от пользователя процесс прорисовки экрана. Принцип действия ее очевиден: активная видеостраница всегда остается невидимой.

 

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

 

2.5.1. Начало программы.

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

2.5.1.2.  Переменным i и j присваиваются значения 9 и 1, что соответствует видеорежиму EGA640х350 pix, 16 цветов.

2.5.1.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 очищает экран, приводя его в исходное состояние.


 

2.6.         Основные недостатки программы.

 

2.6.1.      Для нормальной работы функции Change (а точнее Nears) в поле имеются крайние ячейки A[0,0..31], A[51,0..31], A[0..51,0] и A[0..51,31], которые несмотря ни на какие условия всегда остаются пустыми, что снижает чистоту моделирования.

2.6.2.      Некоторые параметры, такие как частота обновления, начальная плотность заполнения поля и др. изменяются только вмешательством непосредственно в текст программы.

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


3.              Заключение.

 

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

3.2.     В нынешней форме программа позволила выявить следующие нюансы:

3.2.1. Конечная картина представляется почти одинаковой при плотности заполнения поля от 1/2 до 1/6. При плотности ниже 1/6 система обычно довольно быстро приходит к полному «вымиранию».

3.2.2. Обнаружено несколько видов стабильных фигур. Например:


Циклические фигуры. Например:


Движущиеся фигуры. Например:

 



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

 

4.       Приложение

Текст программы «Жизнь» (файл 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;

{}

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)<2) or (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);

{}

{}

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 do

begin

{} 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.

 


Информация о работе «Моделирование схемы Жизнь»
Раздел: Информатика, программирование
Количество знаков с пробелами: 13297
Количество таблиц: 0
Количество изображений: 0

Похожие работы

Скачать
107377
30
9

... воспринимаются даже на высоком научном уровне. Стремление упростить материал вряд ли целесообразно. Глава 3. Методические рекомендации курса «Математические основы моделирования 3D объектов» базового курса «компьютерное моделирование» для студентов педагогических ВУЗов специальности преподаватель информатики §1. Принципы построения электронного учебника Прежде чем рассмотреть ...

Скачать
28045
0
0

... . В другой группе определений моделирование сводится к выполнению хотя бы одной из названных функций, в третьем - к сочетанию двух - трех. 2 СУЩНОСТЬ И СОДЕРЖАНИЕ ТЕХНОЛОГИИ МОДЕЛИРОВАНИЯ   2.1 Понятие технологии моделирования   Моделирование — многофункциональное исследование, применяющееся для определения или уточнения характеристик существующих или вновь конструируемых объектов. Его ...

Скачать
96441
9
0

... сознания представления о здоровом образе жизни существуют многие столетия. Исследованию современных социальных представлений о здоровом образе жизни посвящена данная работа. Но прежде хотелось бы немного остановиться на самом понятии “социальные представления” и истории их изучения. 1.3. Изучение социальных представлений в психологии В 60-70 гг. 20 века как реакция на засилье в современной науке ...

Скачать
63891
8
0

... , таблица). Метод моделирования позволяет активизировать познавательную деятельность учащихся на уроке.   2.2. Опытно – экспериментальная работа. Анализ ее результатов Изучив теоретические положения по использованию моделирования при решении задач в 5 классе, у автора возникло желание и интерес реализовать это на практике. Для того чтобы доказать или опровергнуть предположение, что ...

0 комментариев


Наверх