Вычислить скалярное произведение векторов методом parallel.for - C#

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

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

Вычислить скалярное произведение векторов методом parallel.for правильно? если нет помогите(
using System; 
using System.Threading.Tasks; 
namespace TPLscalarProd 
{ 
class Program 
{ 
static void Main() 
{ 
double[] x = new double[] { 1, -5, 4, -7, 8, -15, 3, 2, -2, 1 }; 
int n = x.Length; 
int m = n / 2; 
double p1 = 0,p2=0; 
Parallel.For(0, 2, i => 
{ if (i == 0) { 1 поток действия для вашего варианта }; 
if (i == 1) { 2 поток действия для вашего варианта}); }
 
Console.WriteLine("р1: " + (p1)); 
Console.WriteLine("р2: " + (p2)); 
Console.WriteLine("Норма вектора: " + (p1 + p2)); 
Console.ReadLine(); 
} } }
тут вроде правильно но не до конца нужно еще сложить элементы произведения наверно
ПРОСТИТЕ НЕ ТО СКИНУЛ, КАК МНЕ ЭТО ВСЕ СЛОЖИТЬ???или я не правильно по заданию делаю?помогите кто разбирается(((
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MultVectors
{
    class Program
    {
        static int[] vector1 = new int[4] { 1, 2, 3, 4 };
        static int[] vector2 = new int[4] { 5, 6, 7, 8 };
        static int[] vector3 = new int[4];
     public   static void Main(string[] args)       
            {
    Parallel.For(0, 4, Vect);
    Console.ReadLine();
            }
       
        static void Vect(int x)
            
        {
            Console.WriteLine("x=" + x);
            vector3[x] = vector1[x] * vector2[x];          
            Console.WriteLine("Выполняется задача {0}", Task.CurrentId);
            for (var i = 0; i < vector1.Length; i++)
            {
                Console.WriteLine(vector1[i] + "*" + vector2[i] + "=" + vector3[i]);А
              
            }
            Console.WriteLine(" ");
            Console.ReadKey();
            int[] z = new int[5];
            Console.WriteLine("Massivtin kosindisin esepteu!!!");
            for (int i = 0; i < 5; i++)
            {
                Console.Write("Z[{0}]=", i);
                z[i] = int.Parse(Console.ReadLine());
            }
            int sum = 0;
            for (int i = 0; i < 5; i++)
            {
                sum = z[i] + sum;
            }
            Console.Write("sum = {0}", sum);
        }
    }
}

Решение задачи: «Вычислить скалярное произведение векторов методом parallel.for»

textual
Листинг программы
int n = 100;
int[] v1 = new int[n]; // !
int[] v2 = new int[n]; // !
 
int dotProd = 0;
object lockObject = new object();
Parallel.For(0, n, 
    () => 0,
    (i, state, partialSum) => {
        Console.WriteLine("{0}'е компоненты умножаются в потоке #{1}", 
            i, Thread.CurrentThread.ManagedThreadId);
        return partialSum + v1[i] * v2[i];
    },
    (partialSum) => { lock (lockObject) {
            Console.WriteLine("Поток #{0} прибавляет свой результат к сумме",
                Thread.CurrentThread.ManagedThreadId);
            dotProd += partialSum;
        } });
 
Console.WriteLine("Ответ: " + dotProd);

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


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

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

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