Не могу поменять местами элементы матрицы. Не работает 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++)
{