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