(Написать код ** C#) Разработать процедуру и/или функцию, реализующую операцию матричного...

+744 голосов
734k просмотров

(Написать код на C#) Разработать процедуру и/или функцию, реализующую операцию матричного умножения.


Информатика | 734k просмотров
Дан 1 ответ
+143 голосов

Код:

  • using System;
  • using System.Linq;
  • namespace Mtrx
  • {
  •    static class Program
  •    {
  •        static void Main(string[] args)
  •        {
  •            var matrix1 = new double[][]
  •            {
  •                new [] {1.0, 2},
  •                new [] {3.0, 4}
  •            };
  •            
  •            var matrix2 = new double[][]
  •            {
  •                new [] {1.0, 2},
  •                new [] {3.0, 4}
  •            };
  •            
  •            var A = MMult(matrix1, matrix2);
  •            if (!A.Success)
  •            {
  •                Console.WriteLine(A.Error);
  •                return;
  •            }
  •            Print2DMatrix(A.Data);
  •        }
  •        private static Result MMult(double[][] A, double[][] B) {
  •            if (A[0].Length != B.Length)
  •                return Result.GetError("It's imposable to multiply this matrix because of their dimensions");
  •            
  •            var result = A.Select(
  •                (row, rowIndex) =>
  •                    B[0].Select((_, columnIndex) => B.Select(__ => __[columnIndex])
  •                        .Zip(row, (rowCell, columnCell) => rowCell * columnCell).Sum()
  •                    ).ToArray()
  •            ).ToArray();
  •            return Result.GetResult(result);
  •        }
  •        private static void Print2DMatrix(T[][] matrix)
  •        {
  •            for (var i = 0; i < matrix.Length; ++i)
  •            {
  •                for (var j = 0; j < matrix[i].Length; ++j)
  •                {
  •                    Console.Write(matrix[j][i]);
  •                    Console.Write(" ");
  •                }
  •                Console.WriteLine();
  •            }
  •        }
  •    }
  •    internal class Result
  •    {
  •        public T Data { get; }
  •        public string Error { get; }
  •        public bool Success => Error is null;
  •        public static Result GetError(string error)
  •        {
  •            return new Result(default, error);
  •        }
  •        public static Result GetResult(T result)
  •        {
  •            return new Result(result);
  •        }
  •        private Result(T data, string error = null)
  •        {
  •            Data = data;
  •            Error = error;
  •        }
  •    }
  • }
(7.0k баллов)
+78

мерси

+102

Обновил, проверяй

+164

сча

+183

ляя

+157

меняешь на for(var i = 0; i < A.Length; ++i) for (var j = 0; j < A[0].Length; ++j) Console.Write(Console.WriteLine(MMult(matrix1, matrix2))[j][i]);