Поменять местами строки матрицы, содержащие наибольший и наименьший элементы - Pascal
Формулировка задачи:
Всем привет.
Помогите пожалуйста с задачей.
В данной вещественной матрице размером nxm поменяйте местами строку, содержащую элемент с наибольшим значением, со строкой, содержащей элемент с наименьшим значением. Предполагается, что эти элементы единственные.
Преподаватель сказал делать по примеру, но лично я ничего не понимаю в этом.
Листинг программы
- Program SORT (input, output);
- Type
- Matrix = Array [1..10, 1..10] of Real;
- Var
- i, j, K, L : Integer; {параметры циклов и индексы}
- N : Integer; {порядок матрицы}
- A : Matrix; {исходная матрица}
- S : Array [1..10] of Real; {суммы элементов строк}
- R : Real; {промежуточная переменная}
- Begin
- Repeat
- Writeln ('Введите порядок матрицы N, N <= 10');
- ReadLn ( N )
- Until N in [2..10];
- Writeln ( 'Введите матрицу по строкам');
- for i := 1 to N do
- for j := 1 to N do
- Read ( A[i,j] );
- {Вывод исходной матрицы}
- Writeln ('Исходная матрица A');
- for i := 1 to N do
- Begin
- for j := 1 to N do
- Write ( A[i,j] :8:1 );
- Writeln
- end;
- {подсчет сумм элементов строк}
- for i := 1 to N do
- Begin
- S[i] := 0;
- for j := 1 to N do
- S[i] := S[i] + A[i,j]
- end;
- {сравнение сумм и перестановка строк}
- for i := 1 to N-1 do
- Begin
- K := 1; L := N - i + 1;
- for j := 2 to L do
- if S[ j ] > S[ K ]then
- K:= j;
- {замена суммы переставляемой строки}
- S[ K] := S[ L ];
- {перестановка строк через буферную переменную}
- for j := 1 to N do
- Begin
- R := A[K,j];
- A[K,j] := A[L,j];
- A[L,j] := R
- end
- end;
- {Вывод результирующей матрицы}
- Writeln ('Отсортированная матрица');
- for i := 1 to N do
- Begin
- for j := 1 to N do
- Write ( A[i,j] :8:1 );
- Writeln
- End
- End.
Решение задачи: «Поменять местами строки матрицы, содержащие наибольший и наименьший элементы»
textual
Листинг программы
- const mm=10; nm=10;
- var
- a: array [1..mm,1..nm] of Real;
- mx, mn, t: Real;
- m, n, i, j, imx, imn: Integer;
- begin
- Randomize;
- repeat Write('M [1..',mm,'] N [1..',nm,']: '); ReadLn(m,n);
- until (m in [1..mm]) and (n in [1..nm]);
- for i:=1 to m do for j:=1 to n do a[i,j]:=Random*100;
- WriteLn('A =');
- for i:=1 to m do begin
- for j:=1 to n do Write(a[i,j]:8:2); WriteLn;
- end;
- imn:=1; imn:=1; mn:=a[1,1]; mx:=a[1,1];
- for i:=1 to m do
- for j:=1 to n do begin
- if mn>a[i,j] then begin imn:=i; mn:=a[i,j]; end;
- if mx<a[i,j] then begin imx:=i; mx:=a[i,j]; end;
- end;
- WriteLn('Строки min: ',imn,', max: ',imx);
- if imn<>imx then
- for j:=1 to n do begin
- t:=a[imn,j]; a[imn,j]:=a[imx,j]; a[imx,j]:=t;
- end;
- WriteLn('A''=');
- for i:=1 to m do begin
- for j:=1 to n do Write(a[i,j]:8:2); WriteLn;
- end;
- end.
Объяснение кода листинга программы
- Создаются две переменные mm и nm, которые представляют собой длину матрицы a.
- Создается переменная a, которая представляет собой матрицу размером mm x nm.
- Создаются три переменные m, n, i и j, которые будут использоваться для перемещения строк матрицы.
- Задаются начальные значения для переменных mn и mx, которые будут использоваться для поиска наибольшего и наименьшего элементов в матрице.
- Заполняется матрица a случайными числами.
- Выводится матрица a с помощью цикла for.
- Внутри цикла for происходит сравнение элементов матрицы и, если текущий элемент меньше следующего, то обновляется значение переменной mn и mx.
- Если mn и mx не равны, то происходит цикл for, который меняет местами строки матрицы, содержащие наибольший и наименьший элементы.
- Выводится новая матрица a с помощью цикла for.
- Завершается программа.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д