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

найдите ошибку в программе

заранее благодарен вот условие: Со спутника-шпиона получено изображение в некотором волновом диапазоне сверхсекретной военной базы предполагаемого противника. База расположена на Антарктиде, все постройки на ней высечены из кубов льда и имеют на фотографии квадратную форму и не имеют общих фрагментов стен ненулевой длины (по всей видимости, это сделано в целях маскировки от локаторов, работающих в инфракрасном спектре). Благодаря мастерству операторов оказалось, что стены разных построек параллельны границам фотографии. Для того, чтобы составить сверхсрочный отчет для командования, необходимо узнать, сколько зданий находятся на базе. Напишите программу, которая это сделает. Входные данные В первой строке входного файла INPUT.TXT записаны числа N и M (1 <= M, N <= 500) – размеры фотографии в пикселях по вертикали и по горизонтали. Следующие N строк содержат по M символов каждая: символ '.' соответствует пустому месту, '#' – элементу постройки. Выходные данные В выходной файл OUTPUT.TXT выведите единственное число – количество построек на базе. Моя программа: var b:array[0..999,0..999]of char; a:array[0..999,0..999]of byte; i,j,n,m,k:longint; f:text; begin k:=0; assign(f,'input.txt'); reset(f); read(f,n,m); for i:=1 to n do begin for j:=1 to m do read(f,b[i,j]); readln(f); end; close(f); assign(f,'output.txt'); rewrite(f); for i:=1 to n do for j:=1 to m do if ord(b[i,j])=35 then if (a[i,j+1]=1)or (a[i,j-1]=1)or (a[i+1,j]=1)or (a[i-1,j]=1)or (a[i+1,j+1]=1)or (a[i-1,j-1]=1)or (a[i+1,j-1]=1)or (a[i-1,j+1]=1)then a[i,j]:=1 else begin k:=k+1; a[i,j]:=1 end; write(f,k); close(f); end.
У меня получилось вот так:
const
Size = 100;
var
F : Text;
P, Row, Col, tRow, tCol, N, M : Word;
A : array [1..Size, 1..Size] of record B : Boolean; N : Word; end;
Str : String;

begin
{ обнуление массива }
for Row := 1 to Size do
for Col := 1 to Size do
begin
A[Row, Col].B := False;
A[Row, Col].N := 0;
end;

{ чтение данных }
Assign(F, 'input.txt');
Reset(F);
ReadLn(F, N, M);
for Row := 1 to M do
begin
ReadLn(F, Str);
for Col := 1 to N do
if Str[Col] = '#' then
A[Row, Col].B := True;
end;
Close(F);

{ анализ данных }
P := 0; { счетчик строений }
for Row := 1 to M do
for Col := 1 to N do
if A[Row, Col].B then
if A[Row, Col].N = 0 then
{ Строение ещё не посчитано }
begin
Inc(P); { новое строение }
{ Установим на всё строение его номер }
tRow := Row;
repeat
tCol := Col;
repeat
A[tRow, tCol].N := P;
Inc(tCol);
until Not A[tRow, tCol].B;
Inc(tRow);
until (tRow > M) or Not A[tRow, Col].B;
end;

{ Готово }
Assign(F, 'output.txt');
Rewrite(F);
WriteLn(F, P);
Close(F);
end.
Для вот таких данных (здесь шрифт не пропорциональный) :
7 4
###.#.#
###.#..
....#
#.#.#.#
Выводит результат:
7
Сергей Чернышев
Сергей Чернышев
77 205
Лучший ответ
ты лучше скажи какая ошибка выскакивает... логическая или синтаксическая... а то лень ковыряться... лучше ее по новой писать.. так намного понятней...