Запрограммировать формулу с#

Задача - вычисление скалярного произведения двух одномерных массивов (A и B) с размерностью n по формуле:

введите сюда описание изображения

Не могу понять как перевести формулу на С# ?


Ответы (3 шт):

Автор решения: ashes

Всю задачу можно разделить на части:

  1. Инициализация двух динамических массивов размерностью n
  2. Заполнение этих массивов
  3. Создать переменную answer, которая и будет искомым скалярным произведением
  4. Произвести произведение i-тых элементов обоих массивов и к переменной answer прибавить результат этого перемножения, и так далее вплоть до n-ных элементов массивов. Это можно сделать через цикл for
→ Ссылка
Автор решения: PashaPash
using System.Linq;

var result = a.Zip(b, (ai, bi) => ai * bi).Sum();

Zip поэлементно склеивает два массива (как застежка-молния, zip по английски), при этом применяя функцию к каждой паре элементов.

Sum считает сумму.

→ Ссылка
Автор решения: Павел Ериков

Поддерживаю @ashes и сначала вам нужно разделить задачу на несколько частей, но подробней напишу об основной части.

Что мы имеем?

  1. S - итоговая сумма произведений i-ых элементов
  2. a и b - массивы
  3. 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])

→ Ссылка