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

Программирование 2 срочно!!!задача в поясненийх

2. Черные прямоугольники (5 баллов) Прямоугольное поле n на m разбито на NxM квадратных клеток (N<=100, M<=100). Некоторые клетки покрашены в черный цвет. Известно, что соседние черные клетки образуют черные прямоугольники, не имеющие общих вершин. Считая, что цвета клеток даны в виде значений элементов массива A(n,m), подсчитать число черных прямоугольников, о которых шла речь. Пример входных данных для проверки: n=4, m=4 A(1,1)=1, A(1,2)=0, A(1,3)=1, A(1,4)=1, A(2,1)=0, A(2,2)=0, A(2,3)=0, A(3,1)=1, A(3,2)=1, A(3,3)=0, A(3,4)=0, A(4,1)=1, A(4,2)=1, A(4,3)=0, A(4,4)=0. Требования к файлу с входными данными: все значения элементов массива, определяющие цвета клеток поля вводятся через пробел, первые два числа, определяют размер массива (первое число – n, второе – m). Требования к результату: Вывести число – количество черных квадратов. Пример входного файла и результата работы программы Input.txt 4 4 1 0 1 1 0 0 0 0 1 1 0 0 1 1 0 0 Результат 3
var A : array [1..100, 1..100] of Byte;
B : array [1..100, 1..100] of Word;
N, M : Byte;
R, C : Byte;
K : Word;
Next : Boolean;
begin
{ ********** Начальное обнуление массивов ********** }
for R := 1 to 100 do
for C := 1 to 100 do
begin
A[R, C] := 0;
B[R, C] := 0;
end;
{ ********** !!!Переделать на чтение из файла !!!********** }
N := 4; M := 4;
A[1,1] :=1; A[1,3] :=1; A[1,4] := 1; A[3,1] :=1; A[3,2] :=1; A[4,1] :=1; A[4,2] :=1;
{for R := 1 to N do begin for C := 1 to M do Write(A[R, C]); WriteLn; end; { вывод массива на экран }
{ ********** Решение ********** }
K := 0;
R := 1;
repeat
C := 1;
repeat
if A[R, C] = 1 then
begin
Next := False;
if R > 1 then if B[R - 1, C] > 0 then begin B[R, C] := B[R - 1, C]; Next := True; end;
if (C > 1) and Not Next then if B[R, C - 1] > 0 then begin B[R, C] := B[R, C - 1]; Next := True; end;
if Not Next then begin Inc(K); B[R, C] := K; end;
end;
Inc(C);
until C > M;
Inc(R);
until R > N;
{ ********** Готово! ********** }
{ ********** !!!Переделать на запись в файл !!!********** }
WriteLn(K);
end.
Константин Чигрин
Константин Чигрин
97 409
Лучший ответ
Сколько заплатишь за решение?