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

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

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

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

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

Опять все сначала((. Задача: соствить рекурсивную функцию, подсчета элементов одномерного массива, и затем в этой же функции заменить все элементы этого массива которые меньше нуля суммой этих элементов.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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Эксперт С++
 Аватар для Croessmah
12520 / 7082 / 797
Регистрация: 27.09.2012
Сообщений: 17,489
Записей в блоге: 2
Завершенные тесты: 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
~ Эврика! ~
 Аватар для OhMyGodSoLong
1240 / 989 / 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++
Произведение элементов массива с четными индексами, сумма элементов между первым и последним нулями C++
C++ C++5 числами из массива при выборе операции показывает результат. (сумма, произведение . элементов массива)

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

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

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