Удалить из матрицы строки и столбцы, заполненные нулями. - Pascal ABC

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

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

помогите пожалуйста написать программу: В числовой двумерном массиве заданного размера уплотнить матрицу, удалив из неё строки и столбцы, заполненные нулями.

Решение задачи: «Удалить из матрицы строки и столбцы, заполненные нулями.»

textual
Листинг программы
uses crt;
const nmax=20;
var a:array [1..nmax,1..nmax] of integer;
    n,m,i,j,k,p:byte;
begin
repeat
write('Количество строк до ',nmax,' n=');
readln(n);
until n in [1..nmax];
repeat
write('Количество столбцов до ',nmax,' m=');
readln(m);
until m in [1..nmax];
writeln('Введите элементы матрицы, в том числе строки и столбцы из нолей:');
for i:=1 to n do
for j:=1 to m do
 begin
  write('a[',i,',',j,']=');
  readln(a[i,j]);
 end;
clrscr;
writeln('Исходная матрица:');
for i:=1 to n do
 begin
   for j:=1 to m do
   write(a[i,j]:3);
   writeln;
 end;
{Удаление строк, состоящих из 0}
i:=n;
while (i>=1)and(n>0) do
 begin
  k:=0;
  for j:=1 to m do
  if a[i,j]=0 then k:=k+1;
  if k=m then
   begin
    if i=n then
     begin
      n:=n-1;
      i:=i-1;
     end
    else
     begin
      for k:=i to n-1 do
      for p:=1 to m do
      a[k,p]:=a[k+1,p];
      n:=n-1;
     end
   end
  else i:=i-1;
 end;
if n=0 then
 begin
  write('Все элементы удалены');
  readln;
  exit
 end;
{Удаление столбцов из одних 0}
j:=m;
while (j>=1)and(m>0) do
 begin
  k:=0;
  for i:=1 to n do
  if a[i,j]=0 then k:=k+1;
  if k=n then
   begin
    if j=m then
     begin
      m:=m-1;
      j:=j-1;
     end
    else
     begin
      for p:=j to m-1 do
      for k:=1 to n do
      a[k,p]:=a[k,p+1];
      m:=m-1;
     end;
   end
  else j:=j-1;
 end;
writeln('Результат:');
for i:=1 to n do
   begin
    for j:=1 to m do
    write(a[i,j]:3);
    writeln;
   end;
end.

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

  1. Ввод данных о матрице:
    • nmax - максимальное количество строк и столбцов (используется переменная n)
    • m - количество столбцов (используется переменная m)
    • a - матрица размером nmax x m
    • n, m, i, j, k, p - байтовые переменные для индексов строк и столбцов
  2. Вывод сообщения о количестве строк и столбцов, которые будут обрабатываться
  3. Ввод данных о строках и столбцах матрицы
  4. Очистка экрана
  5. Вывод исходной матрицы
  6. Цикл удаления строк, состоящих из нулей:
    • i - номер строки, которую нужно удалить (уменьшается на 1 при каждом проходе цикла)
    • n - общее количество строк (уменьшается на 1 при каждом проходе цикла)
    • k - счетчик для отслеживания количества строк, которые были удалены
    • j - номер столбца, который содержит нули (уменьшается на 1 при каждом проходе цикла)
    • m - общее количество столбцов (уменьшается на 1 при каждом проходе цикла)
    • p - счетчик для отслеживания количества столбцов, которые были удалены
    • цикл продолжается, пока k не станет равным m или i не станет равным 1
  7. Вывод сообщения о том, что все элементы были удалены
  8. Цикл удаления столбцов из нулевых строк:
    • j - номер столбца, который содержит нули (уменьшается на 1 при каждом проходе цикла)
    • m - общее количество столбцов (уменьшается на 1 при каждом проходе цикла)
    • k - счетчик для отслеживания количества столбцов, которые были удалены
    • p - счетчик для отслеживания количества столбцов, которые были удалены
    • цикл продолжается, пока k не станет равным n или j не станет равным 1
  9. Вывод сообщения о результате
  10. Вывод матрицы после удаления строк и столбцов, заполненных нулями

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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