Почему вычисления не останавливаются при (-2;2), не учитывая 0? Как можно задать предел, чтобы в консоли не отображалось 1.#INF00?
#include <stdio.h>
#include <math.h>
#include <locale.h>
int main()
{
setlocale (LC_ALL, "Ukr");
int k, i, f = 1, t = 0;
float x, s, sum=0;
printf (" Введiть значення x з промiжку (-2;2): ");
scanf ("%f", &x);
if (x>-2 && x<2) {
for(k=1;;k++){
for(i=1; i<=k+3; i++){
f*=i;
s = pow((-1),k) * pow(x,(2*k-1))/(k*f);
sum+=s;
if (fabs(s)<pow(10,(-4)))
break;
t++;
printf("\n %d. %f", t, sum+s);
}
}
}
else {
printf ("\n Помилка\n");
}
return 0;
}
Ответы (2 шт):
Автор решения: Zhihar
→ Ссылка
у вас нет выхода из цикла
for(k=1;;k++){
тот break, который
if (fabs(s)<pow(10,(-4)))
break;
выходит только из
for(i=1; i<=k+3; i++){
в итоге у вас получается бесконечный цикл
P.S.
и кстати если уж вы делаете
sum+=s;
то зачем потом выводить sum + s
printf("\n %d. %f", t, sum+s);
Автор решения: Harry
→ Ссылка
Вот вся ваша задача:
#include <stdio.h>
int main()
{
for(double x = -2; x <= 2.01; x += 0.1)
{
double term = -x/24, sum = term;
double eps = 1e-4;
for(int k = 2; term*term > eps*eps; ++k)
sum += term *= -x*x*(k-1)/k/(k+3);
printf("x = %.2lf sum = %8.5lf\n",x,sum);
}
}
Рассмотрите отношение двух соседних членов ряда - из этого считать будет и быстрее, и проще, и точнее, и без всяких мгновенно переполняющихся факториалов и использования ненужных вам pow...
