Матрица 5 на 5. Вывести строку или столбец в зависимости наличия положительных или нулевых элементов - Pascal

Узнай цену своей работы

Формулировка задачи:

Дана квадратная матрица порядка n(n=5). Если все строки упорядочены по возрастанию, то в вектор x записать элементы столбца, содержащего наименьшее количество положительных элементов, а иначе элементы строки, содержащей наибольшее количество нулевых элементов. То, что пытался сам:
Листинг программы
  1. program lab_6;
  2. {$R-}
  3. var x:array[1..5,1..5] of integer;
  4. i,j,k,f,m,n,b:integer;
  5. begin
  6. k:=0;
  7. m:=0;
  8. n:=0;
  9. b:=0;
  10. for i:=1 to 5 do
  11. for j:=1 to 5 do begin
  12. writeln('vvedi x',i,j);
  13. readln(x[i,j]);
  14. end;
  15. for i:=1 to 5 do
  16. for j:=1 to 5 do begin
  17. if x[i,j]>x[i+1,j] then begin
  18. b:=1;
  19. if x[j,i]>0 then begin
  20. if i=1 then begin
  21. m:=0;
  22. n:=0;
  23. end;
  24. m:=m+1;
  25. if n>m then begin
  26. n:=m;
  27. k:=j;
  28. end;
  29. end;
  30. end else begin
  31. if x[i,j]=0 then begin
  32. if j=1 then m:=0;
  33. n:=m;
  34. m:=m+1;
  35. if n<m then k:=i;
  36. end;
  37. end;
  38. end;
  39. if b=1 then begin write('[');
  40. for f:=1 to 5 do writeln(x[f,k]);
  41. write(']');
  42. end else begin write('[');
  43. for f:=1 to 5 do write(x[k,f]);
  44. write(']');
  45. end;
  46. readln;
  47. end.
Суть в том, что выводит, не то, что нужно. В 90% случаев это 4 столбец, хоть и выполнилось условие для вывода строки.

Решение задачи: «Матрица 5 на 5. Вывести строку или столбец в зависимости наличия положительных или нулевых элементов»

textual
Листинг программы
  1. const n=5;
  2. type mas=array[1..n]of integer;
  3.      matr=array[1..n]of mas;
  4. var a:matr;x:mas;
  5.     i,j:integer;
  6.    
  7. {задание и вывод массива}    
  8. procedure vv_matr(var x:matr;s:string;f:boolean);
  9. var i,j:integer;
  10. begin
  11.  randomize;
  12.  writeln(s);
  13.  for i:=1 to n do
  14.   begin
  15.    for j:=1 to n do
  16.     begin
  17.      if f then x[i,j]:=-5+random(11);{j-i-2}
  18.      write(x[i,j]:4)
  19.     end;
  20.    writeln
  21.   end
  22. end;
  23.  
  24. {возвращает true если строка упорядочена по возрастанию}
  25. function po_vozr_mas(xx:mas):boolean;
  26.     var i:integer;ff:boolean;
  27.      begin
  28.       i:=1;ff:=true;
  29.       while ff and (i<=n-1) do
  30.        begin
  31.         if xx[i]>=xx[i+1]
  32.          then ff:=false;
  33.         inc(i)
  34.        end;
  35.       po_vozr_mas:=ff
  36.      end;
  37.      
  38. {возвращает true если все строки в матрице упорядочены по возрастанию}    
  39. function po_vozr_matr(x:matr):boolean;
  40.  var i:integer;fl:boolean;  
  41.   begin
  42.    i:=1;fl:=true;
  43.    while fl and (i<=n) do
  44.     begin
  45.      if not po_vozr_mas(x[i])
  46.       then fl:=false;
  47.      inc(i)
  48.     end;
  49.    po_vozr_matr:=fl
  50.   end;
  51.  
  52.  {количество 0 в строке}
  53.  function kol_0_mas(xx:mas):integer;
  54.  var i,k:integer;
  55.  begin
  56.   k:=0;
  57.   for i:=1 to n do if xx[i]=0 then inc(k);
  58.   kol_0_mas:=k
  59.  end;
  60.  
  61.  {возвращает номер строки с наибольшим количеством 0 или -1, если нет строк с нулевыми элементами}
  62.  function kol_0_matr(x:matr):integer;
  63.  var i,k:integer;
  64.  begin
  65.   k:=-1;
  66.   for i:=1 to n do if (kol_0_mas(x[i])>0)and(kol_0_mas(x[i])>k) then k:=i;
  67.   kol_0_matr:=k
  68.  end;
  69.  
  70.  {количество положительных элементов в столбце}
  71.  function k_pol_st(x:matr;j:integer):integer;
  72.  var i,k:integer;
  73.  begin
  74.   k:=0;
  75.   for i:=1 to n do if a[i,j]>0 then inc(k);
  76.   k_pol_st:=k
  77.  end;
  78.  
  79.  {возвращает номер столбца,содержащего наименьшее количество положительных элементов, или -1, если нет положительных элементов в матрице}
  80.  function min_pol_st_matr(xx:matr):integer;
  81.  var j,k,st,tmp:integer;
  82.  begin
  83.   k:=n+1;st:=-1;
  84.   for j:=1 to n do
  85.    begin
  86.     tmp:=k_pol_st(xx,j);
  87.     if (tmp>0)and(tmp<k) then begin k:=tmp; st:=j end;
  88.    end;
  89.   min_pol_st_matr:=st
  90.  end;
  91.  
  92. begin
  93.  vv_matr(a,'A:',true);
  94.  if po_vozr_matr(a)
  95.   then
  96.    begin
  97.     writeln('все строки упорядочены по возрастанию');
  98.     if min_pol_st_matr(a)=-1
  99.      then writeln('нет столбцов с положительными элементами')
  100.      else
  101.       begin
  102.        writeln('X:');
  103.        j:=min_pol_st_matr(a);
  104.        for i:=1 to n do begin x[i]:=a[i,j]; write(x[i]:3) end
  105.       end
  106.    end
  107.   else
  108.    begin
  109.     writeln('не все строки упорядочены по возрастанию');
  110.     if kol_0_matr(a)=-1
  111.      then writeln('нет строк с нулевыми элементами')
  112.      else
  113.       begin
  114.        writeln('X:');
  115.        i:=kol_0_matr(a);
  116.        for j:=1 to n do begin x[j]:=a[i,j]; write(x[j]:3) end
  117.       end
  118.    end;
  119. end.

Объяснение кода листинга программы

  1. Объявляются константа n, тип mas (массив из n элементов типа integer) и matr (массив из n элементов типа mas), а также переменные a (матрица), x (массив), i и j (целочисленные переменные).
  2. Описывается процедура vv_matr для заполнения и вывода матрицы.
  3. Описывается функция po_vozr_mas, которая возвращает true, если массив упорядочен по возрастанию.
  4. Описывается функция po_vozr_matr, которая возвращает true, если все строки в матрице упорядочены по возрастанию.
  5. Описывается функция kol_0_mas, которая возвращает количество нулей в массиве.
  6. Описывается функция kol_0_matr, которая возвращает номер строки с наибольшим количеством нулей или -1, если нет строк с нулевыми элементами.
  7. Описывается функция k_pol_st, которая возвращает количество положительных элементов в столбце.
  8. Описывается функция min_pol_st_matr, которая возвращает номер столбца, содержащего наименьшее количество положительных элементов, или -1, если нет положительных элементов в матрице.
  9. Выполняется заполнение и вывод матрицы a с помощью процедуры vv_matr.
  10. Проверяется, упорядочены ли все строки матрицы по возрастанию. Если да, то выводится сообщение о том, что все строки упорядочены по возрастанию и происходит проверка наличия столбцов с положительными элементами. Если такие столбцы существуют, то выводится массив X.
  11. Если строки матрицы не упорядочены по возрастанию, то проверяется наличие строк с нулевыми элементами. Если такие строки существуют, выводится массив X.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.333 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы