Удалить из матрицы строки и столбцы, заполненные нулями. - 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.
Объяснение кода листинга программы
- Ввод данных о матрице:
- nmax - максимальное количество строк и столбцов (используется переменная n)
- m - количество столбцов (используется переменная m)
- a - матрица размером nmax x m
- n, m, i, j, k, p - байтовые переменные для индексов строк и столбцов
- Вывод сообщения о количестве строк и столбцов, которые будут обрабатываться
- Ввод данных о строках и столбцах матрицы
- Очистка экрана
- Вывод исходной матрицы
- Цикл удаления строк, состоящих из нулей:
- i - номер строки, которую нужно удалить (уменьшается на 1 при каждом проходе цикла)
- n - общее количество строк (уменьшается на 1 при каждом проходе цикла)
- k - счетчик для отслеживания количества строк, которые были удалены
- j - номер столбца, который содержит нули (уменьшается на 1 при каждом проходе цикла)
- m - общее количество столбцов (уменьшается на 1 при каждом проходе цикла)
- p - счетчик для отслеживания количества столбцов, которые были удалены
- цикл продолжается, пока k не станет равным m или i не станет равным 1
- Вывод сообщения о том, что все элементы были удалены
- Цикл удаления столбцов из нулевых строк:
- j - номер столбца, который содержит нули (уменьшается на 1 при каждом проходе цикла)
- m - общее количество столбцов (уменьшается на 1 при каждом проходе цикла)
- k - счетчик для отслеживания количества столбцов, которые были удалены
- p - счетчик для отслеживания количества столбцов, которые были удалены
- цикл продолжается, пока k не станет равным n или j не станет равным 1
- Вывод сообщения о результате
- Вывод матрицы после удаления строк и столбцов, заполненных нулями
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д