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

Как реализовать каскадную схему суммирования? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
AntiTerror
0 / 0 / 0
Регистрация: 20.12.2012
Сообщений: 5
30.06.2013, 17:13     Как реализовать каскадную схему суммирования? #1
Имеется массив, скажем, из 10 элементов. Нужно просуммировать элементы массива по каскадной схеме (складываются два первых элемента, потом ещё два... затем складывается сумма попарных элементов и т.д.). Как я понял, тут цикл в цикле должен быть. Но не могу сообразить.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
el_gato_de_Ch
35 / 35 / 1
Регистрация: 28.04.2013
Сообщений: 110
30.06.2013, 22:47     Как реализовать каскадную схему суммирования? #2
ммм.... как я понял, если Вам необходимо вывести результат суммы, то можно просто просуммировать все элементы безо всяких каскадов =) сумма двух вещественных чисел обладает свойством коммутативности =)

а если Вам всё-таки надо вывести сумму каждого каскада, то можно сделать рекурсивно.
AntiTerror
0 / 0 / 0
Регистрация: 20.12.2012
Сообщений: 5
01.07.2013, 10:22  [ТС]     Как реализовать каскадную схему суммирования? #3
Цитата Сообщение от el_gato_de_Ch Посмотреть сообщение
ммм.... как я понял, если Вам необходимо вывести результат суммы, то можно просто просуммировать все элементы безо всяких каскадов =) сумма двух вещественных чисел обладает свойством коммутативности =)

а если Вам всё-таки надо вывести сумму каждого каскада, то можно сделать рекурсивно.
Да, на выходе нужна сумма элементов. Но в том и вся загвоздка, что суммировать нужно не последовательно, а именно каскадно. Понять бы ещё, как осуществить эту рекурсию на программном уровне)) на пальцах вроде всё понятно
el_gato_de_Ch
35 / 35 / 1
Регистрация: 28.04.2013
Сообщений: 110
01.07.2013, 10:32     Как реализовать каскадную схему суммирования? #4
как пример можете посмотреть реализацию алгоритма quick sort, благо реализаций очень много, на любой вкус, прежде чем искать реализацию сперва ознакомьтесь с quick sort

немного подшаманив процедурку можно каскадную сумму сделать.
AntiTerror
0 / 0 / 0
Регистрация: 20.12.2012
Сообщений: 5
01.07.2013, 11:00  [ТС]     Как реализовать каскадную схему суммирования? #5
el_gato_de_Ch, благодарю. Может как-нибудь поможет.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
01.07.2013, 12:29     Как реализовать каскадную схему суммирования? #6
не совсем понял задание как конкретно требуется вычислить сумму. но одним из способов обработки данных, деля их предварительно на части, является метод "разделяй и властвуй". вот так выглядит ваша сумма с помощью данного метода

C++
1
2
3
4
int Sum(int *a, int l, int r)
{
   return l == r ? *a : Sum(a, l, (l+r)/2) + Sum(a, (l+r)/2 + 1, r);
}
-=ЮрА=-
Заблокирован
Автор FAQ
01.07.2013, 13:03     Как реализовать каскадную схему суммирования? #7
AntiTerror, задачка мне понравилась, даже заставила меня немного напрячь серое вещество. Держи
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
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
using namespace std;
 
//0 + 1 + 2 +...+ 8 + 9 == 45
//http://www.cyberforum.ru/cpp-beginners/thread915175.html
 
int main()
{
    int s     = 0;
    int arr[] = {0,1,2,3,4,5,6,7,8,9};
    int i, n  = sizeof(arr)/sizeof(arr[0]);
    for(i  = 0; i < n / 2; i++)
    {
        s += (arr[2*i] += arr[2*i + 1]);
        if( i + 1 == n / 2)
        {
            //сдвиг элементов с чётных позиций в первые
            //т.е имеем
            //1 1 5 3 9 5 13 7 17
            //и делаем
            //1 5 9 13 17
            for(i = 1; i < n / 2; i++)
                arr[i] = arr[2*i];
            n = n / 2;
            if( n > 2)
            {
                s = 0;
                //на первой итерации получаем
                //1,5,9,13,17
                if( n % 2)//17 - уже нечётный
                    s = arr[i - 1];//запомним его
                i = -1; 
            }
        }
    }
    cout<<"s = "<<s<<endl;
    return 0;
}
Миниатюры
Как реализовать каскадную схему суммирования?  
AntiTerror
0 / 0 / 0
Регистрация: 20.12.2012
Сообщений: 5
02.07.2013, 17:43  [ТС]     Как реализовать каскадную схему суммирования? #8
-=ЮрА=-, отлично! То, что нужно, спасибо
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
02.07.2013, 19:24     Как реализовать каскадную схему суммирования? #9
введение шага позволяет не использовать сдвиги.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
 
int main()
{
    int a[] = {0,1,2,3,4,5,6,7,8,9};
    int i, step, n  = sizeof(a) / sizeof(*a);
    for(step = 1; step < n; step *= 2)
       for(i = step; i < n; i += 2*step)
              a[i - step] += a[i];
    cout << "s = " << a[0] << endl;
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.07.2013, 08:54     Как реализовать каскадную схему суммирования?
Еще ссылки по теме:

C++ Перегрузить оператор суммирования, не принадлежащий классу
Реализовать блок-схему алгоритма C++
Задача на использование функции суммирования C++

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

Или воспользуйтесь поиском по форуму:
AntiTerror
0 / 0 / 0
Регистрация: 20.12.2012
Сообщений: 5
03.07.2013, 08:54  [ТС]     Как реализовать каскадную схему суммирования? #10
Thinker, тоже интересный вариант))
Yandex
Объявления
03.07.2013, 08:54     Как реализовать каскадную схему суммирования?
Ответ Создать тему
Опции темы

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