Матрица 5 на 5. Вывести строку или столбец в зависимости наличия положительных или нулевых элементов - Pascal
Формулировка задачи:
Дана квадратная матрица порядка n(n=5). Если все строки упорядочены по возрастанию, то в вектор x записать элементы столбца, содержащего наименьшее количество положительных элементов, а иначе элементы строки, содержащей наибольшее количество нулевых элементов.
То, что пытался сам:
Суть в том, что выводит, не то, что нужно. В 90% случаев это 4 столбец, хоть и выполнилось условие для вывода строки.
program lab_6; {$R-} var x:array[1..5,1..5] of integer; i,j,k,f,m,n,b:integer; begin k:=0; m:=0; n:=0; b:=0; for i:=1 to 5 do for j:=1 to 5 do begin writeln('vvedi x',i,j); readln(x[i,j]); end; for i:=1 to 5 do for j:=1 to 5 do begin if x[i,j]>x[i+1,j] then begin b:=1; if x[j,i]>0 then begin if i=1 then begin m:=0; n:=0; end; m:=m+1; if n>m then begin n:=m; k:=j; end; end; end else begin if x[i,j]=0 then begin if j=1 then m:=0; n:=m; m:=m+1; if n<m then k:=i; end; end; end; if b=1 then begin write('['); for f:=1 to 5 do writeln(x[f,k]); write(']'); end else begin write('['); for f:=1 to 5 do write(x[k,f]); write(']'); end; readln; end.
Решение задачи: «Матрица 5 на 5. Вывести строку или столбец в зависимости наличия положительных или нулевых элементов»
textual
Листинг программы
const n=5; type mas=array[1..n]of integer; matr=array[1..n]of mas; var a:matr;x:mas; i,j:integer; {задание и вывод массива} procedure vv_matr(var x:matr;s:string;f:boolean); var i,j:integer; begin randomize; writeln(s); for i:=1 to n do begin for j:=1 to n do begin if f then x[i,j]:=-5+random(11);{j-i-2} write(x[i,j]:4) end; writeln end end; {возвращает true если строка упорядочена по возрастанию} function po_vozr_mas(xx:mas):boolean; var i:integer;ff:boolean; begin i:=1;ff:=true; while ff and (i<=n-1) do begin if xx[i]>=xx[i+1] then ff:=false; inc(i) end; po_vozr_mas:=ff end; {возвращает true если все строки в матрице упорядочены по возрастанию} function po_vozr_matr(x:matr):boolean; var i:integer;fl:boolean; begin i:=1;fl:=true; while fl and (i<=n) do begin if not po_vozr_mas(x[i]) then fl:=false; inc(i) end; po_vozr_matr:=fl end; {количество 0 в строке} function kol_0_mas(xx:mas):integer; var i,k:integer; begin k:=0; for i:=1 to n do if xx[i]=0 then inc(k); kol_0_mas:=k end; {возвращает номер строки с наибольшим количеством 0 или -1, если нет строк с нулевыми элементами} function kol_0_matr(x:matr):integer; var i,k:integer; begin k:=-1; for i:=1 to n do if (kol_0_mas(x[i])>0)and(kol_0_mas(x[i])>k) then k:=i; kol_0_matr:=k end; {количество положительных элементов в столбце} function k_pol_st(x:matr;j:integer):integer; var i,k:integer; begin k:=0; for i:=1 to n do if a[i,j]>0 then inc(k); k_pol_st:=k end; {возвращает номер столбца,содержащего наименьшее количество положительных элементов, или -1, если нет положительных элементов в матрице} function min_pol_st_matr(xx:matr):integer; var j,k,st,tmp:integer; begin k:=n+1;st:=-1; for j:=1 to n do begin tmp:=k_pol_st(xx,j); if (tmp>0)and(tmp<k) then begin k:=tmp; st:=j end; end; min_pol_st_matr:=st end; begin vv_matr(a,'A:',true); if po_vozr_matr(a) then begin writeln('все строки упорядочены по возрастанию'); if min_pol_st_matr(a)=-1 then writeln('нет столбцов с положительными элементами') else begin writeln('X:'); j:=min_pol_st_matr(a); for i:=1 to n do begin x[i]:=a[i,j]; write(x[i]:3) end end end else begin writeln('не все строки упорядочены по возрастанию'); if kol_0_matr(a)=-1 then writeln('нет строк с нулевыми элементами') else begin writeln('X:'); i:=kol_0_matr(a); for j:=1 to n do begin x[j]:=a[i,j]; write(x[j]:3) end end end; end.
Объяснение кода листинга программы
- Объявляются константа
n
, типmas
(массив изn
элементов типаinteger
) иmatr
(массив изn
элементов типаmas
), а также переменныеa
(матрица),x
(массив),i
иj
(целочисленные переменные). - Описывается процедура
vv_matr
для заполнения и вывода матрицы. - Описывается функция
po_vozr_mas
, которая возвращаетtrue
, если массив упорядочен по возрастанию. - Описывается функция
po_vozr_matr
, которая возвращаетtrue
, если все строки в матрице упорядочены по возрастанию. - Описывается функция
kol_0_mas
, которая возвращает количество нулей в массиве. - Описывается функция
kol_0_matr
, которая возвращает номер строки с наибольшим количеством нулей или -1, если нет строк с нулевыми элементами. - Описывается функция
k_pol_st
, которая возвращает количество положительных элементов в столбце. - Описывается функция
min_pol_st_matr
, которая возвращает номер столбца, содержащего наименьшее количество положительных элементов, или -1, если нет положительных элементов в матрице. - Выполняется заполнение и вывод матрицы
a
с помощью процедурыvv_matr
. - Проверяется, упорядочены ли все строки матрицы по возрастанию. Если да, то выводится сообщение о том, что все строки упорядочены по возрастанию и происходит проверка наличия столбцов с положительными элементами. Если такие столбцы существуют, то выводится массив
X
. - Если строки матрицы не упорядочены по возрастанию, то проверяется наличие строк с нулевыми элементами. Если такие строки существуют, выводится массив
X
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д