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

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

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

Код к задаче: «Удалить из матрицы строки и столбцы, заполненные нулями. - 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.
Эта работа вам не подошла?

Вы всегда можете заказать любую учебную работу у наших авторов от 20 руб.

10   голосов, оценка 4.300 из 5


СДЕЛАЙТЕ РЕПОСТ