Начнем опять с определения, что в задаче дано. Мы имеем двумерный массив, который, допустим, состоит из вещественных чисел. В результате нужно получить измененный массив. По условию задачи можно завести еще один вспомогательный одномерный массив. Рассмотрим алгоритм решения этой задачи.

    Будем просматривать исходный массив строка за строкой. Нам нужно обнулять те строки и столбцы, где изначально находились нули. Поэтому заведем вспомогательный одномерный массив, состоящий из элементов логического типа, количество элементов в котором равно количеству столбцов. При просмотре i-й строки будем отмечать во вспомогательном массиве те столбцы, которые нужно будет обнулить. Наличие нулевого элемента в строке будет отмечаться изменением значения логической переменной. Если она поменяла свое значение на противоположное, то эту строку нужно после просмотра обнулить. Таким образом, алгоритм решения задачи может быть следующим:

  1. организовать цикл по количеству строк;
  2. сравнивать каждый элемент текущей строки с нулем;
  3. если он равен нулю, то запоминать во вспомогательном массиве номер столбца, который нужно обнулить, и изменить значение логической переменной, свидетельствующей, что нужно обнулить текущую строку;
  4. при необходимости обнулить текущую строку и перейти к следующей строке;
  5. по завершению цикла (шаги 2-4) обнулить те столбцы, номера которых находятся во вспомогательном одномерном массиве.

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

Program Problem33_1; 
Var
  A: Array[1..50,1..40] Of Real;
  C: Array[1..40] Of Boolean;
  m,n,i,j:Integer;
  z:Boolean;
Begin
  Write('Задайте количество строк и столбцов: ');
  ReadLn(m,n);
  WriteLn('Укажите элементы массива');
  For i:=1 To m Do
   For j:=1 To n Do
   Begin
    Write('A[', i, ',', j,']:=');
    ReadLn(A[i,j]);
   End;
  WriteLn('Исходный массив:');
  For i:=1 To m Do
   Begin
     For j:=1 To n Do
       Write(A[i,j]:6:2);
     WriteLn;
   End;
  {Установим начальные значения во вспомогательном массиве.}
  For j:=1 To n Do C[j]:=False;
  {Основной блок программы.}
  For i:=1 To m Do {Цикл по количеству строк.}
   Begin
    z:=False; {Считаем, что в этой строке нет нулей.}
    For j:=1 To n Do {Проверяем элементы текущей строки.}
     If A[i,j]=0 Then {Если нулевой элемент найден,}
       Begin 
          C[j]:=True; {запоминаем его номер в массиве}
          z:=True;    {и отмечаем текущую строку.}
       End;
    If z Then {Если текущая строка содержала хотя бы один нуль,}
     For j:=1 To N Do {то обнуляем ее.}
          A[i,j]:=0;
   End; {Переходим к следующей строке.}
  {Обнуляем те столбцы, номера которых были помещены}
  {во вспомогательной массив.}
  For j:=1 To n Do
   If C[j] Then {Если j-й столбец был отмечен,}
    For i:=1 To m Do A[i,j]:=0; {то его обнуляем.}
  WriteLn('В результате получился следующий массив:');
  For i:=1 To m Do
   Begin
     For j:=1 To n Do
       Write(A[i,j]:6:2);
     WriteLn;
   End;
End.
Текст этой программы можно взять здесь.