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

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

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

Студворк — интернет-сервис помощи студентам
Написать рекурсивную функцию возвращающую произведение отрицательных элементов массива
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.03.2012, 15:36
Ответы с готовыми решениями:

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

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

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

54
12 / 12 / 1
Регистрация: 09.08.2011
Сообщений: 53
31.03.2012, 16:07
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

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
 Аватар для ARTLINE-NN
1 / 1 / 0
Регистрация: 30.03.2012
Сообщений: 82
31.03.2012, 16:28  [ТС]
DoZZer_, спасибо за ответ.
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
31.03.2012, 16:39
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
Лучший ответ Сообщение было отмечено как решение

Решение

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

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

Цитата Сообщение от Nekto Посмотреть сообщение
Если аргументов 0, то результат сложения 0 по идее
как ни странно, если аргументов ноль, то ни одной операции сложения вообще не происходит. Но возвращается ноль. А почему? Потому, что ноль — это нейтральный элемент (identity) для операции сложения. И это логично.
0
347 / 292 / 37
Регистрация: 23.03.2012
Сообщений: 838
31.03.2012, 17:55
Цитата Сообщение от Nameless One Посмотреть сообщение
Nekto, у нас с Dani вообще-то речь про произведение идет.
"В арифметике под умножением понимают краткую запись суммы одинаковых слагаемых." (с) википедия
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
31.03.2012, 17:59
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
1406 / 648 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
31.03.2012, 18:04
Цитата Сообщение от 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
Nameless One, исходя из условия, очевидно, что существует только одно число, которого мы не при каких раскладах не получим - это число 0. (Если в массиве присутствует хотя бы один отрицательный элемент). Из этого следует, что число 0 мы можем использовать для обозначения, какой-нибудь ситуации(ошибочной и т.д.). В данном случае мы используем его, как признак отсутствия отрицательных элементов. Да и по смыслу это подходит.
0
347 / 292 / 37
Регистрация: 23.03.2012
Сообщений: 838
31.03.2012, 18:13
ИМХО если элементов нету, то это равносильно умножению пустого множества на пустое множество, что на выходе должно давать пустое множество, а не нейтральный элемент.
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
31.03.2012, 18:22
Dani, потому, что единица — это нейтральный элемент по умножению (о чем я уже говорил).

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

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

Code
1
2
3
4
5
[~/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
1406 / 648 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
31.03.2012, 18:24
Просто из вопроса логики:
ничто повторенное нисколько раз будет ничто, а не что-то
1
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
31.03.2012, 18:25
Цитата Сообщение от Nameless One Посмотреть сообщение
что в общем случаи
Вот тут и оно. Следует решать задачи в общем случае, т.е. использовать признак отсутствия отрицательных элементов. Если сделать оговорку, что в массиве обязательно есть хотя бы 1 отрицательный элемент, тогда да. Но как я уже отметил выше, задачи необходимо решать в общем случае.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.03.2012, 18:25
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Закрытая тема Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru