Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/58: Рейтинг темы: голосов - 58, средняя оценка - 4.67
1 / 1 / 0
Регистрация: 30.03.2012
Сообщений: 82
1

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

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

Author24 — интернет-сервис помощи студентам
Написать рекурсивную функцию возвращающую произведение отрицательных элементов массива
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.03.2012, 15:36
Ответы с готовыми решениями:

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

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

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

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

54
12 / 12 / 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 ;                                                //Если вышли за рамки массива, прекращаем расчет
}
4
1 / 1 / 0
Регистрация: 30.03.2012
Сообщений: 82
31.03.2012, 16:28  [ТС] 3
DoZZer_, спасибо за ответ.
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
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
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
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/... b1b00f638f

Добавлено через 45 секунд
Nameless One, а если нет отрицательных?
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
31.03.2012, 16:58 6
Цитата Сообщение от go Посмотреть сообщение
Nameless One, а если нет отрицательных?
как и положено, вернет единицу — нейтральный элемент по умножению. А что, должен быть другой результат?
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
31.03.2012, 17:21 7
Nameless One, А если в массиве два отрицательных элемента (оба минус единица). результат тотже? Вывод: при отсутствии отрицательных элементов, должно вернутся ноль. Это вполне логично.
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
31.03.2012, 17:33 8
Цитата Сообщение от go Посмотреть сообщение
А если в массиве два отрицательных элемента (оба минус единица). результат тотже?
конечно

Цитата Сообщение от go Посмотреть сообщение
Вывод: при отсутствии отрицательных элементов, должно вернутся ноль. Это вполне логично.
я согласился бы, если бы это бы это было в задании. Но так как про это ничего не сказано, при свертке последовательности должен возвращаться нейтральный элемент. Вот скажи, к примеру, какое число должно возвращаться при суммировании пустой последовательности?
0
1405 / 647 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
31.03.2012, 17:45 9
Nameless One, произведение 0 чисел равно 0.
1
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
31.03.2012, 17:46 10
Dani, где такое сказано?
0
347 / 292 / 37
Регистрация: 23.03.2012
Сообщений: 838
31.03.2012, 17:47 11
Цитата Сообщение от Nameless One Посмотреть сообщение
Dani, где такое сказано?
первый аргумент складывается столько раз, сколько показывает второй
Если аргументов 0, то результат сложения 0 по идее. Мне кажется, что особый случай надо просто отдельно описать и выводить сообщение об этом
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
31.03.2012, 17:52 12
Nekto, у нас с Dani вообще-то речь про произведение идет. И да:

Цитата Сообщение от Nekto Посмотреть сообщение
Если аргументов 0, то результат сложения 0 по идее
как ни странно, если аргументов ноль, то ни одной операции сложения вообще не происходит. Но возвращается ноль. А почему? Потому, что ноль — это нейтральный элемент (identity) для операции сложения. И это логично.
0
347 / 292 / 37
Регистрация: 23.03.2012
Сообщений: 838
31.03.2012, 17:55 13
Цитата Сообщение от Nameless One Посмотреть сообщение
Nekto, у нас с Dani вообще-то речь про произведение идет.
"В арифметике под умножением понимают краткую запись суммы одинаковых слагаемых." (с) википедия
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
31.03.2012, 17:59 14
Nekto, круто. А теперь скажи, как связано выражение https://www.cyberforum.ru/cgi-bin/latex.cgi?a \cdot 0
с выражением https://www.cyberforum.ru/cgi-bin/latex.cgi?\prod \limits_{i=1}^{n} a_n для https://www.cyberforum.ru/cgi-bin/latex.cgi?i = 0?
Я что-то при нахождении произведения элементов [пустой] последовательности нигде не вижу умножения на ноль. И где мы при этом пользуемся этим правилом:
Цитата Сообщение от Nekto Посмотреть сообщение
первый аргумент складывается столько раз, сколько показывает второй
?
0
1405 / 647 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
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
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
31.03.2012, 18:11 16
Nameless One, исходя из условия, очевидно, что существует только одно число, которого мы не при каких раскладах не получим - это число 0. (Если в массиве присутствует хотя бы один отрицательный элемент). Из этого следует, что число 0 мы можем использовать для обозначения, какой-нибудь ситуации(ошибочной и т.д.). В данном случае мы используем его, как признак отсутствия отрицательных элементов. Да и по смыслу это подходит.
0
347 / 292 / 37
Регистрация: 23.03.2012
Сообщений: 838
31.03.2012, 18:13 17
ИМХО если элементов нету, то это равносильно умножению пустого множества на пустое множество, что на выходе должно давать пустое множество, а не нейтральный элемент.
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
31.03.2012, 18:22 18
Dani, потому, что единица — это нейтральный элемент по умножению (о чем я уже говорил).

Вот пара примеров. Haskell, считающийся «академичным» языком программирования:

Haskell
1
2
3
4
> product [1,2,3]
6
> product []
1
Octave — (Matlab-совместимый) _математический_ пакет:

Код
[~/samples/c]$ prod([1 2 3])
ans =  6
[~/samples/c]$ prod([])
ans =  1
[~/samples/c]$
Эти примеры говорят сами за себя

Цитата Сообщение от Dani Посмотреть сообщение
Nekto, хотел сказать, что из начально курса арифметики известно, что a*b = a+a+a... b раз. Следовательно, если a=0, b=2. У 2 детей есть 0 яблок. Всего яблоко 1 чтоли?
  1. я прекрасно понял, что он хотел сказать
  2. вот что я не понял, так это то, как связано умножение _на_ ноль с умножением нуля множителей. Может ты объяснишь?
  3. аналогии с яблоками (тем более, что твоя аналогия неправильная, т.к. ты опять путаешь умножение с сложением) нормально работают только для натуральных чисел

Добавлено через 48 секунд
Цитата Сообщение от Nekto Посмотреть сообщение
ИМХО если элементов нету, то это равносильно умножению пустого множества на пустое множество
это твои домыслы. Несогласен — аргументируй. Я свою позицию по этому утверждению изложить могу. И да, что под умножением подразумевается? Декартово произведение?

Добавлено через 4 минуты
Цитата Сообщение от go Посмотреть сообщение
В данном случае мы используем его, как признак отсутствия отрицательных элементов
если это присутствует в задании — Б-га ради. Я говорил про то, что в общем случае таких ситуаций не существует
0
1405 / 647 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
31.03.2012, 18:24 19
Просто из вопроса логики:
ничто повторенное нисколько раз будет ничто, а не что-то
1
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
31.03.2012, 18:25 20
Цитата Сообщение от Nameless One Посмотреть сообщение
что в общем случаи
Вот тут и оно. Следует решать задачи в общем случае, т.е. использовать признак отсутствия отрицательных элементов. Если сделать оговорку, что в массиве обязательно есть хотя бы 1 отрицательный элемент, тогда да. Но как я уже отметил выше, задачи необходимо решать в общем случае.
0
31.03.2012, 18:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.03.2012, 18:25
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Закрытая тема Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru