Программа поворота матрицы на 180 градусов по часовой стрелке

Поворот матрицы на 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);
?>
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...
Давайте поможем друг другу! Если вы нашли ошибку или хотите предложить лучшее решение, пожалуйста, напишите об этом в комментариях.

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

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