Посчитать значение функции в заданной точке с помощью ряда Тейлора
помогите пожалуйста разобраться, почему при вводе переменных x,eps(при вводе нецелых) у меня ломается программа?
#include "stdio.h"
#include "locale.h"
#include "stdlib.h"
#include "math.h"
typedef double(*function1)(double);
typedef double(*function2)(double, int);
int fact(int n)
{
int i, t = 1;
for (i = 1; i <= n; i++)
t = t * i;
return t;
}
double cos1(double x)
{
return 1;
}
double cos2(double x, int i)
{
return ((pow(-1, i) * pow(x, 2 * i)) / fact(2 * i));
}
double func(function1 fun1, function2 fun2, double x, double eps, int *k, double rf, int n)
{
double f1, sum, r;
f1 = fun1(x);
sum = f1;
r = fabs(rf - sum);
while ((r > eps) && (*k < n))
{
sum = (sum + fun2(x, (*k)));
(*k)++;
r = fabs(rf - sum);
}
return sum;
}
void menu()
{
printf("Расчёт значений функций в заданной точке с помощью разложения в ряд Тейлора\n");
printf("MENU\n");
printf("1.cos(x)\n");
printf("2.ch(x)\n");
printf("3.ln(1+x)\n");
printf("4.Выход\n");
}
void main()
{
setlocale(LC_ALL, "Russian");
double rf; // эталонное значение
double f; // вычислительная оценка
double x; // аргумент функции
double eps; // точность
double k; // кол-во слагаемых
int n;
int t = 4;
while (t != 0)
{
menu();
scanf_s("%d", &t);
k = 1;
switch (t)
{
case 1:
{
printf("cos(x)\n");
printf("введите x \n");
scanf_s("%lf", &x);
printf("введите число элементов ряда \n");
scanf_s("%d", &n);
printf("введите точность вычислений \n");
scanf_s("%lf", &eps);
rf = cos(x);
f = func(cos1, cos2, x, eps, &k, rf, n);
printf("эталонное значение %.10f \n", rf);
printf("вычислительная оценка %.10f \n", f);
printf("разница между оценкой и эталонным значением %.10f \n", fabs(rf - f));
printf("количество слагаемых %d \n", k);
break;
}
}