.: [ïðåäûäóùàÿ | îãëàâëåíèå | ñëåäóþùàÿ] :.

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];
           
}
      }
}

.: [ïðåäûäóùàÿ | îãëàâëåíèå | ñëåäóþùàÿ] :.