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

Как сложить ряд чисел? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
Frost_Burn
0 / 0 / 0
Регистрация: 08.07.2013
Сообщений: 15
08.07.2013, 19:54     Как сложить ряд чисел? #1
Даны натуральное число n, действительные числа http://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{1},...,{a}_{n}. Вычислить http://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{1}+,...,+{a}_{n} .
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mиxaил
 Аватар для Mиxaил
530 / 435 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
09.07.2013, 12:11     Как сложить ряд чисел? #2
C++
1
2
3
4
double sum = 0.0;
for( int index = 0; index < n; ++index )
    sum += a[ index ];
std::cout << sum << std::endl;
-=ЮрА=-
09.07.2013, 12:59
  #3

Не по теме:

Mиxaил, зачем префексный инкремент, с постфиксным результат был бы аналогичный?
https://ideone.com/TkKRt3
Зачем std:: чтобы кода больше было?
Зачем

double sum = 0.0;
если достаточно double sum = 0; - слышал о явных и неявных преобразованиях типов?

Mиxaил
09.07.2013, 13:06
  #4

Не по теме:

-=ЮрА=-, зачем этот пост? Кто-то меня собрался учить?!

taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
09.07.2013, 13:14     Как сложить ряд чисел? #5
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Mиxaил, зачем префексный инкремент, с постфиксным результат был бы аналогичный?
https://ideone.com/TkKRt3
Зачем std:: чтобы кода больше было?
А разве с постфиксным его меньше?

Добавлено через 4 минуты
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
если достаточно double sum = 0; - слышал о явных и неявных преобразованиях типов?
А нафига вообще приводить тип константы, когда можно сразу поставить нужный тип? Ты хоть в курсе, что приведение инта к даблу требует операций, а значит и времени? В случае переменной деваться некуда. А с константой зачем нагружать камень? Ладно, пусть компилятор оптимизирует такое до
C++
1
double summ=0.0;
, но даже это занимает время на этапе компиляции. И каждый раз при перекомпиляции функции, а ручная оптимизация делается один раз. Так зачем нагружать оптимизватор, когда знаешь, что именно он сделает?
ValeryS
Модератор
6376 / 4842 / 443
Регистрация: 14.02.2011
Сообщений: 16,045
09.07.2013, 13:27     Как сложить ряд чисел? #6
Цитата Сообщение от Frost_Burn Посмотреть сообщение
Даны натуральное число n, действительные числа
что за числа
по какому закону определяются

если это арифметическая прогрессия, то
S=(A1+An)*n/2
для геометрической
S=A1(q^n-1)/(q-1);
q шаг прогрессии

для случайных чисел тупое суммирование в цикле
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
09.07.2013, 13:32     Как сложить ряд чисел? #7
вот интересно, как в этой простейшей задаче уменьшить использования переменной-индекса. например,
C++
1
2
for(sum = i = 0; i < n; sum += a[i++])
   ;
а вот сделать на каждом шаге итерации не два обращения к переменной i, а один, реально ли?... вряд ли...
kaludis
 Аватар для kaludis
2 / 2 / 0
Регистрация: 18.05.2012
Сообщений: 12
09.07.2013, 16:29     Как сложить ряд чисел? #8
C
1
2
int total = 0, i = sizeof(a) / sizeof(int);
while (i-- && (total += a[i]));
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
09.07.2013, 16:31     Как сложить ряд чисел? #9
Цитата Сообщение от kaludis Посмотреть сообщение
C
1
2
int total = 0, i = sizeof(a) / sizeof(int);
while (i-- && (total += a[i]));
все равно два обращения к i на каждом шаге итерации
duhast_vladisla
Заблокирован
09.07.2013, 16:38     Как сложить ряд чисел? #10
Цитата Сообщение от Thinker Посмотреть сообщение
а вот сделать на каждом шаге итерации не два обращения к переменной i, а один, реально ли?... вряд ли...
C++
1
2
3
4
i = size;
 
for (int * end = begin + (i - 1); i--; --end)
    sum += *end;
kaludis
 Аватар для kaludis
2 / 2 / 0
Регистрация: 18.05.2012
Сообщений: 12
09.07.2013, 16:43     Как сложить ряд чисел? #11
C++
1
for (int total = 0, *begin = a, *end = &a[sizeof(a)/sizeof(int)]; begin != end; total += *(begin++));
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
09.07.2013, 16:44     Как сложить ряд чисел? #12
Цитата Сообщение от duhast_vladisla Посмотреть сообщение
C++
1
2
3
4
i = size;
 
for (int * end = begin + (i - 1); i--; --end)
    sum += *end;
не смешно. все через индексацию. чего уж сразу не так:
C++
1
2
3
int a[N], *pa = a, *end = a + N;
for(sum = 0; pa < end; sum += *pa++)
   ;
duhast_vladisla
Заблокирован
09.07.2013, 16:47     Как сложить ряд чисел? #13
Цитата Сообщение от Thinker Посмотреть сообщение
а вот сделать на каждом шаге итерации не два обращения к переменной i, а один, реально ли?
да, реально.
Если можно использовать стек, то лучше использовать стек, а не индексацию.

Добавлено через 1 минуту
Цитата Сообщение от Thinker Посмотреть сообщение
не смешно. все через индексацию. чего уж сразу не так
Надо же было под Ваше условие подогнать.
Цитата Сообщение от duhast_vladisla Посмотреть сообщение
не два обращения к переменной i, а один
Mиxaил
 Аватар для Mиxaил
530 / 435 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
09.07.2013, 16:53     Как сложить ряд чисел? #14
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
int main( int argc, char **argv )
{
    int *arr = new int [ 5 ], i = 0;
    int *pointer = arr;
 
    for( int index = 0; index < 5; ++index )
        arr[ index ] = index + 1;
    
    while( i++ < 5 )
        std::cout << *( arr++ ) << std::endl;
 
    delete []pointer;
 
    return 0;
}
Добавлено через 5 минут
C++
1
2
int sum = 0, i = 0;
while( i++ < 5 ) sum += *( arr++ );
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
09.07.2013, 16:55     Как сложить ряд чисел? #15
Цитата Сообщение от duhast_vladisla Посмотреть сообщение
да, реально.
Если можно использовать стек, то лучше использовать стек, а не индексацию.
наверное, Вы хотели сказать адресацию. Это все и дети знают про индексацию и адресацию массивов и что во время компиляции первое приводится ко второму и бла-бла-бла... Вопрос был в том, что можно ли, не прибегая к адресам, индекс использовать ровно один раз на каждом шаге итерации эквивалентный вопрос: можно ли на каждом шаге итерации использовать ровно один раз обращение вида *a, не используя индексы.
Mиxaил
 Аватар для Mиxaил
530 / 435 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
09.07.2013, 17:01     Как сложить ряд чисел? #16
Thinker, чем мой последний вариант не подходит? Вполне простое решение.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
09.07.2013, 17:05     Как сложить ряд чисел? #17
Цитата Сообщение от Thinker Посмотреть сообщение
обращение вида *a, не используя индексы.
имеется ввиду pa (адрес текущего элемента) использовать ровно 1 раз

Добавлено через 36 секунд
Цитата Сообщение от Mиxaил Посмотреть сообщение
Thinker, чем мой последний вариант не подходит? Вполне простое решение.
это все понятно. а вот либо одно, либо другое, не совмещая
ValeryS
Модератор
6376 / 4842 / 443
Регистрация: 14.02.2011
Сообщений: 16,045
09.07.2013, 17:17     Как сложить ряд чисел? #18
Thinker,
чей то я не понял чего ты добиваешься
вот этого что ли
C++
1
2
for(int i=0;i<n;i++)
 sum+=*(a++);
ну это глупо
можно вот так
C++
1
2
while(n--)
 summ1+=*(a++);
ну здесь тоже можно сказать два раза oдин раз к копии другой к указателю
можно с конца
C++
1
2
3
4
5
6
int data[7];
int n=7;
int * a;
a=data+n;
while(n--)
 summ2+=*(--a);
вот так вроде один

Добавлено через 1 минуту
Цитата Сообщение от kaludis Посмотреть сообщение
while (i-- && (total += a[i]));
а что будет если массив будет типа такого
2 -1 1?
kaludis
 Аватар для kaludis
2 / 2 / 0
Регистрация: 18.05.2012
Сообщений: 12
09.07.2013, 17:19     Как сложить ряд чисел? #19
Это решение для вопроса о единичном использовани индексации не подходит.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.07.2013, 17:24     Как сложить ряд чисел?
Еще ссылки по теме:

Сложить первых 5 чисел. И, если сумма < 100, то с 6 по 10 элемент отсортировать пузырьком C++
Сложить попарно элементы массива, последний сложить с первым C++
Как нужно задать условие, чтобы при последовательном рандомном выводе чисел в ряд ни одно из них не повторялос C++

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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6376 / 4842 / 443
Регистрация: 14.02.2011
Сообщений: 16,045
09.07.2013, 17:24     Как сложить ряд чисел? #20
можно с начала ну это уже издевательство над указателями

C++
1
2
3
a--;
while(n--)
 summ1+=*(++a);
Добавлено через 2 минуты
Цитата Сообщение от kaludis Посмотреть сообщение
Это решение для вопроса о единичном использовани индексации не подходит.
почему???
n никакого отношения к индексации не имеет
Yandex
Объявления
09.07.2013, 17:24     Как сложить ряд чисел?
Ответ Создать тему
Опции темы

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