Другие языки программирования и технологии

Помогите решить задачу в турбо паскаль

На поле n*n(n<=500) размещено m(1<=m<=10) вирусов. В каждый момент времени вирус заражает 4 окружающих амбарчики, найти сколько моментов времени нужно, чтобы заполнилось все поле ? напишите не только код программы, но и логическое поясненння .
информация о вирусах храница в двухмерном массиве pole, если
pole[x, y] = 0 то нет вирусов
pole[x, y] = 10 есть вирус
pole[x, y] = 1 молодое поколение вирусов

Программа написана на PascalABC (скачать можно с http://pascalabc . net/ru/ssyilki-dlya-skachivaniya . html - ссылка без пробелов)

{На поле n*n(n<=500) размещено m(1<=m<=10) вирусов.
В каждый момент времени вирус заражает 4 окружающих клетки,
найти сколько моментов времени нужно, чтобы заполнилось все поле ?}
uses GraphABC;
const Nmax = 500;
var pole : array[1..Nmax, 1..Nmax] of byte;
x, y : integer;
m : integer; {Количество вирусов}
N : Integer; {Размер поля}
flag : boolean;
i : integer;
BEGIN
{Задаем размеры поля}
write('Введите размеры поля 50 < N < 500 '); ReadLn(N);
{Задаем количество вирусов}
write('Введите количество вирусов 1 < m < 100 '); ReadLn(m);

for x := 1 to Nmax do
for y := 1 to Nmax do
pole[x, y] := 0; {Если клетка пустая, то ее значение равно 0}

{Генерируем 10 вирусов со случайными координатами}
Randomize;
for i := 1 to m do begin
x := Random(N)+1;
y := Random(N)+1;
pole[x, y] := 10; {Если в клетке есть вирус то ее значение равно 10}
end;

{Задаем размеры окна}
SetWindowSize(Nmax, Nmax);
{Очищаем окно}
Window.Clear;
{Рисуем поле}
DrawRectangle(1,1,N,N);

{Рисуем вирусы: красная точка с координатами: x, y }
for x := 1 to N do begin
for y := 1 to N do begin
if pole[x, y] = 10 then begin
SetPixel(x, y, clRed);
end;
end;
end;

sleep(1000);
i := 0;
repeat
{Если в клетке есть вирус (pole[x, y] = 10), а соседнии пустые (pole[, ] = 0)),
то селим туда молодое поколение (pole[, ] = 1))}
for x := 1 to N do begin
for y := 1 to N do begin
if pole[x, y] = 10 then begin
if (x < N) and (pole[x+1, y] = 0) then pole[x+1, y] := 1;
if (x > 1) and (pole[x-1, y] = 0) then pole[x-1, y] := 1;
if (y < N) and (pole[x, y+1] = 0) then pole[x, y+1] := 1;
if (y > 1) and (pole[x, y-1] = 0) then pole[x, y-1] := 1;
end;
end;
end;

LockDrawing;
flag := true;
for x := 1 to N do begin
for y := 1 to N do begin
{Если есть хоть одно свободное поле - продолжаем цикл repeat- until}
if pole[x, y] = 0 then begin
flag := false;
end;

{Если в клетке есть вирус или молодое поколение,
то молодое поколение переводим в разряд вирусов и закрашиваем
эту клетку}
if (pole[x, y] = 10) or (pole[x, y] = 1) then begin
pole[x, y] := 10;
SetPixel(x, y, clGreen);
end;
end;
end;
Redraw;
{Считаем циклы}
i := i + 1;
Window.Title := IntToStr(i);
until flag;
Window.Title := 'Количество циклов '+IntToStr(i);
END.
МШ
Максим Шишкин
7 015
Лучший ответ
Вопрос неверен. Тебе нужно знать время, а оно зависит от производительности компа. Если ты хочешь знать количество циклов программы, называй цену, повышая её, а как только кого-то она устроит, то он тебе прогу напишет.
Big Brother
Big Brother
77 372
неплохие у тебя запросы, ты правда думаешь тебе тут кто то решать будет?