Поворот матрицы на 180 градусов по часовой стрелке — это одна из распространенных операций над матрицами в программировании и алгоритмах. Эта операция позволяет изменить порядок элементов матрицы так, чтобы она была перевернута на 180 градусов, что может быть полезно в различных прикладных задачах. Например, это может быть полезно при решении задач связанных с обработкой изображений, игровой графикой, а также при решении задач, связанных с анализом данных. В этой статье мы рассмотрим различные способы реализации программы поворота матрицы на 180 градусов по часовой стрелке на разных языках программирования.
Теория
Поворот матрицы на 180 градусов по часовой стрелке можно выполнить с помощью следующего алгоритма:
- Создайте новую матрицу с такими же размерами, как и исходная.
- Пройдитесь по элементам исходной матрицы внешним циклом, и для каждого элемента (i, j) выполните следующие шаги:
- a. Найдите соответствующий элемент в новой матрице, который должен находиться на позиции (i, j) в новой матрице после поворота на 180 градусов.
- b. Запишите значение элемента из исходной матрицы в найденную позицию новой матрицы.
- После завершения этой операции, новая матрица будет представлять собой исходную матрицу, повернутую на 180 градусов по часовой стрелке.
C++
Для поворота матрицы на 180 градусов по часовой стрелке в C++ можно использовать следующий код. В этом примере мы создадим функцию, которая будет выполнять эту операцию для квадратной матрицы.
#include <iostream> #include <vector> // Функция для поворота матрицы на 180 градусов по часовой стрелке void rotateMatrixClockwise180(std::vector<std::vector<int>>& matrix) { int n = matrix.size(); // Переворачиваем каждую строку матрицы for (int i = 0; i < n; i++) { std::reverse(matrix[i].begin(), matrix[i].end()); } // Транспонируем матрицу for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { std::swap(matrix[i][j], matrix[j][i]); } } } // Функция для вывода матрицы на экран void printMatrix(const std::vector<std::vector<int>>& matrix) { int n = matrix.size(); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { std::cout << matrix[i][j] << " "; } std::cout << std::endl; } } int main() { std::vector<std::vector<int>> matrix = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; std::cout << "Исходная матрица:" << std::endl; printMatrix(matrix); rotateMatrixClockwise180(matrix); std::cout << "Матрица после поворота на 180 градусов по часовой стрелке:" << std::endl; printMatrix(matrix); return 0; }
В этом коде мы сначала переворачиваем каждую строку матрицы, а затем транспонируем ее. Это приводит к повороту матрицы на 180 градусов по часовой стрелке.
C#
using System; class Program { // Функция для поворота матрицы на 180 градусов по часовой стрелке static void RotateMatrixClockwise180(int[,] matrix) { int n = matrix.GetLength(0); // Переворачиваем каждую строку матрицы for (int i = 0; i < n; i++) { Array.Reverse(matrix, i, 1); } // Транспонируем матрицу for (int i = 0; i < n; i++) { for (int j = 0; j < i; j++) { int temp = matrix[i, j]; matrix[i, j] = matrix[j, i]; matrix[j, i] = temp; } } } // Функция для вывода матрицы на экран static void PrintMatrix(int[,] matrix) { int n = matrix.GetLength(0); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { Console.Write(matrix[i, j] + " "); } Console.WriteLine(); } } static void Main() { int[,] matrix = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; Console.WriteLine("Исходная матрица:"); PrintMatrix(matrix); RotateMatrixClockwise180(matrix); Console.WriteLine("Матрица после поворота на 180 градусов по часовой стрелке:"); PrintMatrix(matrix); } }
Python
Этот код создает новую матрицу и заполняет ее значениями, поворачивая исходную матрицу на 180 градусов по часовой стрелке.
def rotate_matrix_180(matrix): # Определяем размеры матрицы rows = len(matrix) cols = len(matrix[0]) # Создаем новую матрицу, заполненную нулями rotated_matrix = [[0] * cols for _ in range(rows)] # Заполняем новую матрицу значениями, поворачивая исходную for i in range(rows): for j in range(cols): rotated_matrix[i][j] = matrix[rows - 1 - i][cols - 1 - j] return rotated_matrix # Функция для вывода матрицы на экран def print_matrix(matrix): for row in matrix: print(" ".join(map(str, row))) # Пример использования matrix = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ] print("Исходная матрица:") print_matrix(matrix) rotated_matrix = rotate_matrix_180(matrix) print("Матрица после поворота на 180 градусов по часовой стрелке:") print_matrix(rotated_matrix)
Java
В этом коде мы создаем новую матрицу и заполняем ее значениями, поворачивая исходную матрицу на 180 градусов по часовой стрелке.
public class MatrixRotation { public static void main(String[] args) { int[][] matrix = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; System.out.println("Исходная матрица:"); printMatrix(matrix); int[][] rotatedMatrix = rotateMatrixClockwise180(matrix); System.out.println("Матрица после поворота на 180 градусов по часовой стрелке:"); printMatrix(rotatedMatrix); } // Функция для поворота матрицы на 180 градусов по часовой стрелке public static int[][] rotateMatrixClockwise180(int[][] matrix) { int rows = matrix.length; int cols = matrix[0].length; int[][] rotatedMatrix = new int[rows][cols]; for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { rotatedMatrix[i][j] = matrix[rows - 1 - i][cols - 1 - j]; } } return rotatedMatrix; } // Функция для вывода матрицы на экран public static void printMatrix(int[][] matrix) { int rows = matrix.length; int cols = matrix[0].length; for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { System.out.print(matrix[i][j] + " "); } System.out.println(); } } }
Pascal
Пример программы на Pascal для поворота матрицы на 180 градусов по часовой стрелке:
program RotateMatrix; const N = 3; // Размер матрицы (здесь 3x3, измените по необходимости) type Matrix = array[1..N, 1..N] of Integer; procedure RotateMatrix180(var mat: Matrix); var i, j: Integer; temp: Integer; begin // Переворачиваем матрицу по вертикали for i := 1 to N do for j := 1 to N div 2 do begin temp := mat[i, j]; mat[i, j] := mat[i, N - j + 1]; mat[i, N - j + 1] := temp; end; // Переворачиваем матрицу по горизонтали for i := 1 to N div 2 do for j := 1 to N do begin temp := mat[i, j]; mat[i, j] := mat[N - i + 1, j]; mat[N - i + 1, j] := temp; end; end; procedure PrintMatrix(var mat: Matrix); var i, j: Integer; begin for i := 1 to N do begin for j := 1 to N do Write(mat[i, j]:4); Writeln; end; end; var originalMatrix: Matrix; begin // Заполняем исходную матрицу данными for i := 1 to N do for j := 1 to N do originalMatrix[i, j] := (i - 1) * N + j; // Заполняем матрицу числами от 1 до N^2 Writeln('Исходная матрица:'); PrintMatrix(originalMatrix); // Поворачиваем матрицу на 180 градусов по часовой стрелке RotateMatrix180(originalMatrix); Writeln('Матрица после поворота на 180 градусов по часовой стрелке:'); PrintMatrix(originalMatrix); end.
В этой программе мы сначала создаем исходную матрицу, затем поворачиваем ее на 180 градусов по часовой стрелке, меняя элементы местами. В результате получается матрица, повернутая на 180 градусов.
JavaScript
В этом коде мы создаем функцию rotateMatrixClockwise180, которая принимает исходную матрицу и возвращает новую матрицу, повернутую на 180 градусов по часовой стрелке. Функция printMatrix используется для вывода матрицы на экран.
function rotateMatrixClockwise180(matrix) { const rows = matrix.length; const cols = matrix[0].length; // Создаем новую матрицу с обратными размерами const rotatedMatrix = new Array(rows).fill(0).map(() => new Array(cols).fill(0)); // Переворачиваем матрицу по горизонтали и вертикали for (let i = 0; i < rows; i++) { for (let j = 0; j < cols; j++) { rotatedMatrix[i][j] = matrix[rows - 1 - i][cols - 1 - j]; } } return rotatedMatrix; } function printMatrix(matrix) { for (let i = 0; i < matrix.length; i++) { console.log(matrix[i].join(' ')); } } const originalMatrix = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]; console.log('Исходная матрица:'); printMatrix(originalMatrix); const rotatedMatrix = rotateMatrixClockwise180(originalMatrix); console.log('Матрица после поворота на 180 градусов по часовой стрелке:'); printMatrix(rotatedMatrix);
PHP
<?php function rotateMatrixClockwise180($matrix) { $rows = count($matrix); $cols = count($matrix[0]); // Создаем новую матрицу с обратными размерами $rotatedMatrix = array(); for ($i = 0; $i < $rows; $i++) { $rotatedMatrix[] = array(); for ($j = 0; $j < $cols; $j++) { $rotatedMatrix[$i][$j] = $matrix[$rows - 1 - $i][$cols - 1 - $j]; } } return $rotatedMatrix; } function printMatrix($matrix) { foreach ($matrix as $row) { echo implode(' ', $row) . "\n"; } } $originalMatrix = array( array(1, 2, 3), array(4, 5, 6), array(7, 8, 9) ); echo "Исходная матрица:\n"; printMatrix($originalMatrix); $rotatedMatrix = rotateMatrixClockwise180($originalMatrix); echo "Матрица после поворота на 180 градусов по часовой стрелке:\n"; printMatrix($rotatedMatrix); ?>