Прямоугольников столько, сколько левых верхних углов. Таким образом, нужно посчитать количество этих углов. Клетка считается таким углом, если у нее нет соседей ни слева, ни сверху.
Приведем текст программы:
Program Problem33_5; Var A: Array[1..100,1..100] Of Byte; m,i,j,sum:Byte; Begin Write('Задайте размерность матрицы: '); ReadLn(m); WriteLn('Укажите элементы массива (0 или 1)'); For i:=1 To m Do For j:=1 To m Do Begin Write('A[', i, ',', j,']:='); ReadLn(A[i,j]); End; WriteLn('Исходный массив:'); For i:=1 To m Do Begin For j:=1 To m Do Write(A[i,j]:2); WriteLn; End; sum:=0; {Начальное количество прямоугольников.} For i:=1 To m-1 Do For j:=1 To m-1 Do If A[i,j]=1 Then {В этой клетке есть единица.} If i=1 Then {Эта единица в первой строке.} Begin {И дополнительно в первом столбце.} If j=1 Then sum:=sum+1 {Это левый верхний угол.} Else {Проверим клетку левее, и если она пуста,} If A[i,j-1]=0 Then sum:=sum+1; {то это левый верхний угол.} End Else {Единица не в первой строке.} Begin If j=1 Then {Если она в первом столбце} Begin {и если клетка выше пустая, то} If A[i-1,j]=0 Then sum:=sum+1 {это левый верхний угол.} End Else {Единица не в первом столбце и не в первой строке.} {Проверяем клетки выше и левее текущей.} If (A[i,j-1]=0) And (A[i-1,j]=0) Then sum:=sum+1; End; WriteLn('Количество прямоугольников = ',sum); End.