2016-01-24 1 views
-1

Screenshot of my codeсоздавая вверх серию в C++

Эй, я только начал изучать C++, и я пытаюсь получить его просуммировать ряд:

K + N-1Σn = K [ -1^(n)/(n + 1) 2]

Мне удалось получить его, чтобы сказать мне n-ый термин ранее, но теперь я хотел бы получить для каждого термина в серии, начиная с kth и переходя к последовательности (k + n-1), добавьте этот термин в текущую сумму.
Мне нужно использовать функцию direct_up(), которая использует функцию term(). Сначала я определил и проверил его в основном.

Я знаю, что у меня что-то не хватает, и я немного смущен тем, как использовать функции и что я, возможно, допустил несколько ошибок. Поэтому я был бы очень благодарен за некоторые советы или помощь. Я прикрепил картину того, что я сделал до сих пор, а также набрал ее ниже.

using namespace std; 

double term(int n) { 
    double y; 
    if(n%2==1) { 
     y = -1.0/((n+1.0)*(n+1.0)); 
    } else { 
     y = 1.0/((n+1.0)*(n+1.0)); 
    } 
    return y; 
} 

double direct_up(int k, int n) { 
    int startingnumber = k; 
    for (int i = startingnumber; i <= k+n; i++) { 
     cout << n << term(n) << endl; 
    } 
    return n; 
} 

int main() { 
    double n; 
    int k; 
    cout.precision(16); 
    cout << "enter number of terms"; 
    cin >> n; 
    cout << "enter a value for k"; 
    cin >> k; 
    cout << "here is the value" << direct_up(k,n); 

    return 0; 
} 
+0

функция Tour 'термин() 'может выглядеть несколько лучше; например, с помощью '#include ' вы могли бы написать 'double y = std :: pow (-1, n)/std :: pow (n + 1,2);' – RHertel

+0

да, мне просто сказали использовать iostream для держите это просто, но спасибо! –

ответ

1

Это то, что вы хотите сделать:

double direct_up(int k, int n) 
{ 
    int startingnumber = k; 
    double sum = 0; 
    for (int i = startingnumber; i <= k+n; i++) { 
     sum += term(i); 
    } 
    return sum; 
} 

Вот как сделать это, не сохраняя свою собственную вычисляет сумму, как вы просили в своем комментарии:

#include <vector> 
#include <numeric> 

double direct_up(int k, int n) 
{ 
    int startingnumber = k; 
    std::vector<double> terms; 
    for (int i = startingnumber; i <= k+n; i++) { 
     terms.push_back(term(i)); 
    } 
    return accumulate(terms.begin(), terms.end(), 0.0); 
} 
+0

спасибо за ваш ответ, я добавил то, что вы дали, и оно скомпилировано, но моя программа возвращает 0 в качестве ответа независимо от того, какие значения я вставляю, могли бы вы понять, почему? –

+0

Спасибо, что сделал трюк !! Мне было интересно, есть ли способ сделать это, не используя «сумму»? или это единственный способ? –

+0

Да, вы можете использовать 'std :: accumulate', если вы не хотите сохранить свою текущую сумму. Я добавил это к моему ответу. –

Смежные вопросы