Вычисление бесконечной суммы ( ошибка в коде ) - C (СИ)

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

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

Вычислить бесконечную сумму с точностью е = 0,001. Считать, что требуемая точность достигнута, если очередное слагаемое оказалось по модулю меньше, чем е.
Листинг программы
  1. #include <stdio.h>
  2. #include <math.h>
  3. #define e 0.001
  4. float abs(float x)
  5. {
  6. if (x<0)
  7. return x*(-1);
  8. else
  9. return x;
  10. }
  11. float fact(float x)
  12. {
  13. if (x == 0)
  14. return 1;
  15. else if(x == 1)
  16. return 1;
  17. else
  18. return x*fact(x-1);
  19. }
  20. int main()
  21. {
  22. float n=0,s=0;
  23. float sum=0;
  24. float x;
  25. printf("Vvedite x: ");
  26. scanf ("%f",&x);
  27. while (abs(sum)<= e)
  28. {
  29. s=powf(-1.0,n)*powf(x,2*n)/fact(2*n);
  30. sum+=s;
  31. n++;
  32. getchar();
  33. return 0;
  34. }
Изначально писал под линуксом. Поэтому и расписывал функцию abs Помогите пожалуйста!

Решение задачи: «Вычисление бесконечной суммы ( ошибка в коде )»

textual
Листинг программы
  1. #include <math.h>
  2. #include <stdio.h>
  3.  
  4. #define e 0.001
  5.  
  6. double func(double x, double eps) {
  7.     double aCurr = 1.0;
  8.     double sum = 0.0;
  9.     unsigned n = 1;
  10.     do {
  11.         sum += aCurr;
  12.         aCurr *= (-1.0)*x*x/( (2*n-1) * (2*n) );
  13.         ++n;
  14.     } while (abs(aCurr) < eps);
  15.     return sum + aCurr;
  16. }
  17.  
  18. int main() {
  19.     double sum=0.0;
  20.     double x;
  21.  
  22.     printf("Vvedite x: ");
  23.     scanf ("%lf",&x);
  24.  
  25.     sum = func(x, e);
  26.  
  27.     printf("Sum: &lf", sum);
  28. }

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

  1. Подключение необходимых библиотек: <math.h> и <stdio.h>.
  2. Определение константы e (маленькое число, определяющее погрешность вычислений).
  3. Определение функции func, которая принимает два аргумента: x и eps (маленькое число, определяющее погрешность вычислений). Внутри функции объявлены следующие переменные: aCurr (текущий член ряда), sum (накопитель суммы), n (номер текущего члена ряда).
  4. Используется цикл do-while, который выполняется до тех пор, пока абсолютное значение текущего члена ряда меньше заданной погрешности.
  5. Внутри цикла происходит добавление текущего члена ряда к накопителю суммы и обновление значения текущего члена ряда.
  6. После выполнения цикла возвращается накопитель суммы, дополненный последним членом ряда.
  7. В функции main объявлены две переменные: sum (накопитель суммы) и x (значение, которое необходимо вычислить).
  8. Выводится сообщение с просьбой ввести значение x.
  9. Значение x считывается с помощью функции scanf.
  10. Вызывается функция func с введенным значением x и заданной погрешностью e.
  11. Результат вычисления функции func сохраняется в переменной sum.
  12. Выводится сообщение с результатом вычисления суммы.

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


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

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

12   голосов , оценка 3.75 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут