user14471313
user14471313

Reputation:

Which algorithm should I use to calculate the given math sequence?

The user must enter a number n (1; infinity). Then the program does this:

cos1/sin1 * (cos1+cos2)/(sin1+sin2) * … * (cos1+cos2+...+cos⁡ n)/(sin1+sin2+...+sin ⁡n )

I tried to calculate that:

#include <iostream>
#include <math.h>
using namespace std;

int main()
{
int n;
double res;

cout << "Enter n: ";
cin >> n;

for (int i = 1; i < n; i++)
{
    res = cos(i) / sin(i);
}
cout << res;
}

But I don't know which algorithm would do it correctly.

Upvotes: 0

Views: 98

Answers (2)

molbdnilo
molbdnilo

Reputation: 66371

Since you need to divide the two sums in each step, you need to store those sums, and multiply an accumulating product with the result of dividing them.

int main()
{
    int n;
    cout << "Enter n: ";
    cin >> n;
    
    double cos_sum = 0.0;
    double sin_sum = 0.0;
    double res = 1.0;

    for (int i = 1; i <= n; i++)
    {
        cos_sum += cos(i);
        sin_sum += sin(i);
        res *= cos_sum / sin_sum;
    }
    cout << res;
}

Upvotes: 2

463035818_is_not_an_ai
463035818_is_not_an_ai

Reputation: 122298

There are basically three quantities that accumulate during the iteration. They are:

C[N] = cos1+cos2+cos3+cos3+ .... cosN
S[N] = sin1+sin2+sin3+sin3+ .... sinN
X[N] = C[1] / S[1] * C[2] / S[2] * ... C[N] / S[N]

The recursive relations are:

C[0] = 0
C[N + 1] = C[N] + cosN+1  
S[0] = 0
S[N + 1] = S[N] + sinN+1

X[0] = 1
X[N + 1] = X[N] * C[N+1] / S[N+1]

Using this it should be straightforward to write the loop:

#include <iostream>

int main() {
    int n;
    double X = 1;
    double C = 0;
    double S = 0;

    cout << "Enter n: ";
    cin >> n;

    for (int i = 1; i < n; i++) {
        C += cos(i);
        S += sin(i);
        X *= C / S;
    }
    cout << X;
}

Upvotes: 1

Related Questions