Удалите все столбцы матрицы, в которых находится минимальный элемент - Pascal ABC
Формулировка задачи:
Решение задачи: «Удалите все столбцы матрицы, в которых находится минимальный элемент»
uses crt; const nmax=10; var a:array[1..nmax,1..nmax] of integer; m,n,i,j,min,max,k,q:integer; b:set of byte; begin randomize; repeat write('Количество строк от 2 до ',nmax,' n='); readln(n); until n in [2..nmax]; repeat write('Количество столбцов от 2 до ',nmax,' m='); readln(m); until m in [2..nmax]; writeln('Исходная матрица:'); for i:=1 to n do begin for j:=1 to m do begin a[i,j]:=random(10); write(a[i,j]:3); end; writeln; end; {найдем мин и макс} min:=a[1,1]; max:=a[1,1]; for i:=1 to n do for j:=1 to m do if a[i,j]<min then min:=a[i,j] else if a[i,j]>max then max:=a[i,j]; writeln('Минимальный элемент=',min); writeln('Максимальный элемент=',max); {запомним строки где больше 1 максимального} b:=[]; for i:=1 to n do begin q:=0; for j:=1 to m do if a[i,j]=max then inc(q); if q>1 then b:=b+[i]; end; {удаление столбцов с минимальным} j:=1; while j<=m do begin q:=0; i:=1; while (i<=n)and(q=0) do if a[i,j]=min then q:=1 else inc(i); if q=1 then{если есть минимальный} begin if j<m then begin for k:=j to m-1 do{от этого столбца до предпоследнего} for i:=1 to n do{всем элементам столбцов} a[i,k]:=a[i,k+1];{присваиваем значения правого} end; m:=m-1;{уменьшаем количество} end else j:=j+1;{если нет минимального, вперед} end; if m=0 then writeln('Все столбцы удалены!') else begin writeln('Удаление столбцов с минимальными:'); for i:=1 to n do begin for j:=1 to m do write(a[i,j]:3); writeln; end; if b=[] then writeln('В матрице не было строк с более чем 1 максимальным') else begin writeln('Строки в которых было более 1 максимального'); for i:=1 to n do if i in b then write(i,' '); writeln; writeln('Их удаление'); i:=n;{начнем снизу} while i>1 do if i in b then{если есть} begin if i<n then begin for k:=i to n-1 do{от этой строки до предпоследней} for j:=1 to m do{всем элементам строки} a[k,j]:=a[k+1,j];{присваиваем значения нижней} end; n:=n-1;{уменьшаем количество} i:=i-1; end else i:=i-1;{если нет, вверх} writeln('n=',n); for i:=1 to n do begin for j:=1 to m do write(a[i,j]:3); writeln; end; end; end; end.
Объяснение кода листинга программы
В данном коде используется язык программирования Pascal ABC. Он предназначен для создания и выполнения программ на языке Pascal. В начале кода происходит инициализация переменных и объявление массива a, который будет представлять собой матрицу. Далее идет цикл, который повторяется до тех пор, пока не будет введено определенное количество строк и столбцов для матрицы. В каждой итерации цикла происходит ввод данных для новой строки или столбца. После этого происходит поиск минимального и максимального элементов в матрице. Для этого используется два указателя, один из которых начинает двигаться по строкам, а другой - по столбцам. Если текущий элемент меньше минимального, то обновляется значение минимального элемента. Аналогично, если текущий элемент больше максимального, то обновляется значение максимального элемента. Затем происходит удаление столбцов, в которых находится минимальный элемент. Для этого используется еще один указатель, который начинает двигаться по столбцам. Если текущий столбец содержит минимальный элемент, то его значение копируется в следующий столбец, а указатель сдвигается на одну позицию вправо. Количество столбцов уменьшается на единицу. Если после удаления всех столбцов с минимальным элементом остается ноль столбцов, то выводится сообщение о том, что все столбцы были удалены. В противном случае выводится информация о количестве строк с более чем одним максимальным элементом. В конце кода выводится итоговая информация о матрице, включая значения минимального и максимального элементов, а также количество строк и столбцов.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д