0 / 0 / 0
Регистрация: 20.12.2012
Сообщений: 5
1

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

30.06.2013, 17:13. Показов 4996. Ответов 9
Метки нет (Все метки)

Имеется массив, скажем, из 10 элементов. Нужно просуммировать элементы массива по каскадной схеме (складываются два первых элемента, потом ещё два... затем складывается сумма попарных элементов и т.д.). Как я понял, тут цикл в цикле должен быть. Но не могу сообразить.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.06.2013, 17:13
Ответы с готовыми решениями:

Не могу понять как написать каскадную рекурсию
Для заданного одномерного массива A из N элементов найти значение минимального элемента массива и...

Реализовать в цикле формулу со знаком суммирования
Здравствуйте! Не могу реализовать формулу, где стоит знак суммирования, при помощи цикла. У меня...

Реализовать программу суммирования элементов массива по условию
Необходимо написать программу которая будет суммировать значения одномерного массива в пределах от...

Как реализовать схему в EWB?
Всем доброго времени суток. Нужна помощь по Electric WorkBench (или посоветуйте другую...

9
36 / 36 / 2
Регистрация: 28.04.2013
Сообщений: 110
30.06.2013, 22:47 2
ммм.... как я понял, если Вам необходимо вывести результат суммы, то можно просто просуммировать все элементы безо всяких каскадов =) сумма двух вещественных чисел обладает свойством коммутативности =)

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

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

немного подшаманив процедурку можно каскадную сумму сделать.
0
0 / 0 / 0
Регистрация: 20.12.2012
Сообщений: 5
01.07.2013, 11:00  [ТС] 5
el_gato_de_Ch, благодарю. Может как-нибудь поможет.
0
Эксперт С++
4264 / 2238 / 203
Регистрация: 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);
}
0
Заблокирован
Автор 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
//https://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;
}
Миниатюры
Как реализовать каскадную схему суммирования?  
1
0 / 0 / 0
Регистрация: 20.12.2012
Сообщений: 5
02.07.2013, 17:43  [ТС] 8
-=ЮрА=-, отлично! То, что нужно, спасибо
0
Эксперт С++
4264 / 2238 / 203
Регистрация: 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;
}
1
0 / 0 / 0
Регистрация: 20.12.2012
Сообщений: 5
03.07.2013, 08:54  [ТС] 10
Thinker, тоже интересный вариант))
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.07.2013, 08:54
Помогаю со студенческими работами здесь

Подскажите, как реализовать схему

Как реализовать такую схему выборки данных
Есть выпадающий список $cat = dbquery(&quot;SELECT * FROM название_таблицы&quot;); $cat2 = dbquery(&quot;SELECT...

Как реализовать блок-схему на с++ с помощью while или do-while
как реализовать такую блок-схему на с++? с помощью while или do-while?

Как реализовать схему с WI-FI интернетом.Общажный провайдер
Всем добрый вечер. Я живу в общежитии от универа.И в нашем общежитии нету нормального интернета...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru