Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 41, средняя оценка - 5.00
ARTLINE-NN
1 / 1 / 0
Регистрация: 30.03.2012
Сообщений: 82
#1

Рекурсивно вычислить произведение отрицательных элементов массива - C++

31.03.2012, 15:36. Просмотров 5459. Ответов 54
Метки нет (Все метки)

Написать рекурсивную функцию возвращающую произведение отрицательных элементов массива
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.03.2012, 15:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Рекурсивно вычислить произведение отрицательных элементов массива (C++):

Вычислить произведение отрицательных элементов массива - C++
Добрый день. Помогите пожалуйста решить задачу, завтра экзамен. нужно вычислить произведение отрицательных элементов массива. Использовать...

Вычислить произведение отрицательных элементов массива - C++
Приветствую вас дорогие форумчане. Прошу о помощи в изменении программы. В коде предоставленном ниже требуется заменить: рандомный подбор...

Вычислить произведение отрицательных элементов массива - C++
Помогите пожалуйста! Надо написать программу в виде функций. Но я себе это как то слабо представляю. Вод задания: В одномерном массиве,...

Вычислить произведение отрицательных элементов массива - C++
Вычислите произведение отрицательных элементов массива.

Вычислить произведение отрицательных элементов массива - C++
В одномерном массиве, состоящем из вещественных элементов, вычислить: 1.произведение отрицательных элементов массива; 2.сумму...

Вычислить произведение отрицательных элементов массива - C++
В одномерном массиве, который состоит из n действительных элементов, вычислить: а) произведение отрицательных элементов массива; б)...

54
DoZZer_
11 / 11 / 1
Регистрация: 09.08.2011
Сообщений: 53
31.03.2012, 16:07 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
#include <iostream> 
#include <conio.h> 
using namespace std ;
 
/*Рекурсивная функция (массив , номер элемента массива , общее число эл-тов массива , текущий результат рекурсии)*/
int Func(int* mass , int num , int max , int result) ;
 
int main(){
    int massiv[] = {10 , 20 , -10 , -5 , -100 , -2 , 4} ;            //Обрабатываемый массив
    int maxim = sizeof(massiv)/sizeof(int) ;                           //Число элементов в массиве
    cout << Func(massiv , 0 , maxim , 1) ;                             //Запускаем функцию
 
    getch() ;
    return 0 ;
 
}
 
int Func(int* mass , int num , int max , int result){
    if(num < max){                                                       //Если мы не вышли за рамки массива
        if(mass[num] < 0)                                           //Проверяем на равенство нулю
            result *= mass[num] ; 
        num++ ;                                                        //Переходим к следующему элементу
        return Func(mass , num , max , result) ;             //Рекурсивно вызываем функцию
    }
    else
        return result ;                                                //Если вышли за рамки массива, прекращаем расчет
}
3
ARTLINE-NN
1 / 1 / 0
Регистрация: 30.03.2012
Сообщений: 82
31.03.2012, 16:28  [ТС] #3
DoZZer_, спасибо за ответ.
0
Nameless One
Эксперт С++
5774 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
31.03.2012, 16:39 #4
C
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
size_t neg_prod(const int* array, size_t count)
{
    return count ? (*array < 0 ?  *array : 1) * neg_prod(array + 1, count - 1) : 1;
}
 
int main(void)
{
    int array[] = {-5, 8, 9, -1, 15, -3, 0, -2};
    printf("%zd\n", neg_prod(array, sizeof(array) / sizeof(*array)));
    return 0;
}
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
31.03.2012, 16:46 #5
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
 
int mul_neg(int *arr, size_t size)
{
   static int fl;
   
   return size ? (*arr < 0 ? (fl = 1), *arr : 1) * mul_neg(arr + 1, size - 1) : fl ? 1 : 0;
} 
 
 
int main(void)
{
   int arr[] = { 1, -2, -3, 4, -5};
   printf("%d\n", mul_neg(arr, sizeof arr / sizeof *arr));
}
http://liveworkspace.org/code/66fa08...adceb1b00f638f

Добавлено через 45 секунд
Nameless One, а если нет отрицательных?
0
Nameless One
Эксперт С++
5774 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
31.03.2012, 16:58 #6
Цитата Сообщение от go Посмотреть сообщение
Nameless One, а если нет отрицательных?
как и положено, вернет единицу — нейтральный элемент по умножению. А что, должен быть другой результат?
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
31.03.2012, 17:21 #7
Nameless One, А если в массиве два отрицательных элемента (оба минус единица). результат тотже? Вывод: при отсутствии отрицательных элементов, должно вернутся ноль. Это вполне логично.
0
Nameless One
Эксперт С++
5774 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
31.03.2012, 17:33 #8
Цитата Сообщение от go Посмотреть сообщение
А если в массиве два отрицательных элемента (оба минус единица). результат тотже?
конечно

Цитата Сообщение от go Посмотреть сообщение
Вывод: при отсутствии отрицательных элементов, должно вернутся ноль. Это вполне логично.
я согласился бы, если бы это бы это было в задании. Но так как про это ничего не сказано, при свертке последовательности должен возвращаться нейтральный элемент. Вот скажи, к примеру, какое число должно возвращаться при суммировании пустой последовательности?
0
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,282
Записей в блоге: 2
Завершенные тесты: 1
31.03.2012, 17:45 #9
Nameless One, произведение 0 чисел равно 0.
1
Nameless One
Эксперт С++
5774 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
31.03.2012, 17:46 #10
Dani, где такое сказано?
0
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
31.03.2012, 17:47 #11
Цитата Сообщение от Nameless One Посмотреть сообщение
Dani, где такое сказано?
первый аргумент складывается столько раз, сколько показывает второй
Если аргументов 0, то результат сложения 0 по идее. Мне кажется, что особый случай надо просто отдельно описать и выводить сообщение об этом
0
Nameless One
Эксперт С++
5774 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
31.03.2012, 17:52 #12
Nekto, у нас с Dani вообще-то речь про произведение идет. И да:

Цитата Сообщение от Nekto Посмотреть сообщение
Если аргументов 0, то результат сложения 0 по идее
как ни странно, если аргументов ноль, то ни одной операции сложения вообще не происходит. Но возвращается ноль. А почему? Потому, что ноль — это нейтральный элемент (identity) для операции сложения. И это логично.
0
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
31.03.2012, 17:55 #13
Цитата Сообщение от Nameless One Посмотреть сообщение
Nekto, у нас с Dani вообще-то речь про произведение идет.
"В арифметике под умножением понимают краткую запись суммы одинаковых слагаемых." (с) википедия
0
Nameless One
Эксперт С++
5774 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
31.03.2012, 17:59 #14
Nekto, круто. А теперь скажи, как связано выражение http://www.cyberforum.ru/cgi-bin/latex.cgi?a \cdot 0
с выражением http://www.cyberforum.ru/cgi-bin/latex.cgi?\prod \limits_{i=1}^{n} a_n для http://www.cyberforum.ru/cgi-bin/latex.cgi?i = 0?
Я что-то при нахождении произведения элементов [пустой] последовательности нигде не вижу умножения на ноль. И где мы при этом пользуемся этим правилом:
Цитата Сообщение от Nekto Посмотреть сообщение
первый аргумент складывается столько раз, сколько показывает второй
?
0
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,282
Записей в блоге: 2
Завершенные тесты: 1
31.03.2012, 18:04 #15
Цитата Сообщение от Nameless One Посмотреть сообщение
Dani, где такое сказано?
Nameless One, встречно: где сказано, что 1?

Добавлено через 2 минуты
Nekto, хотел сказать, что из начально курса арифметики известно, что a*b = a+a+a... b раз. Следовательно, если a=0, b=2. У 2 детей есть 0 яблок. Всего яблоко 1 чтоли?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.03.2012, 18:04
Привет! Вот еще темы с ответами:

Вычислить произведение отрицательных элементов массива - C++
Дан массив из n элементов (вещественные числа). Вычислить: 1) произведение отрицательных элементов массива 2) сумму элементов массива,...

Вычислить сумму отрицательных элементов массива и произведение элементов, расположенных между максимальным и минимальным элементами - C++
Помогите пожалуйста в одномерном массиве, состоящих из вещественных элементов вычислить: 1)сумму отрицательных элементов массива ...

Вычислить произведение отрицательных, и сумму положительных элементов массива - C++
В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1) произведение отрицательных элементов массива; 2) сумму...

В одномерном массиве вычислить сумму отрицательных элементов, произведение элементов массива между максимальным и минимальным элементами - C++
В одномерном массиве, состоящем из 25 вещественных элементов, вычислить: 1) сумму отрицательных элементов массива; 2) произведение...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
31.03.2012, 18:04
Закрытая тема Создать тему
Опции темы

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