Параллельные вычисления - C# (179750)

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

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

Нужно использовать параллельные вычисления, при решении данной задачи, пробовал распараллелить циклы, но выдавало не верный результат, код ниже. Буду благодарен любой помощи! (Приводить код с распараллеливанием не вижу смысла, так как он не правильно работает).
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];
                        maxValue = (maxValue < result.matrix[i, j] ? result.matrix[i, j] : maxValue);
                    }
            return result;
        }
        public double maxValue;
        public void Read()
        {
            for (int i = 0; i < Row; i++)
                for (int j = 0; j < Column; j++)
                {
                    Console.Write("Enter element [{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:f0} ", matrix[i, j]);
                Console.WriteLine();
            }
        }

    }
 
    class Program
    {
 
        static void Main(string[] args)
        {
            Matrix vector = new Matrix(1, 4);
            Matrix matrix = new Matrix(4, 4);
            Console.Clear();
            Console.WriteLine("Enter vector");
            vector.Read();
            Console.WriteLine("\nEnter matrix");
            matrix.Read();
            Console.Clear();
            Matrix result = vector.Multiple(matrix);
            Console.WriteLine("\nTask 1 complete!");
            Console.WriteLine("\nTask 2 complete!");
            Console.WriteLine("\nTask 3 complete!");
            Console.WriteLine("Vector:");
            vector.Print();
            Console.WriteLine("\nMatrix:");
            matrix.Print();
            Console.WriteLine("\nResult of multiplication:");
            result.Print();
            Console.WriteLine("\nMax. digit in vector:");
            Console.WriteLine(vector.maxValue);
            Console.WriteLine("\nEnter any key to exit...");
            Console.ReadKey(true);
        }
    }
}

Решение задачи: «Параллельные вычисления»

textual
Листинг программы
using System;
using System.Threading.Tasks;
using System.Threading;
 
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);
            Parallel.For(0, Row, (i) =>
                {
                    Parallel.For(0, value.Column, (j) =>
                        {
                            Parallel.For(0, value.Row, (k) =>
                            {
                                    result.matrix[i, j] += matrix[i, k] * value.matrix[k, j]; 
                                    maxValue = (maxValue < result.matrix[i, j] ? result.matrix[i, j] : maxValue);
                                });
                        });
                });
       
            return result;
        }
        public double maxValue;
        public void Read()
        {
            for (int i = 0; i < Row; i++)
                for (int j = 0; j < Column; j++)
                {
                    Console.Write("Введiть [{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:f0} ", matrix[i, j]);
                Console.WriteLine();
            }
        }
    }
 
    class Program
    {
 
        static void Main(string[] args)
        {
            Matrix vector = new Matrix(1, 4);
            Matrix matrix = new Matrix(4, 4);
            Console.Clear();
            Console.WriteLine("Введiть вектор:");
            vector.Read();
            Console.WriteLine("\nВведiть матрицю:");
            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Максимальне число в векторi:");
            Console.WriteLine(vector.maxValue);
            Console.WriteLine("\nВведiть будь-яку клавiшу для виходу...");
            Console.ReadKey(true);
        }
    }
}

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


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

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

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