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