0 / 0 / 0
Регистрация: 19.10.2021
Сообщений: 6
1

Упорядочить столбцы массива по убыванию сумм элементов столбцов методом пузырька

15.03.2023, 16:21. Показов 581. Ответов 7

Студворк — интернет-сервис помощи студентам
Упорядочите столбцы массива по убыванию сумм элементов столбцов методом пузырька.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.03.2023, 16:21
Ответы с готовыми решениями:

Вычислить сумму элементов каждого столбца массива. Упорядочить столбцы массива по убыванию сумм элементов столбцов.
Заполнить двумерный числовой массив В целыми числами. Вычислить сумму элементов каждого столбца...

Упорядочить столбцы матрицы по убыванию максимальных элементов столбцов методом линейного выбора с обменом
Можете проверить? Что-то не так Дана действительная матрица A размерности . Если количество...

Упорядочить элементы столбцов матрицы по убыванию, а столбцы по убыванию модуля произведения четных элементов столбцов
На контрольной дали задачу. Не знаю как написать. Помогите!:help: Дана матрица действительных...

Упорядочить столбцы массива по возрастанию сумм элементов столбцов методом Хоара
Добрый день, необходимо решить задачу, спасибо за понимание. "Упорядочьте столбцы массива по...

7
0 / 0 / 0
Регистрация: 19.10.2021
Сообщений: 6
16.03.2023, 17:02  [ТС] 2
Помогите, пожалуйста, исправить ошибку, она в процедуре Puzir, нужно связать сумму столбцов с ней так, чтобы она сортировалась.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
Const n=4; m=5; 
Type mas = array [1..n,1..m] of integer; sum = array[1..M] of integer;
Var a: mas; 
 
Procedure Laba3 (Var t:mas); 
Var i, j: integer; 
begin 
randomize; 
writeln ('элементы массива: '); 
for i:=1 to n do 
for j:= 1 to m do 
begin 
t[i,j]:=random(60); 
write(t[i,j], ' ') 
end; 
end; 
 
Procedure Print (t: mas); 
Var i,j: integer; 
begin
 writeln ('. Массив: ');
begin 
for i:=1 to n do 
begin 
for j:=1 to m do 
write (t[i,j]:5 , ' '); 
writeln; 
end; 
end; 
end; 
 
Procedure Summa(t: mas); 
Var i,j: integer; 
mat:=a; 
sum: integer; 
begin 
 writeln('Сумма столбцов:'); 
 for j:=1 to m do begin // подсчет сумм 
 sum := 0; 
 for i:=1 to n do 
 sum := sum + mat[i,j]; 
 write(sum:5); 
 
 end; 
 end; 
 
 
   Procedure Puzir (t: mas); 
Var i, j, k: integer; 
R: array[1..M] of integer;
const M=10; 
begin
  writeln;
 
    for i := 1 to M-1 do
        for j := 1 to M-i do
            if sum[j] > sum[j+1] then begin
                k := sum[j];
                sum[j] := sum[j+1];
                sum[j+1] := k
            end;
 
    write('Отсортированный: ');
    for i := 1 to M do
        write (sum[i]:3);
    writeln;
end;
 
 
 
 
 
Begin 
Laba3 (a); 
Print(a); 
Summa(a);
Puzir (t: mas);  
end.
0
Модератор
876 / 406 / 225
Регистрация: 10.11.2019
Сообщений: 823
17.03.2023, 18:30 3
Лучший ответ Сообщение было отмечено Azaliyaaa как решение

Решение

Мне не нравится пузырьковая сортировка в виде двух циклов,
я использую сортировку, которая по сути тоже пузырьковая.
Проблема этой задачи в том, что надо сортировать столбцы по значениям сумм,
а не сами суммы.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
Const m=5;n=4;
Type mas = array [1..m,1..n] of integer;
Var a: mas;
 
Procedure GenArray(Var t:mas);
Var i, j: integer;
begin
randomize;
for j:=1 to n do begin for i:= 1 to m do  t[i,j]:=random(60) end;
end;
 
Procedure Print (var t: mas);
Var i,j: integer;
begin
writeln ('Massiv:');
for j:=1 to n do
    begin
    for i:=1 to m do write (t[i,j]:5 , ' ');writeln;
    end;
end;
 
Function Summa(var t: mas;x:integer):integer;
Var j: integer;
Var sum: integer;
begin
 sum:=0;
 for j:=1 to n do sum:=sum+t[x,j];
 Summa:=sum;
end;
 
Procedure PrintSum(var t:mas);
var i:integer;
begin
writeln ('Summy:');
for i:=1 to m do write (Summa(t,i):5 , ' ');
writeln;
end;
 
procedure SwapCol(var t: mas; x1:integer; x2:integer);
Var j: integer;
Var tmp: integer;
begin
for j:=1 to n do begin tmp:=t[x2,j];t[x2,j]:=t[x1,j];t[x1,j]:=tmp end;
end;
 
procedure BubSort(var t: mas);
var s1,s2,i:integer;
var exflag:boolean;
begin
repeat
    exflag:=true;
    for i:=1 to m-1 do
        begin
        s1:=Summa(t,i);s2:=Summa(t,i+1);
        if (s1<s2) then begin exflag:=false;SwapCol(t,i,i+1) end;
        end; {for}
until exflag=true;
end;
 
Begin
GenArray(a);
Print(a);
PrintSum(a);
writeln('Sorting...');
BubSort(a);
Print(a);
PrintSum(a);
end.
1
0 / 0 / 0
Регистрация: 19.10.2021
Сообщений: 6
17.03.2023, 20:32  [ТС] 4
Спасибо вам большое! Но у меня появился вопрос, что делает процедура SwapCol?
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7534 / 4394 / 2785
Регистрация: 22.11.2013
Сообщений: 12,588
Записей в блоге: 1
18.03.2023, 09:10 5
Лучший ответ Сообщение было отмечено Azaliyaaa как решение

Решение

Swap - обмен, Col[umn] - колонка. Меняет местами колонки.

qbfan,
вижу, что хотели написать:
Pascal
46
47
48
49
50
51
52
53
54
55
56
57
58
59
procedure BubSort(var t: mas);
var
  i: Integer;
  exflag: Boolean;
begin
  repeat
    exflag:=True;
    for i:=1 to m-1 do
      if Summa(t,i)<Summa(t,i+1) then begin
        exflag:=False;
        SwapCol(t,i,i+1);
      end;
  until exflag;
end;
Этот подход можно чуть улучшить в среднем случае, если запоминать не просто факт обмена, но и его позицию:
Сортировки

Кроме того, нет особой нужды платить временем исполнения за память при пересчете сумм:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
const m=5; n=4;
type
  TMatrix = array [1..m, 1..n] of Integer;
 
procedure BubSort(var t: TMatrix);
var
  i, j, k, nk: Integer;
  s: array [1..n] of Integer;
begin
  for j:=1 to n do begin
    s[j]:=0; for i:=1 to m do Inc(s[j],t[i,j]);
  end;
  k:=n;
  repeat
    nk:=k; k:=1;
    for j:=1 to nk-1 do
      if s[j]<s[j+1] then begin
        for i:=1 to m do begin
          k:=t[i,j]; t[i,j]:=t[i,j+1]; t[i,j+1]:=k;
        end;
        k:=s[j]; s[j]:=s[j+1]; s[j+1]:=k;
        k:=j;
      end;
  until k=1;
end;
1
0 / 0 / 0
Регистрация: 19.10.2021
Сообщений: 6
25.03.2023, 20:01  [ТС] 6
Можете, пожалуйста объяснить, для чего в процедуре сортировки exflag? Для чего его использовать? И почему вы решили взять boolean. Можете. пожалуйста, поподробнее объяснить эту процедуру.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7534 / 4394 / 2785
Регистрация: 22.11.2013
Сообщений: 12,588
Записей в блоге: 1
26.03.2023, 11:30 7
Цитата Сообщение от Azaliyaaa Посмотреть сообщение
для чего в процедуре сортировки exflag
Чтобы зафиксировать факт того, что была хотя бы одна перестановка столбцов.
Если ни одной перестановки не случилось, значит уже отсортировано и можно закругляться.

Чем это хорошо -- видно из описания. Чем плоха именно приведенная qbfan реализация -- нет смысла каждый раз добегать до m-1 столбца, на каждом шаге можно бежать как минимум на 1 столбец меньше, как максимум -- на 1 столбец меньше того, где была последняя перестановка.

Код с exflag приведен мною выше только чтобы показать, что временные переменные для результатов функций не нужны.
0
Модератор
876 / 406 / 225
Регистрация: 10.11.2019
Сообщений: 823
26.03.2023, 13:33 8
Цитата Сообщение от bormant Посмотреть сообщение
Чем плоха именно приведенная qbfan реализация -- нет смысла каждый раз добегать до m-1 столбца, на каждом шаге можно бежать как минимум на 1 столбец меньше, как максимум -- на 1 столбец меньше того, где была последняя перестановка.
Это у меня оптимизация по размеру кода, а не по быстродействию
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.03.2023, 13:33
Помогаю со студенческими работами здесь

Упорядочить (переставить) столбцы матриц по убыванию сумм отрицательных элементов столбцов
Даны две вещественные матрицы разной размерности. Используя подпрограммы, упорядочить (переставить)...

Упорядочить столбцы матрицы по невозрастанию сумм элементов столбцов методом простого обмена
дана действительная матрица , упорядочить столбцы матрицы по невозрастанию сумм элементов столбцов...

Упорядочить столбцы матрицы по невозрастанию сумм элементов столбцов методом простого обмена
дана действительная матрица , упорядочить столбцы матрицы по невозрастанию сумм элементов столбцов...

Упорядочить (переставить) столбцы массива по не убыванию значений последних элементов столбцов
Выполнить программу для N=3, M=4. Заполнение массива произвести с помощью датчика случайных чисел....

Упорядочить столбцы матрицы по убыванию сумм их элементов.
дана вещественная матрица размером 4*4. упорядочить ее столбцы по убыванию сумм их элементов.

Упорядочить элементы столбцов матрицы по убыванию, а сами столбцы по неубыванию минимальных элементов столбцов
Дана матрица Х. Упорядочить элементы столбцов матрицы по убыванию, а сами столбцы по неубыванию...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru