Вычитание матриц

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

Описание алгоритма

Вычитание матриц 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 r = int.Parse(Console.ReadLine());
        Console.Write("Количество столбцов матрицы {0}: ", name);
        var c = int.Parse(Console.ReadLine());

        var matrix = new int[r, c];
        for (var i = 0; i < r; i++)
        {
            for (var j = 0; j < c; 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.ColumnsCount()) || (matrixA.RowsCount() != 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();
    }
}

Смотрите также: