Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
wic

Упорядочивание столбцов матрицы и их элементов

29.09.2010, 14:44. Показов 1000. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Нужно реализовать программу следующего плана:
Дана матрица. Упорядочить элементы столбцов матрицы по неубыванию, а сами столбцы по
возрастанию минимальных элементов столбцов. Использую быструю сортировку в виде подпрограммы.

в общем код получился такой
C++
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include <iostream>
#include <cstdlib>
using namespace std;
void sort(int **mas,int x,int y,int col); //функция для сортировки элементов столбцов по возрастанию 
void getmas(int **mas,int &x,int &y);//функция вывода массива
int ** creat(int &n, int &m);// функция создания двумерного массива
 
int main()
{
  int n,m;
  cout<<"n="; cin>>n; m=n;
  
 int **a=new int*[n];
  a=creat(n,m);
  getmas(a,n,m);
  
  for (int i=0;i<m;i++)//запускаем функцию сортировки в цикле каждый раз передавай в параметр номер столбца i
  sort(a,0,m,i);
  
cout<<"\n";
  getmas(a,n,m);
 
  int *b=new int[n];
  int min=a[0][0];
   for (int i=0; i<n; ++i)
    {
        min=a[0][i];
    for (int j=0; j<m; ++j)
        if (a[j][i]<min)
      {
        min=a[j][i];
        }
        b[i]=min;
  }
for (int i=0; i<n; ++i)
cout<<"min= "<<b[i]<<endl;
 
 
  cin.get();
  delete []a;
  delete []b;
  return 0;
}
 
 void getmas(int **mas,int &x,int &y)
 {
     for (int i=0;i<x;i++)
       {
         for (int j=0;j<y;j++)
             {   cout<<"  ";
                 cout<<mas[i][j];
 
              }
              cout<<"\n";
             }
       return;
       }
 
 
int ** creat(int &n, int &m)
{
int **mas=new int *[n];
for (int i=0; i<n; ++i) mas[i]=new int [m];
  for (int i=0; i<n; ++i)
  for (int j=0; j<m; ++j)
   {cout<<"mas["<<i<<"]["<<j<<"]=";
    mas[i][j]=rand()%5;cout<<mas[i][j]<<"\n";
   }
cout<<"\n\n";
return mas;
}
 
void sort(int **mas,int left,int right, int col) //функция для сортировки элементов столбцов по возрастанию 
{
 
  int i,j;
  int x,y;
  i=left;
  j=right;
  x=mas[(left+right)/2][col];
  do
    {
    while ((mas[i][col]<x) &&  (i<right)) i++;
    while ((mas[j][col]>x) &&  (j>left)) j--;
     if(i<=j)
     {
         y=mas[i][col];
         mas[i][col]=mas[j][col];
         mas[j][col]=y;
         i++;
         j--;
     }
     }
     while (i<=j);
     if (left<j) sort(mas,left,j,col);
     if (i<right) sort(mas,i,right,col);
 
 
}
в общем sort работает не верно... подскажите в чем касяк плз.

Добавлено через 2 часа 4 минуты
еще может кто знает как реализовать следующую задачу
В матрице расположить элементы, расположенные ниже главной диагонали, по убыванию их абсолютных значений. Использовать сортировку Шелла, реализовав метод в виде подпрограммы.
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.09.2010, 14:44
Ответы с готовыми решениями:

Упорядочивание столбцов матрицы по невозрастанию
Дана квадратная матрица А порядка N. Упорядочить столбцы матрицы по невозрастанию. Ребят что значит упорядочивание по невозрастанию?

Упорядочивание столбцов матрицы, где ошибка?
Добрый вечер, подскажите где ошибка. Есть 4 числа. 6,28,496,8128(совершенные числа). Если в матрице есть эти числа, то нужно отсортировать...

Подпрограммы: вычесть из элементов нечетных столбцов значения элементов четных столбцов матрицы
Найти количество 0 в матрице. Вычитание из элементов нечетных столбцов значений элементов четных столбцов. Вывести получившуюся...

2
Бродяга
 Аватар для dihlofos
315 / 269 / 56
Регистрация: 27.08.2010
Сообщений: 553
29.09.2010, 14:49
А у вас ошибку при выполнении не выдаёт? Вы вызываете функцию:
C++
1
sort(a,0,m,i);
И там обращаетесь к элементу массива с индексом m, которого не существует. Правильней будет уж тогда:
C++
1
sort(a,0,m-1,i);
0
wic
29.09.2010, 17:21
это я понял. меня интересует теперь больше вторая задача...

Добавлено через 1 час 15 минут
вот реализовал сортировку шеллом. а как это сделать для элементов ниже главной строки не могу понять. вот код, кто может помогите уже все перепробовал.

C++
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <iostream>
#include <cstdlib>
using namespace std;
void getmas(int **mas,int &x,int &y);
void shellSort(int **a, int size,int col);
int increment(int inc[], int size);
int ** creat(int &n, int &m);
int main()
{
  int n,m;
  cout<<"n="; cin>>n; m=n;
  int **a=new int*[n];
  a=creat(n,m);
  getmas(a,n,m);
  for (int i=0;i<n;i++)
    shellSort(a,n,i);
 
      cout<<"\n";
      getmas(a,n,m);
 
}
void getmas(int **mas,int &x,int &y)
 {
     for (int i=0;i<x;i++)
       {
         for (int j=0;j<y;j++)
             {   cout<<"  ";
                 cout<<mas[i][j];
 
              }
              cout<<"\n";
             }
       return;
       }
 
 
int ** creat(int &n, int &m)
{
int **mas=new int *[n];
for (int i=0; i<n; ++i) mas[i]=new int [m];
  for (int i=0; i<n; ++i)
  for (int j=0; j<m; ++j)
   {cout<<"mas["<<i<<"]["<<j<<"]=";
    mas[i][j]=rand()%5;cout<<mas[i][j]<<"\n";
   }
cout<<"\n\n";
return mas;
}
 /**************************************/
 void shellSort(int **a, int size,int col) {
 int inc, i, j, seq[40];
 int s;
 //j=col;
 /* вычисление последовательности приращений */
 s = increment(seq, size);
 while (s >= 0) {
  /* сортировка вставками СЃ инкрементами inc[]  */
  inc = seq[s--];
  for (i = inc; i < size; i++) {
   int temp = a[i][col];
   for (j = i-inc; (j >= 0) && (a[j][col] < temp); j -= inc) {
    a[j+inc][col] = a[j][col];
   }
   a[j+inc][col]= temp;
  }
 }
/* for(i = 0; i < size; ++i){
      for(int c=0;c<size;c++){
     cout<<("%d ", a[i][c])<<"  ";}
     cout<<"\n";
 }*/
 
}
int increment(int inc[], int size) {
 int p1, p2, p3, s;
 
 p1 = p2 = p3 = 1;
 s = -1;
 do {
  if (++s % 2) {
   inc[s] = 8*p1 - 6*p2 + 1;
  }
  else {
   inc[s] = 9*p1 - 9*p3 + 1;
   p2 *= 2;
   p3 *= 2;
  }
  p1 *= 2;
 }
 while(3*inc[s] < size);
 
 return s > 0 ? --s : 0;
}
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.09.2010, 17:21
Помогаю со студенческими работами здесь

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

Упорядочивание строк матрицы по возрастанию значений сумм их элементов
Всем привет! на С++ пишу не больше года и то, т.к. еще на 1-м курсе, то и двух недель практики не набралось) заданием было написать...

Отсортировать номера столбцов матрицы по убыванию сумм элементов столбцов
Дана квадратная матрица размером n x n, содержащая вещественные числа. Определить сумму элементов в каждом столбце матрицы и упорядочить...

Вычислить сумму всех элементов четных столбцов и произведение всех элементов нечетных столбцов матрицы
Вычислить сумму всех элементов четных столбцов и произведение всех элементов нечатных столбцов в двумерном массиве А вещественных чисел

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru