2016-01-24 63 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

巡視功能'項()'看起來可能更好些;例如,通過使用'#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'。我已經添加到我的答案。 –