Что не так с кодом? - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Всем здравствуйте. Программа должна вычислять значение e^(2*x) в точках X∈[0;0,8] шагом h=0,1 и точностью эпсилон=0,00001. При компиляции цикл идет бесконечно и значение функции всегда=1. Пожалуйста, помогите закончить код:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h> 
 
long int fact(long int n)
{
    if (n == 0 || n == 1) return 1;
    return n * fact(n - 1);
}
 
int main()
 
{  
    int i;
 
    float x, t, xn=0, xk=0.8, s, h=0.1, n=8, eps=0.00001;
 
    x=xn;
    puts("Программа вычисляет значение exp^2x , где X принадлежит промежутку [0;0,8] с шагом 0,1 и точностью эпсилон=0,00001");
 
t=1;
s=1;
 
 for (i=1;i<n;i++)
 
{
  t=t*pow((2*x),i);
  s=s+t*fact(i);
 
 while (abs(s)>eps)
 {
 
   printf("\n При X=%2.2f exp^2x(X)=%2.2f\n",x,s);
 
   x=x+h;
 
    }    
 
    return 0;}
 
}

Решение задачи: «Что не так с кодом?»

textual
Листинг программы
#include <stdio.h>
#include <math.h>
 
long fact(long n)
{
    if(!n)
        return 1;
    return n * fact(n - 1);
}
 
double seq_member(double x, long n)
{
    return pow(2 * x, n) / fact(n);
}
 
double seq_sum(double x, double eps)
{
    double sum = 0;
    long n = 0;
 
    for(double sm = seq_member(x, n); sm > eps; sm = seq_member(x, ++n))
        sum += sm;
    return sum;
}
 
int main()
{
    const double eps = 1e-5;
    double xmin = 0;
    double xmax = .8;
    double step = .1;
 
    for(; xmin <= xmax; xmin += step)
        printf("f(%lf)=%lf ", xmin, seq_sum(xmin, eps));
}

Объяснение кода листинга программы

  1. В функции fact() реализован рекурсивный вычислительный алгоритм факториала для неотрицательных целых чисел.
  2. В функции seq_member() вычисляется член последовательности, для этого используется формула n! / (x^n * (1-x)^n).
  3. В функции seq_sum() вычисляется сумма членов последовательности в интервале от x до eps, для этого используется итерационный цикл.
  4. В функции main() задаются константы и переменные: eps = 1e-5, xmin = 0, xmax = 0.8, step = 0.1.
  5. В цикле for вызывается функция seq_sum() с аргументами xmin и eps, и выводится на экран значение суммы и шаг xmin.
  6. Цикл выполняется, пока xmin меньше или равно xmax.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.4 из 5