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

Сортировка элементов матрицы "треугольником" - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Детерминированные циклы http://www.cyberforum.ru/cpp-beginners/thread668321.html
Здравствуйте. Я студент-заочник...с языком С++ не работал раньше, поэтому не знаю его вообще... Мне по заданию Дано натуральное число N и вещественное число x. Вычислить(картинка прилагается внизу). Помогите в решении уважаемые форумчане. Спасибо заранее тому, кто отзовется в решении.
C++ Создание клиент-серверного приложения Доброго дня. Необходимо написать программу обращения матрицы, она должна быть клиент серверной, то есть, пользователь вводит данные в клиентской форме, а в серверной части они обрабатываются и клиенту отсылается результат. Никогда не реализовывал клиент серверные приложения, поэтому прошу подсказать мне литературу, дать какие-ибо наводки по поводу того, в какую сторону вообще мне думать, про что... http://www.cyberforum.ru/cpp-beginners/thread668318.html
C++ Условие проверки, если делитель =0, то операция невозможна
Написать условие проверки, если делитель =0, то операция невозможна, иначе получить частное.
Свойство Image C++
какое свойство нужно задать элементу Image, ширина и высота которого 300x300, чтобы в него вписалась большая картинка (несколько Мегапикселей)??
C++ Разветвляющиеся алгоритмы. Одномерные массивы http://www.cyberforum.ru/cpp-beginners/thread668294.html
Доброго времени суток. Я учусь на заочке, а там сами знаете как учат. Так вот дали задание, где надо 1.Определить, угрожает ли слон, расположенный на поле (n1,m1) шахматной доски, фигуре, расположенной на поле (n2,m2). (n1,m1, n2,m2 – натуральные числа от 1 до 8). 2.Сформировать целочисленный массив X (N), элементами которого являются случайные числа из диапазона . Определить, сколько раз в...
C++ Получить целочисленную матрицу Доброго времени суток, прощу помощи не могу понять тему про матрицы... Сильно не кричите:) Получить целочисленную матрицу Aij i=1...5 j=1....6 , для которой Aij=i+2j Думал два часа, ничего не придумал, конспект перечитал два раза...:( Вот что получилось с каких-то найденных данных (что делал, не знаю:wall:) #include <iostream.h> #include <stdlib.h> #include <time.h> подробнее

Показать сообщение отдельно
lowercase
212 / 201 / 34
Регистрация: 09.05.2012
Сообщений: 494

Сортировка элементов матрицы "треугольником" - C++

10.10.2012, 22:24. Просмотров 761. Ответов 8
Метки (Все метки)

Здраствуйте. Есть матртца размера N, нужно на главной диагонали сделать нули, а елементы которые остались побоках диагонали отсортировать "треугольником"(если повенуть матрицу на 45% против часовой стрелки то над диагональю будет треугольник) чобы на верху треугольника был елемент с найменьшим значением, потом в каждом новом ряду елементы возрастали слева на право. Вобще сортировка вроде похожа на зизагом но не то
Например есть матрица:
0 1 5 4
3 2 7 6
3 0 1 4
1 3 4 2
должно быть вот так:
0 5 4 1
3 0 6 4
1 3 0 7
0 3 4 0
у меня программа сортирует но только в рамках одного "строчки" треугольника, то есть, вместо должного получается вот так:
0 1 5 4
4 0 4 6
3 3 0 7
1 3 0 0
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
#include <stdio.h>
#define N 4
 
void print_matrix(int x[N][N]){
    int i, j;
    for(i = 0; i < N; i++)
        for(j = 0; j < N; j++)
            printf("%d%s", x[i][j], j == N - 1 ? "\n" : " ");
}
void swap(int* x, int* y){
    int t = *x;
    *x= *y;
    *y = t;
}
int main(){
    int x[N][N] = {
        { 0, 1, 5, 4 },
        { 3, 2, 7, 6 },
        { 3, 0, 1, 4 },
        { 1, 3, 4, 2 },
    };
    print_matrix(x);
    int i, j, k, ci, cj;
    for(i = 0; i < N; i++)
        x[i][i] = 0;
    printf("\n");
 
    for(k = 0; k < N; k++)
        for(i = 0, j = N - k; i < k && j < N; i++, j++)
            for(ci = i, cj = j; ci < k && cj < N; ci++, cj++){
                if(x[ci][cj] < x[i][j])
                    swap(&x[ci][cj], &x[i][j]);
 
                if(x[cj][ci] > x[j][i])
                    swap(&x[cj][ci], &x[j][i]);
            }
 
    print_matrix(x);
    getch();
}
Помогите отсортировать матрицу, или каким нибудь советом, по поводу того, как это можно сделать.

Добавлено через 21 минуту
только что определил диапазоны индексов масива для циклов:
i,j,k уже было, вот они:
k = (0, n - 1)
i = (0, k)
j = (n - k, n);
при чем i и j должны меняся синхронно.
дальше таким образом нужно сравнивать каждый елемент x[i][j] с остальными елементами, x[ci][cj](как при обычной сортировке), диапазон ci = (0, n - 1), для каждого ci, cj = (ci + 1, n)
итого получаю такую струтуру циклов:
C
1
2
3
4
5
6
7
8
9
for(k = 0; k < N; k++)
    for(i = 0, j = N - k; i < k && j < N; i++, j++)
        for(ci = 0; ci < N - 1; ci++)
            for(cj = ci + 1; cj < N; cj++){
                if(x[ci][cj] < x[i][j])
                    swap(&x[ci][cj], &x[i][j]);
                if(x[cj][ci] > x[j][i])
                    swap(&x[cj][ci], &x[j][i]);
        }
но тут вот вчем загвоздка: независимо от того где я нахожусь(i, j), сравниваются также элементы которые уже были отсортированы и стоят на нужных местах. то есть, например, я сначало в правый верхний угол (x[0][3]) записал минимальный елемент. далее, по алгоритму я выбераю, например, елемент x[0][2], и опять получается, что сравниваю со свеми подряд, включая тот минимальный в правом вверхнем углу.
вот собсно и проблемка: я не знаю как пропускать предидущие елементы
тут у меня только одна идея: создать масив в котором будут записыватся индексы уже прошедших елементов.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru