Search code examples
cfor-loopformula

How to calculate a geometric sequence in C


I'm trying to write a code that calculates something similar to a geometric sequence.

enter image description here

I thought i did it, but when i looked at the solution, it seemed like i was doing something completely different.

There is a little twist to it though, the X value is in range from Xmin to Xmax, which means xmin <= x <= xmax and has a step of Dx.

Here's my code:

#include <stdio.h>
#include <math.h>

void main(){

    double xmin, xmax, dx, x, n = 1;
    long s = 0;

    printf("Input xmin, xmax, dx: ");
    scanf("%lf%lf%lf", &xmin, &xmax, &dx);

    printf("\n       x          s\n=============================");

    for(x = xmin; x <= xmax; x += dx){
        s += pow(x,n);
        n++;
        printf("\n%10.3lf%10.3ld", x, s);
    }
}

Here is an example of what it outputs: (it goes from one to five, with a step of one)

enter image description here

Here's the actual solution, which i can't understand at all:

#include <stdio.h>

int main(){

    int n,i;
    double xmin, xmax, dx, x;

    printf("Input n: ");
    scanf("%d", &n);

    printf("Input xmin, xmax, dx: ");
    scanf("%lf%lf%lf", &xmin, &xmax, &dx);

    printf("\n       x          s\n=============================");

    for(x = xmin; x <= xmax; x += dx){
        double s = 0, p = 1;
        for(i = 1; i <= n; i++)
            s += (p *= x);
        printf("\n%10.3f%10.3f", x, s);
    }
    return 0;
}

And here's what it outputs: (I put n as 3 randomly, because i can't understand what it does)

enter image description here

My question is, what did i do wrong in my code? And why is there another loop in the solution with two variables that aren't even used anywhere? It seems the output of my code isn't wrong, but i can't even understand the output of the solution.


Solution

  • You have the main loop right, that being "for each value of x, from xmin to xmax, using dx as the step". However, you need to rethink how the algorithm works. Look back at the summation formula. Your answer is supposed to be calculated using the sum of x to the power of i, where i is every integer from 1 to n. So, when n = 3, your output should be equivalent to x^1 + x^2 + x^3 for each value of x.

    1^1 + 1^2 + 1^3 = 1

    2^1 + 2^2 + 2^3 = 14

    3^1 + 3^2 + 3^3 = 39

    4^1 + 4^2 + 4^3 = 84

    5^1 + 5^2 + 5^3 = 155

    Your first loop is to repeat the formula for every value of x, but you need a nested loop because the formula you're using is a summation (i = 1 to n of x^i). You're also not supposed to carry the result of the last equation over to your new one.

    Let me explain this: s += (p *= x); a little better. s (the sum) is initialized at 0 and p is initialized at 1. p is multiplied by x each loop, and added to s afterwards. The first time through the loop, pow(p, 1) is added to the sum. The second time, pow(p, 2) is added. The third time, x = pow(p, 3) is added. So, if n = 4 and x = 2, that would be s = pow(2, 1) + pow(2, 2) + pow(2, 3) + pow(2, 4), or s = 2 + 4 + 8 + 16, or s = 30. This is equivalent to the sum of i from 1 to n of x^i.

    I hope this helped, and if you want any further explanation, I'd be happy to give it.