Матрица 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д