Умножение матрицы на число

Умножение матрицы на число – операция результатом которой является матрица такой же размерности, что и исходная, каждый элемент результирующей матрицы является произведением соответствующего элемента исходной матрицы на заданное число.

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

Произведением матрицы M на число k называется матрица R = k · M того же размера, полученная из исходной умножением на заданное число всех ее элементов: Ri,j = k · Mi,j

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

using System;

// класс с методами расширения
static class MatrixExt
{
    // метод расширения для получения количества строк матрицы
    public static int RowsCount(this double[,] matrix)
    {
        return matrix.GetUpperBound(0) + 1;
    }

    // метод расширения для получения количества столбцов матрицы
    public static int ColumnsCount(this double[,] matrix)
    {
        return matrix.GetUpperBound(1) + 1;
    }

    // метод для печати матрицы в консоль
    public static void PrintMatrix(this double[,] 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();
        }
    }
}

class Program
{
    // метод для получения матрицы из консоли
    static double[,] 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 double[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] = double.Parse(Console.ReadLine());
            }
        }

        return matrix;
    }

    // метод для умножения матрицы на число
    static double[,] ScalarMatrixMultiplication(double[,] inputMartix, double k)
    {
        var resultMatrix = new double[inputMartix.RowsCount(), inputMartix.ColumnsCount()];

        for (var i = 0; i < inputMartix.RowsCount(); i++)
        {
            for (var j = 0; j < inputMartix.ColumnsCount(); j++)
            {
                resultMatrix[i, j] = inputMartix[i, j] * k;
            }
        }

        return resultMatrix;
    }

    static void Main(string[] args)
    {
        Console.WriteLine("Программа для умножения матрицы на число");

        var m = GetMatrixFromConsole("M");
        Console.Write("k = ");
        var k = Convert.ToDouble(Console.ReadLine());

        Console.WriteLine("Матрица M:");
        m.PrintMatrix();

        Console.WriteLine("k = {0}", k);

        var result = ScalarMatrixMultiplication(m, k);
        Console.WriteLine("Произведение матрицы M на число k:");
        result.PrintMatrix();

        Console.ReadLine();
    }
}

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