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

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

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

Вычислить скалярное произведение векторов методом parallel.for правильно? если нет помогите(
Листинг программы
  1. using System;
  2. using System.Threading.Tasks;
  3. namespace TPLscalarProd
  4. {
  5. class Program
  6. {
  7. static void Main()
  8. {
  9. double[] x = new double[] { 1, -5, 4, -7, 8, -15, 3, 2, -2, 1 };
  10. int n = x.Length;
  11. int m = n / 2;
  12. double p1 = 0,p2=0;
  13. Parallel.For(0, 2, i =>
  14. { if (i == 0) { 1 поток действия для вашего варианта };
  15. if (i == 1) { 2 поток действия для вашего варианта}); }
  16. Console.WriteLine("р1: " + (p1));
  17. Console.WriteLine("р2: " + (p2));
  18. Console.WriteLine("Норма вектора: " + (p1 + p2));
  19. Console.ReadLine();
  20. } } }
тут вроде правильно но не до конца нужно еще сложить элементы произведения наверно
ПРОСТИТЕ НЕ ТО СКИНУЛ, КАК МНЕ ЭТО ВСЕ СЛОЖИТЬ???или я не правильно по заданию делаю?помогите кто разбирается(((
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace MultVectors
  8. {
  9. class Program
  10. {
  11. static int[] vector1 = new int[4] { 1, 2, 3, 4 };
  12. static int[] vector2 = new int[4] { 5, 6, 7, 8 };
  13. static int[] vector3 = new int[4];
  14. public static void Main(string[] args)
  15. {
  16. Parallel.For(0, 4, Vect);
  17. Console.ReadLine();
  18. }
  19. static void Vect(int x)
  20. {
  21. Console.WriteLine("x=" + x);
  22. vector3[x] = vector1[x] * vector2[x];
  23. Console.WriteLine("Выполняется задача {0}", Task.CurrentId);
  24. for (var i = 0; i < vector1.Length; i++)
  25. {
  26. Console.WriteLine(vector1[i] + "*" + vector2[i] + "=" + vector3[i]);А
  27. }
  28. Console.WriteLine(" ");
  29. Console.ReadKey();
  30. int[] z = new int[5];
  31. Console.WriteLine("Massivtin kosindisin esepteu!!!");
  32. for (int i = 0; i < 5; i++)
  33. {
  34. Console.Write("Z[{0}]=", i);
  35. z[i] = int.Parse(Console.ReadLine());
  36. }
  37. int sum = 0;
  38. for (int i = 0; i < 5; i++)
  39. {
  40. sum = z[i] + sum;
  41. }
  42. Console.Write("sum = {0}", sum);
  43. }
  44. }
  45. }

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

textual
Листинг программы
  1. int n = 100;
  2. int[] v1 = new int[n]; // !
  3. int[] v2 = new int[n]; // !
  4.  
  5. int dotProd = 0;
  6. object lockObject = new object();
  7. Parallel.For(0, n,
  8.     () => 0,
  9.     (i, state, partialSum) => {
  10.         Console.WriteLine("{0}'е компоненты умножаются в потоке #{1}",
  11.             i, Thread.CurrentThread.ManagedThreadId);
  12.         return partialSum + v1[i] * v2[i];
  13.     },
  14.     (partialSum) => { lock (lockObject) {
  15.             Console.WriteLine("Поток #{0} прибавляет свой результат к сумме",
  16.                 Thread.CurrentThread.ManagedThreadId);
  17.             dotProd += partialSum;
  18.         } });
  19.  
  20. Console.WriteLine("Ответ: " + dotProd);

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы