Неверные результаты при вычислениях - 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для успешного завершения программы.