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