Форум программистов, компьютерный форум CyberForum.ru

Элементы массива по возрастанию - C++

Восстановить пароль Регистрация
 
GaDinka
1 / 1 / 0
Регистрация: 01.02.2011
Сообщений: 64
11.02.2011, 22:59     Элементы массива по возрастанию #1
И опять здравствуйте! За эту неделю уже 4 (или даже 5) раз обращаюсь за помощью. Теперь нужно разобраться с задачей на двумерные массивы. Суть состоит с том, что элементы главной диагонали нужно расположить по возрастанию. У меня пока идёт только сам цикл, а вот полностью оформить программу мысли не доходят.
Вот мой код

C++
1
2
3
4
5
for(int i=0;i<n;i++){
 for(int j=0;j<n;j++){
  if (a[i][i]<a[j][j]) {int t=a[i][i];a[i][i]=a[j][j];a[j][j]=a[i][i];}
 }
}
Снова надеюсь на вас очень! Заранее огромное спасибо!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
HighPredator
 Аватар для HighPredator
5347 / 1730 / 320
Регистрация: 10.12.2010
Сообщений: 5,112
Записей в блоге: 3
11.02.2011, 23:30     Элементы массива по возрастанию #2
Давайте разберем по-порядку. Каковы особенности главной диагонали? Индексы ее элементов равны. Задача состоит в том чтобы упорядочить эту самую диагональ по возрастанию. Другие элементы не нужны. Таким образом из всей матрицы нас интересуют только элементы вида a[i][i], где i=1..N. Что сводит задачу к сортировке обычного массива по во возрастанию.
Итак смотрим в сети любой алгоритм сортировки и используем с учетом того что вместо одномерного массива имеем двумерный. Надеюсь доступно объяснил.
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
11.02.2011, 23:37     Элементы массива по возрастанию #3
Кто же будет делать сам, если можно посмотреть
под кат
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
#include <algorithm>
#include <cstdlib>
#include <ctime>
#include <cstdio>
 
int main(int argc, char *argv[]) {
  srand(time(NULL));
  const int k_array_size = 10;
  int array[k_array_size][k_array_size];
 
  for (int i = 0; i < k_array_size; ++i) {
    for (int j = 0; j < k_array_size; ++j)
      printf("%3d", array[i][j] = rand() % 100);
    printf("\n");
  }
  printf("\n");
 
  int diagonal[k_array_size];
  for (int i = 0; i < k_array_size; ++i)
    diagonal[i] = array[i][i];
  std::sort(diagonal, diagonal + k_array_size);
  for (int i = 0; i < k_array_size; ++i)
    array[i][i] = diagonal[i];
 
  for (int i = 0; i < k_array_size; ++i) {
    for (int j = 0; j < k_array_size; ++j)
      printf("%3d", array[i][j]);
    printf("\n");
  }
  return 0;
}
!?
MILAN
 Аватар для MILAN
883 / 777 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
11.02.2011, 23:42     Элементы массива по возрастанию #4
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
#include <iostream>
#include <ctime>
 
using namespace std;
 
const int N=5;
 
void output(int mat[][N])
{
    for(int i=0; i<N; i++)
    {
        for(int j=0; j<N; j++)
        {
            cout<<mat[i][j]<<"  ";
        }
      cout<<endl;
    }
}
 
int main()
{
    srand(static_cast<int>(time(NULL)));
    int tmp;
    int mat[N][N];
    cout<<"Matrix"<<endl;
     for(int i=0; i<N; i++)
     {
         for(int j=0; j<N; j++)
         {
             mat[i][j]=rand()%99;
         }
     }
     output(mat);
     for(int i=0; i<N; i++)
     {
         for(int k=0; k<N; k++)
         {
           if(mat[i][i]<mat[k][k])
             {
               tmp=mat[i][i];
               mat[i][i]=mat[k][k];
               mat[k][k]=tmp;
             }
         }
     }
     cout<<endl<<"Result "<<endl;
     output(mat);
     system("pause");
     return 0;
}
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
11.02.2011, 23:55     Элементы массива по возрастанию #5
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
#include<iostream>
#include<iomanip>
#define N 4
using namespace std;
 
int main(){
    int mas[N][N]{{9,4,-3,7}, {-4,-5,1,-6}, {0,5,-33,0}, {3,-6,1,0}}, tmp, i, j;
    for(i=0; i<N; i++){
        for(j=0; j<N; j++){
            cout<<setw(3)<<mas[i][j]<<"  ";
        }
        cout<<"\n\n";
    }
    cout<<"\n\n";
    for(i=0; i<N; i++){
        tmp=mas[i][i];
        for(j=i-1; j>=0&&mas[j][j]>tmp; --j){
            mas[j+1][j+1]=mas[j][j];
        }
        mas[j+1][j+1]=tmp;
    }
    for(i=0; i<N; i++){
        for(j=0; j<N; j++){
            cout<<setw(3)<<mas[i][j]<<"  ";
        }
        cout<<"\n\n";
    }
}
Yandex
Объявления
11.02.2011, 23:55     Элементы массива по возрастанию
Ответ Создать тему
Опции темы

Текущее время: 06:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru