Двумерный массив. Удалить строки без 0 элемента - Pascal ABC

Узнай цену своей работы

Формулировка задачи:

Дан массив B(n*m).Элементы массива ввести в программе.Удалить все строки, в которых нет нулевого элемента. двумерн массив Написал на паскале.нет, не приняли, сказали сделать проще

Решение задачи: «Двумерный массив. Удалить строки без 0 элемента»

textual
Листинг программы
procedure DeleteRow(var a:array[,] of integer; r:integer);
begin
  var rows:=a.GetLength(0);
  var cols:=a.GetLength(1);
  for var i:=r to rows-2 do
    for var j:=0 to cols-1 do a[i,j]:=a[i+1,j];
  SetLength(a,rows-1,cols)
end;
 
begin
  var b:array[,] of integer:=((1,2,3,0),(5,6,0,8),
      (9,10,11,12),(13,0,15,16),(17,18,19,20));
  Writeln('Исходный массив: ',b);
  var n:=b.GetLength(0);
  var m:=b.GetLength(1);
  for var i:=n-1 downto 0 do begin
    var FoundZero:=False;
    for var j:=0 to m-1 do
      if b[i,j]=0 then begin FoundZero:=True; Break end;
    if not FoundZero then DeleteRow(b,i) 
    end;
  Writeln('Результирующий массив: ',b);
end.

Объяснение кода листинга программы

  1. Создается процедура DeleteRow, которая принимает в качестве параметров двумерный массив a и номер строки r.
  2. В процедуре сначала определяется количество строк и столбцов в массиве a.
  3. Затем происходит перебор всех строк массива от r до rows-2, где rows - количество строк в массиве.
  4. Для каждой строки происходит перебор всех столбцов массива от 0 до cols-1.
  5. Если значение в текущей ячейке строки и столбца равно 0, то значение этой ячейки заменяется значением следующей ячейки в той же строке и столбце.
  6. После завершения цикла, функция SetLength используется для уменьшения количества строк в массиве a на 1.
  7. В основной части программы создается двумерный массив b, содержащий некоторые начальные значения.
  8. Затем определяется переменная n, которая хранит количество строк в массиве b.
  9. Далее происходит перебор всех строк массива b от n-1 до 0.
  10. Внутри цикла проверяется, есть ли в текущей строке хотя бы одна ячейка со значением 0.
  11. Если условие выполняется, то вызывается процедура DeleteRow с аргументами b и i, где i - номер текущей строки.
  12. После завершения цикла, выводится исходный массив b и результирующий массив b, который получается после удаления строк с нулевыми значениями.

Оцени полезность:

6   голосов , оценка 4 из 5
Похожие ответы