Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.03.2017, 09:35   #1
vladrrom
Пользователь
 
Регистрация: 14.12.2016
Сообщений: 54
По умолчанию Отсортировать диагонали матрицы параллельные побочной по возрастанию элементов методом выбора. - C++

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

Файл input.txt
Код:
23   54   65   -9
8     96   -4   -7
100  12   90   1
2      -1   4   -5
Моё решение (с ошибкой):
Код:
#include "fstream"
#include "iostream"
#include "iomanip"
 
using namespace std;
 
ifstream in("input.txt");
ofstream out("output.txt");
 
void sort(int *a, int n){
    int temp;
    int lowindex, lowkey;
    for (int i = 0; i < n - 1; i++){    
        lowkey = a[i];
        lowindex = i; 
        for (int j = i + 1; j < n; j++){
            if (a[j] < lowkey){
                lowkey = a[j];
                lowindex = j;
            }
        }
        temp = a[i];
        a[i] = a[lowindex];
        a[lowindex] = temp;
    }
}
 
int main(){
    int n, k, i, j;
    cout << "n=";  cin >> n;
    int a[10][10];
    for (int i = 0; i < n-1; i++){
        for (int j = 0; j < n-1; j++){
            in >> a[i][j];
        }
    }
    int b[10]; int c[10];
    for (k = 1; k < n - 1; k++){
        for (i = k, j = 0; i >= 0; i--, j++){
            b[j] = a[i][j];
        }
        sort(b, k + 1);
        for (i = k, j = 0; i >= 0; i--, j++){
            a[i][j] = b[j];
        }
        
        for (j = n - k, i = n - j + k - 1; i < n - 1; i++, j--){
            c[j] = a[i][j];
        }
        sort(c, k + 1);
        for (j = n - k, i = n - j + k - 1; i < n - 1; i++, j--){
            a[i][j] = c[j];
        }
    }
    for (int i = 0; i < n; i++){
        for (int j = 0; j < n; j++){
            out << a[i][j] << '\t';
        }
    }
    in.close();
    out.close();
    system("pause");
    return 0;
}
Пожалуйста исправьте или покажите, где ошибка.

Цель работы этой программы: получить матрицу, в которой отсортированы диагонали параллельные побочной по возрастанию.
Пример:
Код:
a[0][0] a[0][1] a[0][2] a[0][3]
a[1][0] a[1][1] a[1][2] a[1][3]
a[2][0] a[2][1] a[2][2] a[2][3]
a[3][0] a[3][1] a[3][2] a[3][3]
Следовательно выходная матрица будет строиться по данным элементам (сама побочная диагональ не учитывается):
Код:
a[1][0] a[0][1]
a[2][0] a[1][1] a[0][2]
a[1][3] a[2][2] a[3][1]
a[2][3] a[3][2]
vladrrom вне форума Ответить с цитированием
Старый 18.03.2017, 11:48   #2
vladrrom
Пользователь
 
Регистрация: 14.12.2016
Сообщений: 54
По умолчанию

Тема ещё актуальна.

P.S. в конце концов необходимо получить не матрицу, а отсортированные диагонали.
Например для input1:
Код:
1 2 3 4 5
6 7 8 9 1
2 3 4 5 6
7 8 9 1 2
3 4 5 6 7
Output будет
Код:
2 6
2 3 7
3 4 7 8
1 4 5 9
1 5 6
2 6
vladrrom вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задано прямоугольную матрицу отсортировать методом выбора так, чтобы последовательность элементов была такой, как показано на схем kaktus12061998 Помощь студентам 4 28.01.2016 10:10
Найти сумму элементов матрицы главной и побочной диагонали...(( Анастасия01 Помощь студентам 4 30.06.2011 13:52
Отсортировать столбец с номером n_sort целочисленной матрицы М(4,4) по возрастанию элементов с исполльзов yulia_93 Паскаль, Turbo Pascal, PascalABC.NET 0 15.05.2011 16:51
Элементы выше побочной диагонали по возрастанию. rwss gle Паскаль, Turbo Pascal, PascalABC.NET 9 29.03.2011 20:18
Найти отношения суммы элементов главной диагонали и суммы элементов побочной диагонали квадратной матрицы Elmander Помощь студентам 2 21.06.2007 07:15