I have the code for the first part of a problem, which is to write a program that reads an angle x (in radians) from the keyboard. Then, in a function, compute the cosine of the angle using the first five terms of this series. Print the value computed along with the value of the cosine computed using the C++ library function.

However, I need help modifying the program so that the approximation uses terms from the series as long as the absolute value of a term is greater than 0.0001. Also, print the number of terms used in the series approximation.

I am new to programming and appreciate any help. Thanks!

// Pre-processor Directives
#include<iostream> // Required for for use of cin, cout
#include<cmath> // Required for use of sin, cos, pow functions

// using directives
using namespace std;

// PROGRAM STARTS HERE!
double cosine(double angle);
long factorial(long n);

// Declaration of the main function
int main()
{

    double angle;

    // Ask for user input
    cout << "Enter the angle in radians: ";
    cin >> angle;

    // Display the result
    cout << "The calculated cosine of " << angle << " is " << cosine(angle) << endl;
    cout << "The C++ cosine of " << angle << " is " << cos(angle) << endl;

    // Exit program.
    system("PAUSE");
    return 0;
}

double cosine(double angle)
{
    // Declare the variables
    double x=0;
    double i;

    /* formula
     x = 1 - pow(angle, 2)/factorial(2) + pow(angle, 4)/factorial(4) -
     pow(angle, 6)/factorial(6) + pow(angle, 8)/factorial(8);*/

    // For Loop
    for (i=2; i<=8; i+=2)
    {
        if (i==4 || i==8)
        {
         x = x + pow(angle, i)/factorial(i);
        }
        else
        {
         x = x - pow(angle, i)/factorial(i);
        }
    }

    return 1+x;
}

long factorial(long n)
{
    if (n <= 1)
    {
        return 1;
    }
    else
    {
    return (n * factorial(n-1));
    }
}

See that part of your code where you add the next term? Add the next term IF the next term is greater than 0.0001

Not exactly sure what you mean.. I don't think this is right.

 for (i=2; i<=8; i+=2)
    {
        if (i==4 || i==8)
        {
         x = x + pow(angle, i)/factorial(i);
            if (x>.0001)
            {
                 x = x + pow(angle, i)/factorial(i);
            }
        }
        else
        {
         x = x - pow(angle, i)/factorial(i);
            if (x>.0001)
            {
                x = x + pow(angle, i)/factorial(i);
            }
        }
    }

Why not write your for loop something like this?

for (i=2; i<=8; i+=2)
    {

         toadd = pow(-1, i-1)*pow(angle, i)/factorial(i);
        // Test also if abs x is still greater then a set value
        // before adding as Moschops proposed
        x = x + toadd;
    }

okay thank you. How do I print the number of terms used in the series approximation?

Simply use an extra counter in your loop.

Is this correct?

double cosine(double angle)
{
    // Declare the variables
    double x=0;
    double i;
    double temp;
    int count = 0;

    /* formula
     x = 1 - pow(angle, 2)/factorial(2) + pow(angle, 4)/factorial(4) -
     pow(angle, 6)/factorial(6) + pow(angle, 8)/factorial(8);*/

    // For Loop
    for (i=2; i<=8; i+=2)
    {
        temp = pow(-1, i-1)*pow(angle, i)/factorial(i);
        // Test also if abs x is still greater then a set value

        if (temp >.0001)
        {
            x = x + temp;
            count++;
        }
    }    
    return 1+x;
}

Cout << "There were " << count << " numbers of terms used in the series approximation. "<< endl;

Also I need help translating this into pseudo code.

Well try to make coments and that would be pseudo code.
But if it is for school I don't know how your techer like it, or what he would like to consider as the pseudo code.
Is there faster way to count that, I would like to hear it form the expert in that fild.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.