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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
AntiTerror
0 / 0 / 0
Регистрация: 20.12.2012
Сообщений: 5
#1

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

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

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

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

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

Реализовать блок-схему алгоритма - C++
Требования: 1) дополнительные функции не вводить 2) действие_0 и действие_1 не должны дублироваться в коде 3) goto не использовать ...

Как написать функцию суммирования двумерного массива, задаваемого с клавиатуры? - C++
Требуется ввести с клавиатуры массив, к примеру, 2Х3 и посчитать его сумму с помощью функции. Не могу понять, как правильно написать эту...

Задача на использование функции суммирования - C++
Описать функцию, которая вычисляет сумму элементов k-го столбца действительной матрицы A=({{a}_{ij}})_{mn} размером m*n.Для данной...

Написать функцию суммирования чисел в степени... - C++
Помогите пожалуйста!!! Напишите функцию Sum(n,k), которая по данным целым числам n и k вычисляет и возвращает значение суммы...

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

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

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

немного подшаманив процедурку можно каскадную сумму сделать.
0
AntiTerror
0 / 0 / 0
Регистрация: 20.12.2012
Сообщений: 5
01.07.2013, 11:00  [ТС] #5
el_gato_de_Ch, благодарю. Может как-нибудь поможет.
0
Thinker
Эксперт C++
4226 / 2200 / 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);
}
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
//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;
}
1
Миниатюры
Как реализовать каскадную схему суммирования?  
AntiTerror
0 / 0 / 0
Регистрация: 20.12.2012
Сообщений: 5
02.07.2013, 17:43  [ТС] #8
-=ЮрА=-, отлично! То, что нужно, спасибо
0
Thinker
Эксперт C++
4226 / 2200 / 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;
}
1
AntiTerror
0 / 0 / 0
Регистрация: 20.12.2012
Сообщений: 5
03.07.2013, 08:54  [ТС] #10
Thinker, тоже интересный вариант))
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.07.2013, 08:54
Привет! Вот еще темы с ответами:

Оператор суммирования (классы, перегрузка операторов) - C++
#include &lt;iostream&gt; class mat { public: mat() { var = 0; } mat(int a) { var = a; } ~mat() { } void set(int b) { var =...

Перегрузить оператор суммирования, не принадлежащий классу - C++
Перегруженный оператор суммирования, который не будет пренадлежать классу и будет работать с 2 объектами двумерных классов (наверное...

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

Рекурсивный способ суммирования последовательности чисел - C++
Необходимо написать программу, рекурсивный способ суммирования последовательных чисел: 0 1 2 3. Сумма = 6


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
03.07.2013, 08:54
Ответ Создать тему
Опции темы

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