Найти сумму произведений элементов массива - C (СИ)
Формулировка задачи:
Здравствуйте!
Описать функцию, вычисляющую значение x0 + x0*x1 + x0*x1*x2 + …+ x0*x1*x2*...*xm, где xi - элементы вещественного массива x из n элементов, m - индекс первого отрицательного элемента этого массива либо число n-1, если такого элемента в массиве нет.
Не могу понять, как осуществить сам алгоритм (не код). Думаю, тут нужно использовать рекурсию, но не пойму как это вообще осуществить. Подскажите пожалуйста!
Решение задачи: «Найти сумму произведений элементов массива»
textual
Листинг программы
#include <stdio.h>
int findNeg(float arr[], int n) {
int i;
for (i = 0; i < n; ++i) {
if (arr[i] < 0) {
return i;
}
}
return -1;
}
float func(float arr[], int n) {
int i;
float res = 0, mul = 1;
for (i = 0; i < n; ++i) {
mul *= arr[i];
res += mul;
}
return res;
}
int main() {
float arr[] = { 1.0, 2.0, 3.0, -4.0, 5.0 };
int n = sizeof(arr) / sizeof(*arr);
int m = findNeg(arr, n);
printf("%f\n", func(arr, (m < 0) ? n : m));
return 0;
}
Объяснение кода листинга программы
В этом коде есть две функции:
- findNeg: эта функция принимает в качестве аргументов массив и его размер, ищет в массиве отрицательные числа и возвращает их индекс. Если в массиве нет отрицательных чисел, функция возвращает -1.
- func: эта функция принимает в качестве аргументов массив и его размер. Инициализирует переменные res и mul. Переменная res инициализируется как 0, а переменная mul инициализируется как 1. Затем функция проходит по всем элементам массива, умножая каждый элемент на mul и добавляя результат к res. В конце функция возвращает значение res. В функции main создается массив arr размером 5, заполненный различными числами. Функция findNeg вызывается для поиска индекса первого отрицательного числа в массиве. Если отрицательные числа в массиве отсутствуют, то выводится сообщение об этом. Затем вызывается функция func с аргументами массив и его размер. Если найденный индекс отрицательного числа меньше нуля, то размер массива передается в функцию func вместо найденного индекса. В противном случае передается найденный индекс. Результат работы функции func выводится на экран.