Не могу поменять местами элементы матрицы. Не работает Swap

Поменять местами элементы, симметричные относительно ее побочной диагонали. Функция swap не работает. Пробовал менять с дополнительной переменной и без, не работает

#define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    #include <Windows.h>
    
    
    int main()
    {
        SetConsoleCP(1251);
        SetConsoleOutputCP(1251);
        const int SIZE = 5;
        FILE* file;
        FILE* file_2;
    
        file = fopen("IMV-LR5.txt", "r");
        if (file == nullptr)
        {
            printf("Файл не відкрився!");
            exit(1);
        }
    
        int temp;
        int** matrix = new int* [SIZE];
        for (int i = 0; i < SIZE; i++)
        {
            matrix[i] = new int[SIZE];
        }
    
        
        file_2 = fopen("IMV-LR5-2.txt", "w");
    
        
    
        fprintf(file_2, "Матриця:\n");
        printf("Матриця:\n");
        fseek(file, 360, SEEK_SET);
        for (int i = 0; i < SIZE; i++)
        {
            printf("\n");
    
            for (int j = 0; j < SIZE; j++)
            {
                fscanf(file, "%d", &temp);
                matrix[i][j] = temp;
            }
        }
        printf("\n");
        /*
        for (int i = 0; i < SIZE; i++)
        {
            printf("\n");
            fprintf(file_2, "\n");
    
            for (int j = 0; j < SIZE; j++)
            {
    
                matrix[i][j] = matrix[i][j] - matrix[SIZE - j - 1][SIZE - i - 1];
    
    
                fprintf(file_2, "%4d ", matrix[i][j]);
                printf("%4d ", matrix[i][j]);
    
            }
        }
        */
        
    
        for (int i = 0; i < SIZE; i++)
        {
            printf("\n");
            fprintf(file_2, "\n");
            for (int j = 0; j < SIZE; j++)
            {
                std::swap(matrix[i][j], matrix[SIZE - j - 1][SIZE - i - 1]);
    
                fprintf(file_2, "%4d ", matrix[i][j]);
                printf("%4d ", matrix[i][j]);
            }
        }
        fclose(file);
        fclose(file_2);
    }

Файл с коротого читает:

В:18
1. Створити  квадратну  матрицю  розміром  5х5,  значення  елементів  якої заповнити за допомогою генератору випадкових чисел.
Записати створену матрицю в файл для подальшої обробки.
2. Зчитати матрицю з файлу й замінити всі елементи, симитричні щодо її побічної діагоналі. 
3. Результат обчислення з відповідними коментарями записати в новий файл

   2 -13   7   5   0
   6  15 -15   0  17
   9  -3 -10  -4   0
  12  10   4  -4   2
   0  -6  16  -4   6

Ответы (1 шт):

Автор решения: Harry

Да работает swap, работает...

Что вы делаете?

 for (int i = 0; i < SIZE; i++)
 {
    for (int j = 0; j < SIZE; j++)
    {
            std::swap(matrix[i][j], matrix[SIZE - j - 1][SIZE - i - 1]);

Т.е., допустим, вы сначала, при i = 2 и j = 1 обмениваете

swap(matrix[2][1],matrix[3][2])

А потом, при итерации i = 3 и j = 2 обмениваете снова:

swap(matrix[3][2],matrix[2][1])

возвращая элементы на свои старые места. Вот и вся причина...

Ладно, вот что надо сделать:

 for (int i = 0; i < SIZE; i++)
 {
    for (int j = 0; j < SIZE; j++)
    {

заменить на

 for (int i = 0; i < SIZE; i++)
 {
    for (int j = 0; j < SIZE-i; j++)
    {
→ Ссылка