Перегруженный Оператор >> для сдвига столбцов матрицы на K позиций

Не могу реализовать оператор >> для сдвига столбцов матрицы на K. Позиций. Общее задание звучит так:

1 В матрице С найти сумму элементов и переменную в которой будет эта сумма приводите к типу int чтобы для нее можно было произвести побитовую инверсию. В результате получаем целое число.

2 Для матрицы А циклический сдвиг столбцов вправо на количество позиций, вычисленное в пункте один, получая матрицу А1

3 В матрице В и матрице А находим максимальные элементы, а из них выбираем минимальный, который приводим к целому числу.

4 Для полученной в п.2 матрицы А1 производим циклический сдвиг столбцов вправо на количество позиций полученных в п.3.

Прилагаю код: Извиняюсь за ссылку с cpp проектом, а за не код, редактор не даёт ввести корректно код целиком


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

Автор решения: Harry
void reverse(int** matrix, int n, int m,
             int start, int stop)
{
    for(int i = 0; i < n; ++i)
    {
        for(int b = start, e = stop; b < e; ++b, --e)
        {
            int tmp = matrix[i][b];
            matrix[i][b] = matrix[i][e];
            matrix[i][e] = tmp;
        }
    }
}
Matr operator >> (int K) //Оператор сдвига матрицы на K позиций вправо
{
    cout << "Операция >> \n" << endl;
    Matr z(*this);
    reverse(z.X,z.n,z.m,0,z.m-K-1);
    reverse(z.X,z.n,z.m,z.m-K,z.m-1);
    reverse(z.X,z.n,z.m,0,z.m-1);
    return z;
}

....

A1 = A >> 2; //Вызов оператора, смеющего матрицу на К значений, и создаюего матрицу А1
A1.PrintAll();

Примерно так. Но у вас есть и другие ошибки, например, в деструкторе вы освобождаете не всю память, используете параллельно delete и free, не совсем последовательно работаете с const - это то, что бросилось в глаза. Специально весь код не смотрел.

→ Ссылка