Віднімання матриц

Віднімання матриць – одна з основних операцій над матрицями. Матриця отримана в результаті операції віднімання, називається різницею матриць.

Опис алгоритму

Різниця матриць A та B:

це операція знаходження матриці C:
всі елементи якої рівні попарно різниці всіх відповідних елементів матриць A і B, тобто кожен елемент матриці С обчислюється за формулою:

Віднімання двох матриць можна виконати тільки у випадку, якщо матриці мають однаковий розмір.

Реалізація алгоритму

using System;

// клас з методами розширення
static class MatrixExt
{
    // метод розширення для отримання кількості рядків матриці
    public static int RowsCount(this int[,] matrix)
    {
        return matrix.GetLength(0);
    }

    // метод розширення для отримання кількості стовпців матриці
    public static int ColumnsCount(this int[,] matrix)
    {
        return matrix.GetLength(1);
    }
}

class Program
{
    // метод для отримання матриці з консолі
    static int[,] GetMatrixFromConsole(string name)
    {
        Console.Write("Кількість рядків матриці {0}: ", name);
        var n = int.Parse(Console.ReadLine());
        Console.Write("Кількість стовпців матриці {0}: ", name);
        var m = int.Parse(Console.ReadLine());

        var matrix = new int[n, m];
        for (var i = 0; i < n; i++)
        {
            for (var j = 0; j < m; j++)
            {
                Console.Write("{0}[{1},{2}] = ", name, i, j);
                matrix[i, j] = int.Parse(Console.ReadLine());
            }
        }

        return matrix;
    }

    // метод для виводу матриці на екран консольного додатку
    static void PrintMatrix(int[,] matrix)
    {
        for (var i = 0; i < matrix.RowsCount(); i++)
        {
            for (var j = 0; j < matrix.ColumnsCount(); j++)
            {
                Console.Write(matrix[i, j].ToString().PadLeft(4));
            }

            Console.WriteLine();
        }
    }

    // метод для віднімання матриць
    static int[,] MatrixSubstract(int[,] matrixA, int[,] matrixB)
    {
        if (matrixA.ColumnsCount() != matrixB.RowsCount())
        {
            throw new Exception("Для матриць різного розміру віднімання не можливе!");
        }

        var matrixC = new int[matrixA.RowsCount(), matrixB.ColumnsCount()];

        for (var i = 0; i < matrixA.RowsCount(); i++)
        {
            for (var j = 0; j < matrixB.ColumnsCount(); j++)
            {
                matrixC[i, j] = matrixA[i, j] - matrixB[i, j];
            }
        }

        return matrixC;
    }

    static void Main(string[] args)
    {
        Console.WriteLine("Програма для знаходження різниці двох матриць");

        var a = GetMatrixFromConsole("A");
        var b = GetMatrixFromConsole("B");

        Console.WriteLine("Матриця A:");
        PrintMatrix(a);

        Console.WriteLine("Матриця B:");
        PrintMatrix(b);

        var result = MatrixSubstract(a, b);
        Console.WriteLine("Різниця матриць:");
        PrintMatrix(result);

        Console.ReadLine();
    }
}

Дивіться також: