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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
fox_
0 / 0 / 0
Регистрация: 28.12.2011
Сообщений: 23
#1

Сумма элементов массива рекурсивно - C++

08.11.2012, 10:25. Просмотров 1475. Ответов 8
Метки нет (Все метки)

Опять все сначала((. Задача: соствить рекурсивную функцию, подсчета элементов одномерного массива, и затем в этой же функции заменить все элементы этого массива которые меньше нуля суммой этих элементов.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.11.2012, 10:25     Сумма элементов массива рекурсивно
Посмотрите здесь:

Вычислить сумму элементов массива рекурсивно - C++
Определить сумму элементов данного одномерного массива с использованием рекурсии.

Произведение n последних элементов массива рекурсивно - C++
задача на зачет.нужно реализовать рекурсивную функцию которая возвращает произведение n последних элементов массива.

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

Сумма произведений рекурсивно - C++
Помогите с функцией пожалуйста, решать и выдавать код не надо, просто мягко говоря, пните в нужном направлении. Запутался совсем. ЗЫ...

C++5 числами из массива при выборе операции показывает результат. (сумма, произведение . элементов массива) - C++
#include <iostream> using namespace std; void main() { int m, i; char type; double res; cout << "Input 5 numbers" <<...

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
08.11.2012, 11:18     Сумма элементов массива рекурсивно #2
ваши хотя бы какие нибудь решения есть?
fox_
0 / 0 / 0
Регистрация: 28.12.2011
Сообщений: 23
08.11.2012, 11:35  [ТС]     Сумма элементов массива рекурсивно #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int su(int a[3], int b)
{
    if (b!=0)
    {
    
    if (a[b]<0) 
        {
        a[b]=a[b-1]+su(a,b-1);
        printf("%d",a[1]);
        }
    }
return sum;
}
 
void main()
{
    int a[3] = {1,-1,5};
    su(a,3);
    _getch();
}
Но сам понимаю что хрень...
ZubSam
12 / 12 / 1
Регистрация: 24.03.2012
Сообщений: 238
08.11.2012, 12:34     Сумма элементов массива рекурсивно #4
Цитата Сообщение от fox_ Посмотреть сообщение
соствить рекурсивную функцию, подсчета элементов одномерного массива, и затем в этой же функции заменить все элементы этого массива которые меньше нуля суммой этих элементов.
то есть сначала , подсчитать кол-во элементов, потом заменить все элементы массива которые меньше нуля, суммой элементов которые меньше нуля или суммой всех элементов ?
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
08.11.2012, 12:55     Сумма элементов массива рекурсивно #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int sum(int *a,int n){
    if(n>0)
        return a[n]+sum(a,n-1);
    else
        return a[n];
}
 
void main(){
    printf("Vvedite razmer massiva: ");
    int n;
    scanf("%d",&n);
    int *a=new int[n];
    for(int i=0;i<n;i++)
        scanf("%d",&a[i]);
    printf("Summa ravna: %d\n",sum(a,n-1));
    printf("Mas: ");
    for(int i=0;i<n;i++)
       printf("%d ",a[i]);
}
но как в ЭТОЙ ЖЕ рекурсивной функции поменять значения ума не приложу...
как бы не делался счет с последнего элемента или с первого вы сначала берете первый/последний элемент, это есть ваша сумма, потом берете второй/предпоследний элемент и у вас сумма эти 2 элемента и т.д т.е сумма все время меняется и на "обратном ходу" у рекурсии будет опять же разные суммы...
fox_
0 / 0 / 0
Регистрация: 28.12.2011
Сообщений: 23
09.11.2012, 11:43  [ТС]     Сумма элементов массива рекурсивно #6
Цитата Сообщение от ZubSam Посмотреть сообщение
то есть сначала , подсчитать кол-во элементов, потом заменить все элементы массива которые меньше нуля, суммой элементов которые меньше нуля или суммой всех элементов ?
Нет заменить суммой всех элементов, элементы которые меньше нуля. И все в одной функции.



Добавлено через 1 минуту
Цитата Сообщение от MrGrig Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int sum(int *a,int n){
    if(n>0)
        return a[n]+sum(a,n-1);
    else
        return a[n];
}
 
void main(){
    printf("Vvedite razmer massiva: ");
    int n;
    scanf("%d",&n);
    int *a=new int[n];
    for(int i=0;i<n;i++)
        scanf("%d",&a[i]);
    printf("Summa ravna: %d\n",sum(a,n-1));
    printf("Mas: ");
    for(int i=0;i<n;i++)
       printf("%d ",a[i]);
}
но как в ЭТОЙ ЖЕ рекурсивной функции поменять значения ума не приложу...
как бы не делался счет с последнего элемента или с первого вы сначала берете первый/последний элемент, это есть ваша сумма, потом берете второй/предпоследний элемент и у вас сумма эти 2 элемента и т.д т.е сумма все время меняется и на "обратном ходу" у рекурсии будет опять же разные суммы...
Как подсчитать саму сумму то понятно, и это просто, а вот как в этой же заменить... не понимаю...

Добавлено через 21 час 57 минут
Так ни у кого не появилось идеи?
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
09.11.2012, 11:54     Сумма элементов массива рекурсивно #7
Цитата Сообщение от fox_ Посмотреть сообщение
Так ни у кого не появилось идеи?
Какая тут идея? Вы нарисуйте себе схему, что происходит во время рекурсии вообще(не в этой программе).
Материал для размышлений:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
 
void PrintNumber(int num){
    std::cout<<num<<std::endl;
    if(num>0)
        PrintNumber(num-1);
    std::cout<<num<<std::endl;
}
 
int main(){
    PrintNumber(10);
    std::cin.get();
}
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
09.11.2012, 11:58     Сумма элементов массива рекурсивно #8
Ну как, именно так, как и сказано: на обратном ходу. Главное, чтобы сумма обратно передавалась перед заменой, а сама замена начиналась после прохода рекурсии до конца массива.
C++
1
2
3
4
5
6
7
8
9
10
11
int sum_replace(int array[], int size, int sum = 0)
{
    if (size == 0) {
        return sum;
    }
    sum = sum_replace(array + 1, size - 1, *array + sum);
    if (*array < 0) {
        *array = sum;
    }
    return sum;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.11.2012, 00:18     Сумма элементов массива рекурсивно
Еще ссылки по теме:

Сумма элементов массива - C++
Для каждой строки подсчитать сумму элементов, не попадающих в заданный интервал, и записать данные в новый массив.

Сумма элементов массива - C++
Подскажите, можно как то упростить следующую строку? STUD1.SES+STUD1.SES+STUD1.SES+STUD1.SES+STUD1.SES

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

Сумма элементов массива - C++
Ребят тут с заданием не могу понять, найти сумму 1-го, 4-го, 9-го элементов,..., k^2 элементов вектора X; k^2&lt;=n; Если работать с...

Сумма элементов массива - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int main() { int n; cout&lt;&lt;&quot;Enter number:&quot;&lt;&lt;endl; cin&gt;&gt;n; int...


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

Или воспользуйтесь поиском по форуму:
fox_
0 / 0 / 0
Регистрация: 28.12.2011
Сообщений: 23
16.11.2012, 00:18  [ТС]     Сумма элементов массива рекурсивно #9
Спасибо всем. Очень помогло.
Yandex
Объявления
16.11.2012, 00:18     Сумма элементов массива рекурсивно
Ответ Создать тему
Опции темы

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