Упорядочить столбцы матрицы по убыванию их средних арифметических - Pascal

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

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

Добрый день! Задание звучит следующим образом: Дана матрица целых чисел X(n, т). Упорядочить ее столбцы по убыванию их средних арифметических. Вывести исходную и полученную матрицы. Значения буквенных переменных и элементов матрицы задавать с клавиатуры. С вводом самой матрицы и нахождением среднего арифметического каждого из столбцов, вроде разобрался, а вот сортировкой беда Сам код программы выглядит следующим образом:
uses crt;
var
a:array[1..100,1..100] of integer;
s:array [1..100] of integer;
N,M,i,j,sr,bf,k:integer;
begin
clrscr;
writeln('Введите размер матрицы:');
readln(n,m);
writeln;
writeln('Размер матрицы=' , n,'*',m);
writeln('Заполните матрицу: ');
for i:=1 to n do begin
for j:=1 to m do begin
writeln('A[',i,',',j,']=');
readln(a[i,j]); {Считываем элементы матрицы}
end;
end;
writeln('Начальная матрица=');
for i:=1 to n do begin
for j:=1 to m do
write(a[i,j]:2,' ');
writeln;
end;
j:=1;
for j:=1 to m do
for i:=1 to n do begin
s[j]:=s[j]+a[i,j];
sr:=sr+1;
if i=n then begin
writeln('Среднее арифметическое=' , (s[j]/sr):6:3);
s[j]:=0;
sr:=0;
end;
end;
Поломав голову получилось следующее:
for j:=1 to m do
for k:=1 to n-j do
if s[k]<s[k+1] then begin
bf:=s[k];
s[k]:=s[k+1];
s[k+1]:=bf;
end;
for i:=1 to n do begin
bf:=a[i,j];
a[i,j]:=a[i,k+1];
a[i,k+1]:=bf;
end;
writeln('Матрица после сортировки=');
for i:=1 to n do begin
for k:=1 to m do
write(a[i,k]:6:0);
writeln;
end;
Но все же не то что нужно, где-то допустил ошибку, а где не могу понять. Сама ошибка заключается в том, что выводиться либо начальная матрица, либо такая, у которой все столбцы одинаковые. За предоставленные наставления буду благодарен. Спасибо!

Решение задачи: «Упорядочить столбцы матрицы по убыванию их средних арифметических»

textual
Листинг программы
  for i := 1 to n do
    for j := n downto i do
      if s[i] < s[j] then
      begin
        bf := s[j];
        s[j] := s[i];
        s[i] := bf;
 
        for k := 1 to m do
        begin
          bf := a[k, i];
          a[k, i] := a[k, j];
          a[k, j] := bf;
        end;
 
      end;

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

  1. Создается цикл i от 1 до n, где n - количество столбцов в матрице.
  2. Вложенный цикл j от n до i.
  3. Если среднее арифметическое столбца i меньше среднего арифметического столбца j, то выполняется следующее:
    • Создается временная переменная bf и присваивается ей значение из столбца j.
    • Значение столбца j заменяется значением столбца i.
    • Значение столбца i заменяется временной переменной bf.
  4. Затем для каждой строки матрицы (предположительно m строк) выполняется следующее:
    • Создается временная переменная bf и присваивается ей значение из ячейки a[k, i].
    • Значение ячейки a[k, i] заменяется значением из ячейки a[k, j].
    • Значение ячейки a[k, j] заменяется временной переменной bf. Этот код выполняет упорядочивание столбцов матрицы по убыванию их средних арифметических значений.

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


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

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

14   голосов , оценка 3.929 из 5
Похожие ответы