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