Многопоточное умножение матрицы на вектор - C#

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

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

Здравствуйте! Помогите, пожалуйста!!!! Очень нужно Я написала программу умножения матрицы на вектор, но нужно сделать из неё многопоточную программу. А я не понимаю пока принципов такого программирования и зачем оно нужно.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication11
{
    public class Matrix
    {
        double[,] matrix;
 
        public int Row { get; protected set; }
        public int Column { get; protected set; }
 
        public Matrix(int row, int column)
        {
            Row = row;
            Column = column;
            matrix = new double[row, column];
        }
 
        public Matrix Multiple(Matrix value)
        {
            Matrix result = new Matrix(Row, value.Column);
            for (int i = 0; i < Row; i++)
                for (int j = 0; j < value.Column; j++)
                    for (int k = 0; k < value.Row; k++)
                        result.matrix[i, j] += matrix[i, k] * value.matrix[k, j];
            return result;
        }
 
        public void Read()
        {
            for (int i = 0; i < Row; i++)
                for (int j = 0; j < Column; j++)
                {
                    Console.Write("Введите элемент [{0},{1}]: ", i + 1, j + 1);
                    matrix[i, j] = System.Convert.ToDouble(Console.ReadLine());
                }
        }
 
        public void Print()
        {
            for (int i = 0; i < Row; i++)
            {
                for (int j = 0; j < Column; j++)
                    Console.Write("{0:f2} ", matrix[i, j]);
                Console.WriteLine();
            }
        }
 
        static void Main(string[] args)
        {
            Console.WriteLine("Введите количество элементов");
               string a= Console.ReadLine();
                int n = Convert.ToInt32(a);
            Matrix vector = new Matrix(1, n);
            Matrix matrix = new Matrix(n, n);
            Console.Clear();
            Console.WriteLine("Ввод вектора");
            vector.Read();
            Console.WriteLine("\nВвод матрицы");
            matrix.Read();
            Console.Clear();
            Matrix result = vector.Multiple(matrix);
            Console.WriteLine("Вектор");
            vector.Print();
            Console.WriteLine("\nМатрица");
            matrix.Print();
            Console.WriteLine("\nРезультат умножения матрицы на вектор");
            result.Print();
            Console.WriteLine("\nНажмите любую клавишу для выхода из программы");
            Console.ReadKey(true);
 
        }  
    }
}

Решение задачи: «Многопоточное умножение матрицы на вектор»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication78
{
    public class Matrix
    {
        double[,] matrix;
 
        public int Row { get; protected set; }
        public int Column { get; protected set; }
 
        public Matrix(int row, int column)
        {
            Row = row;
            Column = column;
            matrix = new double[row, column];
        }
 
        public Matrix Multiple(Matrix value)
        {
            Matrix result = new Matrix(Row, value.Column);
            Parallel.For(0, Row, i =>
            {
                for (int j = 0; j < value.Column; j++)
                    for (int k = 0; k < value.Row; k++)
                        result.matrix[i, j] += matrix[i, k] * value.matrix[k, j];
            });
            return result;
        }
 
        public void Read()
        {
            for (int i = 0; i < Row; i++)
                for (int j = 0; j < Column; j++)
                {
                    Console.Write("Введите элемент [{0},{1}]: ", i + 1, j + 1);
                    matrix[i, j] = System.Convert.ToDouble(Console.ReadLine());
                }
        }
 
        public void Print()
        {
            for (int i = 0; i < Row; i++)
            {
                for (int j = 0; j < Column; j++)
                    Console.Write("{0:f2} ", matrix[i, j]);
                Console.WriteLine();
            }
        }
 
        static void Main(string[] args)
        {
            Console.WriteLine("Введите количество элементов");
            string a = Console.ReadLine();
            int n = Convert.ToInt32(a);
            Matrix vector = new Matrix(1, n);
            Matrix matrix = new Matrix(n, n);
            Console.Clear();
            Console.WriteLine("Ввод вектора");
            vector.Read();
            Console.WriteLine("\nВвод матрицы");
            matrix.Read();
            Console.Clear();
            Matrix result = vector.Multiple(matrix);
            Console.WriteLine("Вектор");
            vector.Print();
            Console.WriteLine("\nМатрица");
            matrix.Print();
            Console.WriteLine("\nРезультат умножения матрицы на вектор");
            result.Print();
            Console.WriteLine("\nНажмите любую клавишу для выхода из программы");
            Console.ReadKey(true);
        }
    }
}

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


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

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

14   голосов , оценка 4.143 из 5