Матрица 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.