Найти серию в C программировании - PullRequest
0 голосов
/ 22 января 2019

Помогите мне найти сумму этой серии x ^ 1 + x ^ 4 + x ^ 7 + .. к n терминам

          #include<conio.h>
          #include<math.h>
           int main(int argc, char const *argv[]) {
            int n;
            float x;
            int l=1;

           printf(" Enter the value of x :");
           scanf("%f",&x);
             for (int i = 1; i <=n; i++)
               {
                 l = pow(x,l+3);
               }
             printf("x ^ %d + power %d",x,l);
             return 0;
            }

Ответы [ 4 ]

0 голосов
/ 22 января 2019

Несколько операций над числами с плавающей запятой имеют тенденцию очень быстро образовывать ошибки округления, поэтому, если вы можете минимизировать количество операций, всегда выполняйте .

Теперь, если вы признаете, что ваш полином - это геометрический ряд (см. статья в Википедии ) с a = x и r = x ^ 3, то у нас есть следующий алгоритм псевдокода (обратите внимание, никаких циклов! ):

Case 1 (x == 0): Sum == 0 regardless of n.

Case 2 (x == 1): Sum == n.

Case 3 (x any other number): Sum == x*(1-(x^(3*n)))/(1-(x^3)).

Case 4 (n==infinity and -1<x<1): Sum == x/(1-(x^3)).

Я надеюсь, что вы можете кодировать соответственно.

0 голосов
/ 22 января 2019
#include <stdio.h>
#include <math.h>

int main()
{
  double x;
  unsigned n;

  fprintf(stderr, "enter x and n :");
  /* enter x as a double and x as an unsigned number, both on the same line, and check 2 values are enter */
  if (scanf("%lg %u", &x, &n) != 2)
    puts("invalid or missing values");
  else {
    double r = 0; /* sum initialization */
    int p = 1; /* the power to apply, 1 then 4 then 7 etc */

    while (n--) { /* have to sum n times */
      r += pow(x, p); /* x^1+x^4+x^7+... */
      p += 3; /* next power value */
    }

    printf("%g\n", r);
  }
  return 0;
}

, если я хорошо понимаю, n условия x^y должны быть добавлены, а не последний Pow * x^n, я использую double для x и, конечно, результат ( r )


Казни:

enter x and n :1.2 3
6.85678

enter x and n :2 1
2

Проверьте с помощью bc :

% bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
scale=6
1.2 + 1.2^4 + 1.2^7
6.856780
0 голосов
/ 22 января 2019

Я думаю, что это то, что вы хотите :) Я прокомментировал ошибки

    #include<conio.h>
    #include<math.h>
    int main(int argc, char const *argv[]) {
    int n;
    float x;
    float l=0,i=0;
  // initialize n first to determine how far the sum should go
   printf(" Enter the value of n :");
   scanf("%d",&n);

    printf(" Enter the value of x :");
    scanf("%f",&x);
     for (int i = 0; i <n; i++)
       { //l+= pow(x,(i*3)+1); is equivilant to l= l+ pow(x,i+3); which i assume that's what you wanted to do
         // l should be a float as well not int since x is a float
         l+= pow(x,(i*3)+1);
         if(i!=n-1)printf(" %f^%d +",x,i*3+1);
        else printf("%f^%d",x,i*3+1);
       }
       printf("\nResult of the sum is %f",l);
     return 0;
    }
0 голосов
/ 22 января 2019

В этом цикле есть проблема:

for (int i = 1; i <=n; i++)
{
    l = pow(x,l+3);
}

Вы устанавливаете l каждый раз, а затем в конце у него появляется значение последнего назначения, но вы хотели добавить их все. Кроме того, оно должно быть i в вызове pow, а не l+3, вместо этого вы должны переместить этот шаг 3 на шаг цикла. Попробуйте это:

int l = 0;
for (int i = 1; i <= n; i+=3)
{
    l += pow(x, i);
}

Также убедитесь, что вы инициализируете n, вы, вероятно, должны прочитать его, используя scanf, так же, как вы делаете с x.

Также обратите внимание, что поскольку l равно int, оно будет обрезаться каждый раз. Если вы не хотите этого, вы должны объявить его как float, а в зависимости от того, насколько точным должен быть результат, вы можете даже рассмотреть double.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...