Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 01.10.2016
Сообщений: 54
1

Построить вектор, элементы которого равны произведению соответствующих элементов двух других векторов

01.10.2016, 20:12. Показов 1075. Ответов 13
Метки нет (Все метки)

Уважаемые участники форума, прошу вас помочь с созданием программы на C# со следующим условием:
С помощью параллельного программирования решить задачу:Построить вектор, элементы которого равны произведению
соответствующих элементов двух других векторов.
Нужен сам программный код на C#.

Добавлено через 3 часа 31 минуту
Народ помогите! Вопрос горит!

Добавлено через 52 минуты
Пишите в личку. Буду рад пообщаться.

Добавлено через 1 час 40 минут
апп
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.10.2016, 20:12
Ответы с готовыми решениями:

Построить вектор, элементы которого равны произведению соответствующих элементов двух других векторов
Уважаемые участники форума, прошу вас помочь с созданием программы на C# со следующим условием: С...

TPL . Построить вектор, элементы которого равны произведению соответствующих элементов двух других векторов
Помогите написать код, используя библиотеку TPL (Task Parallel Library), класс Task. Построить...

Параллельное программирование:Построить вектор, элементы которого равны произведению соответствующих элементов
Уважаемые программисты,буду весьма признателен, если напишите код программы на C# к данной задаче:...

Сформировать массив, элементы которого равны произведению соответствующих элементов двух других массивов
Дано два массива одного размера. Сформулировать третий массив, элементы которого равны произведению...

13
1465 / 1183 / 819
Регистрация: 29.02.2016
Сообщений: 3,582
02.10.2016, 11:37 2
http://stackoverflow.com/quest... l-for-loop
0
0 / 0 / 0
Регистрация: 01.10.2016
Сообщений: 54
02.10.2016, 12:59  [ТС] 3
afront благодарю, но не могли бы Вы поподробнее мне объяснить всё по русски. Я в параллельном програм. не очень шарю.
Приму помощь в разъяснении. Заранее благодарю!
0
1465 / 1183 / 819
Регистрация: 29.02.2016
Сообщений: 3,582
02.10.2016, 13:35 4
Лучший ответ Сообщение было отмечено SancheZxZ как решение

Решение

в приведенной ссылке в ответе приводятся примеры различных приемов распараллеливания, т.к. простое применение
ParallelFor не ускоряет решение задачи а замедляет. Поскольку вы только начинаете, я оставил в коде только два случая: последовательное и обычное параллельное. Еще, по ссылке проводится умножение массива на число, я сделал умножение двух массивов.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;
 
namespace ConsoleApplication162
{
    class Program
    {
        static void Main()
        {
            double[] array1 = new double[20 * 1000 * 1000];
            double[] array2 = new double[20 * 1000 * 1000];
 
            for (int i = 0; i < array1.Length; i++)
            {
                array1[i] = 1;
                array2[i] = 1;
            }
 
            for (int i = 0; i < 5; i++)
            {
                Stopwatch sw = Stopwatch.StartNew();
                Serial(array1, array2);  // последовательное умножение
                Console.WriteLine("Serial: {0:f2} s", sw.Elapsed.TotalSeconds); // время выполнения
 
                sw = Stopwatch.StartNew();
                ParallelFor(array1, array2);  // умножение с использованием ParallelFor
                Console.WriteLine("Parallel.For: {0:f2} s", sw.Elapsed.TotalSeconds); // время выполнения
 
                Console.ReadKey();
            }
        }
 
        static void Serial(double[] array1, double[] array2)
        {
            for (int i = 0; i < array1.Length; i++)
            {
                array1[i] = array1[i] * array2[i];
            }
        }
 
        static void ParallelFor(double[] array1, double[] array2)
        {
            Parallel.For(
                0, array1.Length, i => { array1[i] = array1[i] * array2[i]; });
        }
 
    }
}
1
0 / 0 / 0
Регистрация: 01.10.2016
Сообщений: 54
02.10.2016, 13:41  [ТС] 5
Afront, благодарю стало яснее касаемо непосредственно параллельного метода.

Но пока моя головная боль состоит именно в коде решения задачи, используя данные методы.
Условие выше. Если можете помогите с кодом. Заранее спасибо.
0
1465 / 1183 / 819
Регистрация: 29.02.2016
Сообщений: 3,582
02.10.2016, 13:44 6
Лучший ответ Сообщение было отмечено SancheZxZ как решение

Решение

SancheZxZ, я полагаю что вектор это линейный массив. В коде умножаются два массива
C#
1
array1[i] = array1[i] * array2[i];
1
0 / 0 / 0
Регистрация: 01.10.2016
Сообщений: 54
02.10.2016, 13:51  [ТС] 7
Afront, вы мне очень помогли, спасибо.
Если не трудно напишите пожалуйста код решения задачи без метода параллельного программирования.
Чтобы я мог точно понять в чем различие и чем параллельное прогр. упрощает код.
0
1465 / 1183 / 819
Регистрация: 29.02.2016
Сообщений: 3,582
02.10.2016, 14:00 8
SancheZxZ, в коде две функции Serial - обычное умножение, ParallelFor - параллельное.
Я что то засомневался, может я вас обманываю, я привел пример умножения двух массивов, если нужен именно вектор, то это несколько другое.
В c# есть специальный метод для умножения векторов
https://msdn.microsoft.com/en-... .110).aspx
0
0 / 0 / 0
Регистрация: 01.10.2016
Сообщений: 54
02.10.2016, 14:12  [ТС] 9
Но если вектор - линейный массив, получается этот код и есть верный?
Щас я гляну ссылку на MSDN

Добавлено через 2 минуты
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private Double overloadedOperatorGetDotProductExample()
{
    Vector vector1 = new Vector(20, 30);
    Vector vector2 = new Vector(45, 70);
 
    // Return the dot product of the two specified vectors
    // using the overloaded "*" operator.
    // The dot product is calculated using the following 
    // formula: (vector1.X * vector2.X) + (vector1.Y * vector2.Y).
    // doubleResult is equal to 3000
    Double doubleResult = Vector.Multiply(vector1, vector2);
 
    return doubleResult;
 
}


Я так понимаю результат тот же, но другой способ написания кода. Так?

Добавлено через 8 минут
данный код с MSDN компилируется с ошибками. В чем проблема подскажите.
0
.NET senior
437 / 355 / 137
Регистрация: 23.09.2016
Сообщений: 980
02.10.2016, 15:36 10
SancheZxZ, с какими именно ошибками компилируется код?
0
0 / 0 / 0
Регистрация: 01.10.2016
Сообщений: 54
02.10.2016, 15:54  [ТС] 11
Скрин
0
Миниатюры
Построить вектор, элементы которого равны произведению соответствующих элементов двух других векторов  
.NET senior
437 / 355 / 137
Регистрация: 23.09.2016
Сообщений: 980
02.10.2016, 17:18 12
SancheZxZ, через меню Ссылки к проекту необходимо подключить сборку WindowsBase - это раз.
У Вас откуда-то после
C#
1
using System;
появилась закрывающая круглая скобка, что является синтаксической ошибкой - это два.
Также, C# не поддерживает методы, "оторванные" от окружающего класса - это три.

Добавлено через 6 минут
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using System;
using System.Windows; // <<< после этого Vector появится в области видимости
 
public namespace SomeYourNamespace
{
    public class SomeClass
    {
        public static double SomeMethod()
        {
            Vector firstVector = new Vector(20.0, 30.0);
            Vector secondVector = new Vector(45.0, 70.0);
            
            return Vector.Multiply(firstVector, secondVector);
        }
    }
}
0
0 / 0 / 0
Регистрация: 01.10.2016
Сообщений: 54
02.10.2016, 17:46  [ТС] 13
Vector подчеркивает. Не компилирует



error CS0103: Имя "Vector" отсутствует в текущем контексте

Добавлено через 1 минуту
и где
4 public namespace SomeYourNamespace

ему public не нравится
0
.NET C#,ASP.NET MVC
Эксперт .NET
590 / 501 / 225
Регистрация: 16.10.2010
Сообщений: 1,902
02.10.2016, 17:57 14
SancheZxZ, Выучите основы языка!!

Цитата Сообщение от SancheZxZ Посмотреть сообщение
public namespace SomeYourNamespace
В C# у пространства имен не может быть модификатора доступа

Цитата Сообщение от SancheZxZ Посмотреть сообщение
Vector подчеркивает. Не компилирует
Вам уже писали выше Подключите сборку! Как это сделать? Прочитайте в какой либо книге. К тому же если заметить то на большество ошибок вижуал студия и так предлагает вам решение

И еще раз, учите основы, иначе с таким успехом вы будете каждый день создавать по 20 тем.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.10.2016, 17:57

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Получить вектор, элементы которого равны суммам элементов соответствующих строк матрицы
Пожалуйста, помогите с решением. Дана матрица A(n на m) целых чисел. Получить вектор, элементы...

Получить вектор, элементы которого равны сумме минимального и максимального элементов соответствующих строк
Дана матрица A(n*n) целых чисел. Получить вектор, элементы которого равны сумме минимального и...

Создать вектор, элементы которого равны произведению max и min в строке массива
С массива ij]mn создать вектор из элементов, что равны произведению max элемента та min элемента в...

Построить вектор D, элементы которого равны сумме элементов строк матрицы В
Помогите решить задачку, ато я и условие плохо понял. Построить вектор D, элементы которого равны...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.