Показать сообщение отдельно
  #1  
Старый 08.05.2011, 13:23
r_max r_max вне форума
Прохожий
 
Регистрация: 08.05.2011
Адрес: казахстан
Сообщения: 4
Версия Delphi: 7 enterprise
Репутация: 10
Вопрос Моделирование инфекционного заболевания на Delphi

Смоделировать процесс распространения инфекции — стригущего лишая по участку кожи размером n*n (n — нечетное) клеток. Предполагается, что исходной зараженной клеткой кожи является центральная. В каждый интервал времени пораженная инфекцией клетка может с вероятностью 0,5 заразить любую из соседних здоровых клеток. По прошествии шести единиц времени зараженная клетка становится невосприимчивой к инфекции. Возникший иммунитет действует в течение последующих четырех единиц времени, а затем клетка оказывается здоровой. В ходе моделирования описанного процесса выдавать текущее состояние моделируемого участка кожи в каждом интервале времени отмечая зараженные, невосприимчивые к инфекции и здоровые клетки. Я к сожалению не силен в Delphi, смог реализовать только на Pascal. Теперь пытаюсь разобраться и в Delphi, надеюсь что Ваши советы направят меня по нужному пути!

вот то что у меня получилось в Pascal

Код:
Код:
uses
  CRT;

const
  n= 21;        {размер области}
  Cont= 50;     {заразность в процентах}
  Ill= 6;       {время болезни}
  Imm= 4;       {длительность иммунитета}

var
  a,b: array[1..n,1..n]of integer;
  i,j: integer;
  c: char;


procedure Show;
begin
  for i:=1 to n do begin
    for j:=1 to n do
      if (a[i,j]>0) then Write(' #') else if a[i,j]<0 then Write(' +') else Write('  ');
    WriteLn
  end
end;


begin
  FillChar(a,SizeOf(a),0);
  a[n div 2+1,n div 2+1]:=1;
  Show;
  Randomize;
  repeat
    b:=a;
    for i:=1 to n do begin
      for j:=1 to n do begin
        if a[i,j]>0 then begin
          if (i>1) and (b[i-1,j]=0) and (Random(100)<Cont) then b[i-1,j]:=1;
          if (j>1) and (b[i,j-1]=0) and (Random(100)<Cont) then b[i,j-1]:=1;
          if (i<n) and (b[i+1,j]=0) and (Random(100)<Cont) then b[i+1,j]:=1;
          if (j<n) and (b[i,j+1]=0) and (Random(100)<Cont) then b[i,j+1]:=1;
          Inc(b[i,j]);
          if b[i,j]>Ill then b[i,j]:=-Imm
        end
        else if a[i,j]<0 then Inc(b[i,j])
      end
    end;
    a:=b;
    Show;
    WriteLn;
    c:=ReadKey
  until c=#27
end.
Ответить с цитированием