Перевернуть нечётные столбцы матрицы
Последняя функция почему-то переворачивает только один столбец, а в зависимости от размерности массива может вообще не перевернуть. Не могу понять в чём проблема, подскажите что нужно исправить.
#include <iostream>
#include <ctime>
using namespace std;
void out(int** a, int n, int t);
int** make(int row, int col);
int** swapvec(int** vec, int n, int t);
void main() {
setlocale(0, "");
srand(time(NULL));
//Размерность двумерного динамического массива
int cols, rows;
int** a = NULL;
int** b = NULL;
cout << "Введите количество строк:";
cin >> rows;
cout << "Введите количество столбцов: ";
cin >> cols;
system("cls");
//Создание массива
a = make(rows, cols);
b = a;
//Вывод массива
cout << "Двумерный массив:\n";
out(a, rows, cols);
//Транспонирование и вывод
//transpon(b, rows, cols);
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (j % 2 == 1) {
a = swapvec(a, rows, cols);
}
}
}
//Вывод транспонированной матрицы
out(b, rows, cols);
}
//Функция для вывода двумерного динамического массива
void out(int **a, int n, int t) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < t; j++) cout << a[i][j] << "\t";
cout << endl;
}
cout << endl;
}
//Функция для создания двумерного динамического массива
int** make(int row, int col) {
//Выделение памяти для массива
int** a = new int* [row];
for (int i = 0; i < row; i++) a[i] = new int[col];
//Заполнение массива рандомными уникальными числами
bool check;
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col;)
{
check = false;
int newRandomValue = rand() % (row * col);
for (int x = 0; x < row; x++)
{
for (int y = 0; y < col; y++)
{
if (a[x][y] == newRandomValue)
{
check = true;
break;
}
}
}
if (!check)
{
a[i][j] = newRandomValue;
j++;
}
}
}
return a;
}
//Функция для переворота столбцов
int** swapvec(int** mas, int n, int t)
{
for (int j = 1; j < t; j ++)
{
for (int i = 0; i < n / 2; i++)
{
int tmp = mas[i][j];
mas[i][j] = mas[n - 1 - i][j];
mas[n - 1 - i][j] = tmp;
}
return mas;
}
}
Ответы (1 шт):
Автор решения: Igor
→ Ссылка
for (int j = 0; j < cols; j++) {
if (j % 2 == 1) {
a = swapvec(a, rows, j);
}
}
int** swapvec(int** mas, int n, int t)
{
for (int i = 0; i < n / 2; i++)
{
int tmp = mas[i][t];
mas[i][j] = mas[n - 1 - i][t];
mas[n - 1 - i][t] = tmp;
}
return mas;
}