18.4 Ìîäåëèðîâàíèå êëåòî÷íûõ àâòîìàòîâ
Êëåòî÷íûå àâòîìàòû - èíòåðåñíåéøèé êëàññ äèñêðåòíûõ ñèñòåì.
//ìîäåëèðîâàíèå êëåòî÷íîãî
àâòîìàòà
//////////////////////////////////////////////
#define SIZEBORDY 100
int
nill=10;
int nimm=10;
int bordy1[SIZEBORDY][SIZEBORDY];
int bordy2[SIZEBORDY][SIZEBORDY];
void InitInfici()
{
bordy1[SIZEBORDY/2][SIZEBORDY/2]=1;
}
void OutBordy(int
x0, int y0, int
h)
{
TColor c;
for(int i=0; i<SIZEBORDY; i++)
for(int j=0; j<SIZEBORDY; j++)
{
if(bordy1[i][j]==0)
c=clGreen;
else
if(bordy1[i][j]<nill) c=clRed;
else
c=clBlue;
Rectangle(x0+i*h,y0+j*h,x0+(i+1)*h,y0+(j+1)*h,c);
}
}
int key;
typedef struct
Nbr_
{
int
x;
int
y;
} NBR;
NBR nbr[8]=
{ {-1, -1}, {-1, 0}, {-1, 1},
{ 0, -1}, { 0, 1},
{ 1, -1}, { 1, 0}, { 1, 1}};
void ModelIll()
{
int
i0, j0;
InitInfici();
//while(key)
{
for(int t=0; t<200; t++)
{
OutBordy(10,10 ,6);
for(int i=0; i<SIZEBORDY; i++)
for(int j=0;
j<SIZEBORDY; j++){
if(bordy1[i][j]==0) continue;//îáû÷íàÿ êëåòêà
else
if(bordy1[i][j]<nill){//çàðàçíàÿ
bordy2[i][j]++;
for(int k=0; k<8;
k++){
i0=i+nbr[k].x;
j0=j+nbr[k].y;
if(i0<0 || i0>=SIZEBORDY) continue;
if(j0<0 || j0>=SIZEBORDY) continue;
if(bordy1[i0][j0]==0)//åñëè íåò èììóíèòåòà è íå çàðàçíàÿ
bordy2[i0][j0]=(random(100)<50)?0:1;
}
}
else
if(bordy1[i][j]<nill+nimm) bordy2[i][j]++;
//èììóíèòåò
else bordy2[i][j]=0;
}//endfor
for(int i=0;
i<SIZEBORDY; i++)
for(int j=0;
j<SIZEBORDY; j++)
bordy1[i][j]=bordy2[i][j];
}
}
}
|