Узнать определенный элемент произведения нескольких матриц - C#

Узнай цену своей работы

Формулировка задачи:

Таня недавно узнала, что такое квадратная матрица размерности n. Это таблица n x n с целыми числами в ячейках. Число, стоящее на пересечении i-ой строки и j-ого столбца матрицы A, кратко обозначается A[i, j]. Матрицы можно умножать, и Таня быстро освоила, как запрограммировать эту операцию с помощью циклов. Результатом умножения двух матриц A и B будет матрица C, элементы которой определяются следующим образом: Матрицы ей понадобились для конкретной задачи, в которой надо узнать определенный элемент произведения нескольких матриц. Это уже достаточно сложная задача для Тани, но она усложняется тем, что все вычисления ведутся по модулю некоторого простого числа p, то есть если при арифметических операциях получается число, большее, либо равное p, оно заменяется на остаток при делении на p. Помогите Тане вычислить нужный ей элемент.

Решение задачи: «Узнать определенный элемент произведения нескольких матриц»

textual
Листинг программы
   class Program
    {
        static Random r = new Random();
 
        static double[,] InitializeMatrix(int size)
        {
            double[,] matrix = new double[size, size];
            for (int i = 0; i < size; i++)
            {
                for (int j = 0; j < size; j++)
                {
                    matrix[i, j] = r.Next(10);
                }
            }
            return matrix;
        }
 
        private static void Print(int size,  double[,] matrix)
        {
            for (int x = 0; x < size; x++)
            {
                for (int y = 0; y < size; y++)
                    Console.Write(string.Format("{0,3} ", matrix[x, y]));  
                Console.WriteLine();
            }
        }
 
        static void MultiplyMatrices(double[,] matA, double[,] matB, double[,] result)
        {
            int size = matA.GetLength(0);
 
 
            for (int i = 0; i < size; i++)
            {
                for (int j = 0; j < size; j++)
                {
                    double temp = 0;
                    for (int k = 0; k < size; k++)
                    {
                        temp += matA[i, k] * matB[k, j];
                    }
                    result[i, j] += temp;
                }
            }
        }
 
        static void  MatrixDiv( double p,double[,] result)
        {
            int size = result.GetLength(0);
            for (int i = 0; i < size; i++)
                for (int j = 0; j < size; j++)
                {
                    if (result[i, j] >= p)
                        result[i, j] = result[i, j] % p;
                }
         }
 
        static void Main(string[] args)
        {
            int size = 4;
 
            double[,] m1 = InitializeMatrix(size);
            double[,] m2 = InitializeMatrix(size);
            double[,] result = new double[size, size];
            double p = r.Next(100);
            Console.WriteLine("p = {0}",p);
            MultiplyMatrices(m1, m2, result);
            Print(size, result);
            Console.WriteLine();
            MatrixDiv(p, result);
            Print(size, result);
             Console.ReadKey();
        }
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.2 из 5
Похожие ответы