Перегруженный Оператор >> для сдвига столбцов матрицы на K позиций
Не могу реализовать оператор >> для сдвига столбцов матрицы на K. Позиций. Общее задание звучит так:
1 В матрице С найти сумму элементов и переменную в которой будет эта сумма приводите к типу int чтобы для нее можно было произвести побитовую инверсию. В результате получаем целое число.
2 Для матрицы А циклический сдвиг столбцов вправо на количество позиций, вычисленное в пункте один, получая матрицу А1
3 В матрице В и матрице А находим максимальные элементы, а из них выбираем минимальный, который приводим к целому числу.
4 Для полученной в п.2 матрицы А1 производим циклический сдвиг столбцов вправо на количество позиций полученных в п.3.
Прилагаю код: Извиняюсь за ссылку с cpp проектом, а за не код, редактор не даёт ввести корректно код целиком
Ответы (1 шт):
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 - это то, что бросилось в глаза. Специально весь код не смотрел.