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

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

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

#include <stdio.h>
#include <stdlib.h>
#include<stdbool.h>
#include<math.h>
#include <locale.h>
int main()
{
     setlocale(LC_CTYPE,"Russian");
    const int MaxIterac=1000000;
    double x,eps;
    printf("Введите х и точность Eps\n");
    scanf("%lf%lf",&x, &eps);
    bool f=true;
    double sum=x, a=x;
    double x2=x*x;
    for(int n=0;fabs(a)<eps;n++)
    {
        a*=1/((2*n+2)*(2*n+3));
        sum+=a;
        if(n>MaxIterac)
        {
            printf("\n Ряд разошелся!\n");
            f=false;
            break;
        }
        }
 
    if(f)
    {
        printf("(a)=\n",sum);
        printf("Точное значение=\n"),x;
        }
    else
        printf("Ряд разошелся");
getchar();
    return 0;
}
программа не хочет считать что делать? и как понять такое если я ввожу число так 0,1 то программа ведет себя не так а если 0.1 то как надо

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

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include<stdbool.h>
#include<math.h>
#include <locale.h>
int main()
{
     setlocale(LC_CTYPE,"Russian");
    const int MaxIterac=1000000;
    double x,eps;
    printf("Введите х и точность Eps (x должен быть меньше 1 по условию)\n");
    scanf("%lf%lf",&x, &eps);
    bool f=true;
    double sum, a;//здесь было все =х это надо было стереть
    double x2=x*x;
    for(double n=0;fabs(a)<eps;n++)
    {
        a*=-(x2*(2*n+1)/(2*n+3));
        sum+=a;
        if(n>MaxIterac)
        {
            printf("\n Ряд разошелся!\n");
            f=false;
            break;
        }
        }
 
    if(f)
    {
        printf("arctg(x)=%le\n",sum);//тут добавить%с оператором
        printf("Точное значение=%g\n"),atan(x);и тут
        }
    else
        printf("Ряд разошелся");
getchar();
    return 0;
}

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

  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
Похожие ответы