Упорядочить столбцы матрицы по убыванию их средних арифметических - 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;
Объяснение кода листинга программы
- Создается цикл i от 1 до n, где n - количество столбцов в матрице.
- Вложенный цикл j от n до i.
- Если среднее арифметическое столбца i меньше среднего арифметического столбца j, то выполняется следующее:
- Создается временная переменная
bfи присваивается ей значение из столбца j. - Значение столбца j заменяется значением столбца i.
- Значение столбца i заменяется временной переменной
bf.
- Создается временная переменная
- Затем для каждой строки матрицы (предположительно m строк) выполняется следующее:
- Создается временная переменная
bfи присваивается ей значение из ячейки a[k, i]. - Значение ячейки a[k, i] заменяется значением из ячейки a[k, j].
- Значение ячейки a[k, j] заменяется временной переменной
bf. Этот код выполняет упорядочивание столбцов матрицы по убыванию их средних арифметических значений.
- Создается временная переменная