Запрограммировать формулу с#
Задача - вычисление скалярного произведения двух одномерных массивов (A и B) с размерностью n по формуле:
Не могу понять как перевести формулу на С# ?
Ответы (3 шт):
Всю задачу можно разделить на части:
- Инициализация двух динамических массивов размерностью n
- Заполнение этих массивов
- Создать переменную answer, которая и будет искомым скалярным произведением
- Произвести произведение i-тых элементов обоих массивов и к переменной answer прибавить результат этого перемножения, и так далее вплоть до n-ных элементов массивов. Это можно сделать через цикл for
using System.Linq;
var result = a.Zip(b, (ai, bi) => ai * bi).Sum();
Zip поэлементно склеивает два массива (как застежка-молния, zip по английски), при этом применяя функцию к каждой паре элементов.
Sum считает сумму.
Поддерживаю @ashes и сначала вам нужно разделить задачу на несколько частей, но подробней напишу об основной части.
Что мы имеем?
S- итоговая сумма произведенийi-ых элементовaиb- массивыn- размер этих массивов
Данная формула, если переводить на русский язык, означает: Сумма произведений i-тых элементов.
Например:
a = { 1, 2, 3, 4, 5 };
b = { 5, 4, 3, 2, 1 };
n = 5
Нужно учитывать, то что в формуле i начинается с 1, но индексация массивов в c# начинается с 0. Значит наш промежуток будет не [1, n], а [0, n) или [0, n - 1]
Запишу, как высчитывается S в одну строчку
S = a[0]*b[0] + a[1]*b[1] + a[2]*b[2] + a[3]*b[3] + a[4]*b[4]
Как мы видим, в каждом слагаемом у нас изменяется только индекс, значит лучше воспользоваться циклом for (да да for :) )
Сам цикл for работает следующим образом:
for(int i = начало промежутка; i < конец промежутка; i++)
В вашем случае начало промежутка = 0, а вот конец промежутка = n или если взять промежуток [0, n - 1], то нужно писать i <= n - 1.
Ну и осталось за малым, просто написать цикл, который будет проходить промежуток от [0, n) и внутри него складывать в переменную S изначально равную 0 произведение i-тых элементов. (Подсказка: обращение к i-му элементу например массива a осуществляется так a[i])
