Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

C++: Simple summation program won't work correctly

  1. Oct 9, 2011 #1
    1. The problem statement, all variables and given/known data
    Write a C++ program to determine and print the sum of the series (1/3 + 1/6 + 1/9 + ... + 1/(3*n)) for a given value of n. In case you don't see the patter, the series can also be written as 1/(3*1) + 1/(3*2) +1/(3*3)+ ... + 1/(3*n). The value of n should be given interactively through the terminal. (You won't get credit if you do not use loops)

    2. Relevant equations
    [itex]Series = \frac{1}{3} \sum^{n}_{k=1} \frac{1}{k}[/itex]

    3. The attempt at a solution
    //The following code gives me a final answer of 0. I can't understand why my FOR loop doesn't work. Please help!

    #include <iostream>
    #include <cmath>

    using namespace std;

    int main( void )
    int iN = 0;
    int iK = 1;

    cout << "Input a positive integer value for n for the summation of 1/(3k), from k=1 to k=n." << endl;
    cin >> iN;

    if(iN <= 0)
    cout << "Invalid value for n. Exiting..." << endl;
    return 0;
    double dSum=0.0;
    for(iK=1; iK <= iN; iK++)
    dSum += double(1/iK);
    cout << "The value of that summation is " << (1/3)*dSum << "." << endl;
    return 1;
  2. jcsd
  3. Oct 9, 2011 #2


    User Avatar

    Staff: Mentor

    1/iK is a result of dividing two integers, so it is integer as well - and it is always zero. Try 1./iK (dot added to force conversion on the expression to floating point).
  4. Oct 9, 2011 #3
    Oh! Thank you so much!!
  5. Oct 9, 2011 #4


    Staff: Mentor

    As Borek points out, the division you're doing is integer division. Although you are casting the result to double in the line
    Code (Text):
    dSum += double(1/iK);
    it's too late. The value calculated is 0, and all the cast does is convert 0 as an integer to 0.0 as a double.
  6. Oct 9, 2011 #5


    User Avatar
    Gold Member

    and I would add further that the issue of using differently typed variables can lead to MANY problems, not just the one exemplified in your specific case, so it's always best to specifically cast your variables into whatever the end result of any calculation is supposed to be [assuming that they are not already of that type]
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook