«Клеточный автомат на DELPHI» на C#, C++, VB перепишу быстро
Простейший код… и правила перехода...
1. Если в текущий дискретный момент времени базовая клетка активна, и ровно 2 или 3 любые клетки окружения также активны, то в следующий дискретный момент времени базовая клетка остается активной, в противном случае она становится не активной
2. Если в текущий дискретный момент времени базовая клетка неактивна, она становится активной только тогда, когда все клетки её окружения являются активными, в противном случае она остается неактивной
Рис.1 Клеточнй автомат, как игра Жизнь
Данная программа позволяет моделировать изменение состояния популяции в цикле (по времени) методом изменения правил перехода клеток автомата….
Но для конкретно этого задания правила уже определены... Их и реализуем...
Поскольку однотипных объектов "Клетка" очень много, то для реализации функциональности программы объявляю класс:
//------------------------------
TKlet = class
private { Private declarations }
curval, newval: integer; //поля со значениями 0 или 1
public { Public declarations }
constructor Create;
function GetVal:integer;
procedure Sinhro; //перед визуализацией curval,newval синхронизируются
procedure NewSost(v1,v2,v3,v4:integer);//новое значение пишется в newval по значениям из curval
end;
//------------------------------
Получить значения параметров перед вызовом метода NewSost(v1,v2,v3,v4:integer); можно методом GetVal класса TAutomat:
v1:= GetVal(i,j-1);//верхний сосед
v2:= GetVal(i+1,j);//правый сосед
v3:= GetVal(i,j+1);//нижний сосед
v4:= GetVal(i-1,j);//левый сосед
В данный метод передаются только влияющие параметры (значения curval четырех главных соседей - т.е. соседних клеток сверху, снизу, справа, слева)
//------------------------------
procedure TKlet.NewSost(v1,v2,v3,v4:integer);//новое значение пишется в newval
var sum:integer;
begin
sum:=v1+v2+v3+v4;
if (curval=1) then // если клетка уже активна
begin
if (sum=2) or (sum=3) then newval:=1 //если 2 или 3 соседа активны
else newval:=0;
end
else // (curval=0) не активна
begin
if (sum=4) then newval:=1 //если все соседи активны
else newval:=0;
end;
end;
//------------------------------
В случае изменения правил, корректировать придется только эту процедуру...
Скачать ехе-файл для тестирования…
Еще есть Клеточный автомат на VBA Excel Модель лесного пожара
И клеточный автомат для маркетинговых исследований распространения на рынке двух товаров, отличающихся ценой и качеством. Изменяя параметры, можно видеть, как один товар вытесняется с рынка другим... с различной скоростью...
Другие примеры на языках «C»,«C++»,«C#»
Другие примеры на языке «Delphi»