Многопоточное умножение матрицы на вектор - 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);
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д