Неверные результаты при вычислениях - C (СИ)

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

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

Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include<stdbool.h>
  4. #include<math.h>
  5. #include <locale.h>
  6. int main()
  7. {
  8. setlocale(LC_CTYPE,"Russian");
  9. const int MaxIterac=1000000;
  10. double x,eps;
  11. printf("Введите х и точность Eps\n");
  12. scanf("%lf%lf",&x, &eps);
  13. bool f=true;
  14. double sum=x, a=x;
  15. double x2=x*x;
  16. for(int n=0;fabs(a)<eps;n++)
  17. {
  18. a*=1/((2*n+2)*(2*n+3));
  19. sum+=a;
  20. if(n>MaxIterac)
  21. {
  22. printf("\n Ряд разошелся!\n");
  23. f=false;
  24. break;
  25. }
  26. }
  27. if(f)
  28. {
  29. printf("(a)=\n",sum);
  30. printf("Точное значение=\n"),x;
  31. }
  32. else
  33. printf("Ряд разошелся");
  34. getchar();
  35. return 0;
  36. }
программа не хочет считать что делать? и как понять такое если я ввожу число так 0,1 то программа ведет себя не так а если 0.1 то как надо

Решение задачи: «Неверные результаты при вычислениях»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include<stdbool.h>
  4. #include<math.h>
  5. #include <locale.h>
  6. int main()
  7. {
  8.      setlocale(LC_CTYPE,"Russian");
  9.     const int MaxIterac=1000000;
  10.     double x,eps;
  11.     printf("Введите х и точность Eps (x должен быть меньше 1 по условию)\n");
  12.     scanf("%lf%lf",&x, &eps);
  13.     bool f=true;
  14.     double sum, a;//здесь было все =х это надо было стереть
  15.     double x2=x*x;
  16.     for(double n=0;fabs(a)<eps;n++)
  17.     {
  18.         a*=-(x2*(2*n+1)/(2*n+3));
  19.         sum+=a;
  20.         if(n>MaxIterac)
  21.         {
  22.             printf("\n Ряд разошелся!\n");
  23.             f=false;
  24.             break;
  25.         }
  26.         }
  27.  
  28.     if(f)
  29.     {
  30.         printf("arctg(x)=%le\n",sum);//тут добавить%с оператором
  31.         printf("Точное значение=%g\n"),atan(x);и тут
  32.         }
  33.     else
  34.         printf("Ряд разошелся");
  35. getchar();
  36.     return 0;
  37. }

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

  1. Включаем необходимые заголовочные файлы для работы с математическими функциями и вводом/выводом данных.
  2. Устанавливаем локальную настройку на русский язык.
  3. Определяем максимальное количество итераций для вычисления ряда.
  4. Вводим значение переменной x и точность eps с помощью функции scanf().
  5. Инициализируем переменную f в качестве флага для проверки ряда на сходимость.
  6. Объявляем переменные sum и a для хранения суммы ряда и текущего члена ряда соответственно.
  7. Вычисляем квадрат x и инициализируем переменную n для цикла.
  8. Запускаем цикл, который продолжает выполняться, пока абсолютное значение a меньше заданной точности eps.
  9. Внутри цикла обновляем значение a с помощью формулы ряда.
  10. Добавляем обновленное значение a к сумме ряда sum.
  11. Проверяем, превышает ли значение n максимальное количество итераций. Если да, то выводим сообщение о том, что ряд разошелся, устанавливаем флаг f в значение false и прерываем цикл с помощью оператора break.
  12. После завершения цикла проверяем значение флага f. Если оно равно true, то выводим значение суммы ряда sum с помощью функции printf(). В противном случае выводим сообщение о том, что ряд разошелся.
  13. Добавляем в код оператор getchar(), чтобы программа не закрылась сразу после вывода результатов.
  14. Возвращаем 0 для успешного завершения программы.

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


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

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

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

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

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

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