Неверные результаты при вычислениях - 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;
- }
Решение задачи: «Неверные результаты при вычислениях»
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;
- }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с математическими функциями и вводом/выводом данных.
- Устанавливаем локальную настройку на русский язык.
- Определяем максимальное количество итераций для вычисления ряда.
- Вводим значение переменной
x
и точностьeps
с помощью функцииscanf()
. - Инициализируем переменную
f
в качестве флага для проверки ряда на сходимость. - Объявляем переменные
sum
иa
для хранения суммы ряда и текущего члена ряда соответственно. - Вычисляем квадрат
x
и инициализируем переменнуюn
для цикла. - Запускаем цикл, который продолжает выполняться, пока абсолютное значение
a
меньше заданной точностиeps
. - Внутри цикла обновляем значение
a
с помощью формулы ряда. - Добавляем обновленное значение
a
к сумме рядаsum
. - Проверяем, превышает ли значение
n
максимальное количество итераций. Если да, то выводим сообщение о том, что ряд разошелся, устанавливаем флагf
в значениеfalse
и прерываем цикл с помощью оператораbreak
. - После завершения цикла проверяем значение флага
f
. Если оно равноtrue
, то выводим значение суммы рядаsum
с помощью функцииprintf()
. В противном случае выводим сообщение о том, что ряд разошелся. - Добавляем в код оператор
getchar()
, чтобы программа не закрылась сразу после вывода результатов. - Возвращаем
0
для успешного завершения программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д