Переставить столбцы матрицы в соответствии с ростом заданной характеристики - Turbo Pascal
Формулировка задачи:
Помогите дописать в задаче сортировку пузырьком и если можно с пояснением как она будет применяться.
Условие задачи: Характеристикой столбца целочисленной матрицы назовем сумму модулей его отрицательных нечетных элементов. Переставляя столбцы матрицы, расположить их в соответствии с ростом характеристик.
Вот какой кусок кода получился у меня (Программу я стал писать через процедуры и функции), что бы легче было понять мою идею, я оставлю сбоку к элементам когда свои комментарии:
Не могу написать сортировку, как я понял там нужно сделать по строчную проверку элементов в столбце, если находится элемент условия, то его добавляем в счетчик, потом суммируем элементы, которые удовлетворяют условию и меняем столбцы смотря на эти характеристики. Кто сможет помочь, тому большое спасибо!
Листинг программы
- Program BubbleSort;
- const n=5; // Задал параметры матрицы. Варьируя их меняем размеры матрицы.
- m=5;
- type Matr=array[1..n,1..m] of integer; // Новые типы: матрица,вектор-строка.
- Vector=array[1..m] of integer;
- Var A:Matr;
- B:Vector;
- i:integer;
- Procedure Form_Matr(var C:Matr); // Создаю матрицу со значениями.
- var k,l:integer;
- begin
- for k:= 1 to n do
- for l:= 1 to n do
- C[k,l]:=random(-15;20);
- end;
- Procedure Print_Matr(C:Matr); // Печать матрицы
- var k,l:integer;
- begin
- for k:=1 to n do
- begin
- for l:=1 to m do
- Write (C[k,l]:4);
- Writeln;
- end;
- end;
- Function F(var C:Matr;l:integer):integer; // Характеристика
- var S,k:integer;
- begin
- s:=0;
- For k:=1 to n do
- begin
- if C[k,l]<0 and (C[k,l] mod 2<>0) then // Условие характеристики
- S:=S+abs(C[k,l]);
- end;
- F:=S;
- end;
- procedure BubbleSort(var C : Matr;var O : Vector); // Сама сортировка пузырьком
- var p,k,l,j:integer;
- begin
- //[Тут нужно дописать сортировку пузырьком]//
- Begin
- Form_Matr(A); // создаем матрицу
- Print_Matr(A); // выводим матрицу на экран
- For i := 1 to m do
- B[i] := F(A,i);
- Writeln;
- BubbleSort(A,B); // сортировка матрицы А
- Print_Matr(A); // вывод отсортированной матрицы
- End.
Решение задачи: «Переставить столбцы матрицы в соответствии с ростом заданной характеристики»
textual
Листинг программы
- procedure BubbleSort(var c: Matr; var v: Vector);
- var i, j, k, p, t: Integer;
- begin
- p:=High(v);
- repeat
- i:=p; p:=Low(v);
- for j:=Low(v) to i-1 do
- if v[j+1]<v[j] then begin
- p:=j; t:=v[j]; v[j]:=v[j+1]; v[j+1]:=t;
- for k:=High(c) downto Low(c) do begin
- t:=c[k,j]; c[k,j]:=c[k,j+1]; c[k,j+1]:=t;
- end;
- end;
- until p=Low(v);
- end;
Объяснение кода листинга программы
Данный код представляет собой реализацию алгоритма сортировки пузырьком для матрицы и вектора.
В начале кода определяется переменная p
, которая будет использоваться для отслеживания последнего элемента в векторе. Затем в цикле повторяется следующая последовательность действий:
- Переменная
i
устанавливается равной значению переменнойp
. Переменнаяp
сбрасывается до значения первого элемента вектора. - Цикл
for
проходит по всем элементам вектора отLow(v)
доi-1
. Если текущий элемент в векторе меньше следующего, то происходит перестановка элементов. - Значение переменной
p
устанавливается равным индексу текущего элемента в векторе. Значение текущего элемента считывается и сохраняется в переменнойt
. Затем значение текущего элемента в векторе меняется местами с предыдущим элементом. - Для каждого элемента в матрице, начиная с верхнего левого угла и двигаясь вниз и влево, происходит перестановка элементов, если текущий элемент в векторе меньше следующего.
- После завершения цикла
for
переменнаяp
сбрасывается до значения первого элемента вектора. - Цикл повторяется до тех пор, пока значение переменной
p
не станет равным значению первого элемента вектора. Таким образом, данный код реализует алгоритм сортировки пузырьком для матрицы и вектора.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д