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

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

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

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 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