Как повернуть матрицу на 90 градусов c
Перейти к содержимому

Как повернуть матрицу на 90 градусов c

  • автор:

Как повернуть матрицу на 90 градусов c

Регистрация: 16.03.2011

Сообщений: 5

Поворот матрицы на 90 градусов. Что не так?

Здравствуйте. Скажите пожалуйста, что не так. ошибку выдает, ссылаясь на строчку randomize().
Задание: Заполнить матрицу случайными числами. Развернуть матрицу на 90 градусов по часовой стрелке

#include #include #define r 9 int Matr1[r][r]; /* матрица1 */ int Matr2[r][r]; /* матрица2 */ int main(void) < short i, j; /* индексы */ /* заполнение матрицы случайными числами */ randomize(); /* инициализация rand */ for (i=0; i
Nice_nastya
Посмотреть профиль
Найти ещё сообщения от Nice_nastya

Записки разработчика

Нужно было реализовать, код вообще -то не сложен, но тем не менее . Поворот матрицы по часовой стрелке.

#include #define n 10 using namespace std; int matr[n][n]; int main() < for(int i=0;i>matr[i][j]; int tmp; for(int i=0;i > >

Поворот против часовой стрелки

#include #define n 10 using namespace std; int matr[n][n]; int main() < for(int i=0;i>matr[i][j]; int tmp; for(int i=0;i > >

Поворот матрицы на 90 градусов

Рассмотрим алгоритм поворота матрицы на 90 градусов по часовой стрелке и против часовой стрелки. Этот алгоритм похож на транспонирование матрицы с тем отличием, что здесь для каждой точки одна из координат отображается зеркально.

// транспонирование матрицы — строки и колонки меняются местами swapped[j][i] = matrix[i][j]; // по часовой стрелке ↻ — строки отображаются зеркально rotated[j][i] = matrix[m-i-1][j]; // против часовой стрелки ↺ — колонки отображаются зеркально rotated[j][i] = matrix[i][n-j-1]; 

Напишем метод на Java для поворота матрицы < m×n >на 90 градусов. Дополнительный параметр задаёт направление поворота: по часовой стрелке или против часовой стрелки. Для примера возьмём прямоугольную матрицу < 4×3 >.

/** * @param m количество строк исходной матрицы * @param n количество колонок исходной матрицы * @param clock направление поворота: по часовой * стрелке ↻ или против часовой стрелки ↺ * @param matrix исходная матрица * @return повёрнутая матрица */ public static int[][] rotateMatrix(int m, int n, boolean clock, int[][] matrix)  // новая матрица, количества строк и колонок меняются местами int[][] rotated = new int[n][m]; // обходим строки исходной матрицы for (int i = 0; i  m; i++) // обходим колонки исходной матрицы for (int j = 0; j  n; j++) if (clock) // поворот по часовой стрелке ↻ rotated[j][i] = matrix[m-i-1][j]; else // поворот против часовой стрелки ↺ rotated[j][i] = matrix[i][n-j-1]; return rotated; > 
// запускаем программу и выводим результат public static void main(String[] args)  // исходные данные int m = 4, n = 3; int[][] matrix = <11, 12, 13>, 14, 15, 16>, 17, 18, 19>, 20, 21, 22>>; // поворачиваем матрицу и выводим результат outputMatrix("Исходная матрица:", matrix); outputMatrix("По часовой стрелке ↻:", rotateMatrix(m, n, true, matrix)); outputMatrix("Против часовой стрелки ↺:", rotateMatrix(m, n, false, matrix)); > 
// вспомогательный метод, выводит матрицу в консоль построчно public static void outputMatrix(String title, int[][] matrix)  System.out.println(title); for (int[] row : matrix)  for (int el : row) System.out.print(" " + el); System.out.println(); > > 
Исходная матрица: 11 12 13 14 15 16 17 18 19 20 21 22 По часовой стрелке ↻: 20 17 14 11 21 18 15 12 22 19 16 13 Против часовой стрелки ↺: 13 16 19 22 12 15 18 21 11 14 17 20 

© Головин Г.Г., Код с комментариями, 2021

Как повернуть матрицу на 90 градусов с разной размерностью?

Никак не могу сообразить, как повернуть матрицу с разной размерностью? Пытался вот так, но при смене ширины или высоты, все ломается.

newMatrix = new bool[h, w]; for (int i = 0; i < w; i++) < for (int j = 0; j < h; j++) < newMatrix [h - 1 - j, i] = oldMatrix[i, j]; >> 

Отслеживать
задан 28 июл 2017 в 14:04
190 3 3 серебряных знака 15 15 бронзовых знаков
если бы она была квадратной, то смоглы бы. инасче надо создавать новую матрицу
28 июл 2017 в 14:31
У вас нормальный алгоритм вроде, что конкретно ломается?
28 июл 2017 в 14:59
ошибка выхода за рамки массива. Все хорошо работает только для квадратных матриц
28 июл 2017 в 15:01
тут либо искусственно делать ее квадратной, либо создавать новую. советую 2 вариант
28 июл 2017 в 15:09

Приведите весь код. По приведенному фрагменту проблем с newMatrix не видно. Покажите как создаете oldMatrix

28 июл 2017 в 15:41

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Вот вам пример поворота двумерного массива на 90 градусов по и против часовой стрелке

 static void Main(string[] args) < int[,] array = new int[6, 5] < < 1,2,3,4 ,5>, < 5,6,7,8,6 >, < 9,0,1,2 ,7>, < 3,4,5,6,8 >, < 3,4,5,6,8 >, < 3,4,5,6,8 >>; for (int i = 0; i < array.GetLength(0); i++) < for (int k= 0; k < array.GetLength(1); k++) < Console.Write(array[i,k]+ " "); >Console.WriteLine(); > Console.WriteLine("Rotate Matrix Clockwise"); int[,] rotated = RotateMatrixClockwise(array); for (int i = 0; i < rotated.GetLength(0); i++) < for (int k = 0; k < rotated.GetLength(1); k++) < Console.Write(rotated[i, k]+ " "); >Console.WriteLine(); > Console.WriteLine("Rotate Matrix AntiClockwise"); int[,] rotated1 = RotateMatrixAntiClockwise(array); for (int i = 0; i < rotated1.GetLength(0); i++) < for (int k = 0; k < rotated1.GetLength(1); k++) < Console.Write(rotated1[i, k]+ " "); >Console.WriteLine(); > > public static int[,] RotateMatrixClockwise(int[,] oldMatrix) < int[,] newMatrix = new int[oldMatrix.GetLength(1), oldMatrix.GetLength(0)]; int newColumn, newRow = 0; for (int oldColumn = oldMatrix.GetLength(1) - 1; oldColumn >= 0; oldColumn--) < newColumn = 0; for (int oldRow = 0; oldRow < oldMatrix.GetLength(0); oldRow++) < newMatrix[newRow, newColumn] = oldMatrix[oldRow, oldColumn]; newColumn++; >newRow++; > return newMatrix; > public static int[,] RotateMatrixAntiClockwise(int[,] oldMatrix) < int[,] newMatrix = new int[oldMatrix.GetLength(1), oldMatrix.GetLength(0)]; int newColumn, newRow = 0; for (int oldColumn = 0; oldColumn < oldMatrix.GetLength(0) - 1; oldColumn++) < newColumn = 0; for (int oldRow = oldMatrix.GetLength(1) ; oldRow >=0 ; oldRow--) < newMatrix[newRow, newColumn] = oldMatrix[oldRow, oldColumn]; newColumn++; >newRow++; > return newMatrix; > 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *