Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

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

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

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

Составить программу, в которой вычислить z=(s1+s2)/(k1*k2), где s1 и k1 - сумма и количество положительных элементов массива Х[N]; s1 u k2 - сумма - C++
Составить программу, в которой вычислить z=(s1+s2)/(k1*k2), где s1 и k1 - сумма и количество положительных элементов массива Х; s1 u k2 ...

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

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

8
MrGrig
177 / 160 / 2
Регистрация: 08.10.2012
Сообщений: 422
08.11.2012, 11:18 #2
ваши хотя бы какие нибудь решения есть?
0
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();
}
Но сам понимаю что хрень...
0
ZubSam
13 / 13 / 1
Регистрация: 24.03.2012
Сообщений: 238
08.11.2012, 12:34 #4
Цитата Сообщение от fox_ Посмотреть сообщение
соствить рекурсивную функцию, подсчета элементов одномерного массива, и затем в этой же функции заменить все элементы этого массива которые меньше нуля суммой этих элементов.
то есть сначала , подсчитать кол-во элементов, потом заменить все элементы массива которые меньше нуля, суммой элементов которые меньше нуля или суммой всех элементов ?
0
MrGrig
177 / 160 / 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 элемента и т.д т.е сумма все время меняется и на "обратном ходу" у рекурсии будет опять же разные суммы...
0
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 минут
Так ни у кого не появилось идеи?
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 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();
}
0
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 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;
}
1
fox_
0 / 0 / 0
Регистрация: 28.12.2011
Сообщений: 23
16.11.2012, 00:18  [ТС] #9
Спасибо всем. Очень помогло.
0
16.11.2012, 00:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.11.2012, 00:18
Привет! Вот еще темы с ответами:

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

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

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

Сумма элементов массива - 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...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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