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

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

31.03.2012, 15:36. Показов 11608. Ответов 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
Закрытая тема Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru