Прямоугольников столько, сколько левых верхних углов. Таким образом, нужно посчитать количество этих углов. Клетка считается таким углом, если у нее нет соседей ни слева, ни сверху.

    Приведем текст программы:

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.
Текст этой программы можно взять здесь.