
C/C++
Помогите пожалуйста написать программу на Си
помогите пожалуйста написать программу на си

/*
программа работает только для x в диапазоне от -4 до 4 (не включительно),
иначе получается бесконечный цикл
*/
#include <stdio.h>
double my_fabs(double x)
{
return x >= 0.0 ? x : -x;
}
double my_pow(double x, int y)
{
return y > 0 ? x*my_pow(x,y-1) : y < 0 ? 1.0 / (x*my_pow(x,-y+1)) : 1.0;
}
int my_fact(int x)
{
return x > 0 ? x*my_fact(x-1) : 1;
}
int main()
{
double eps,dx,x,y = 0.0;
printf("eps: ");
scanf("%lf",&eps);
printf("x: ");
scanf("%lf",&x);
int n = 0;
do
{
dx = my_pow(-1.0,n) * my_pow(x,2*n) / (double) my_fact(2*n);
y += dx;
n++;
}while(my_fabs(dx) >= my_fabs(eps));
printf("%lf\n",y);
return 0;
}
программа работает только для x в диапазоне от -4 до 4 (не включительно),
иначе получается бесконечный цикл
*/
#include <stdio.h>
double my_fabs(double x)
{
return x >= 0.0 ? x : -x;
}
double my_pow(double x, int y)
{
return y > 0 ? x*my_pow(x,y-1) : y < 0 ? 1.0 / (x*my_pow(x,-y+1)) : 1.0;
}
int my_fact(int x)
{
return x > 0 ? x*my_fact(x-1) : 1;
}
int main()
{
double eps,dx,x,y = 0.0;
printf("eps: ");
scanf("%lf",&eps);
printf("x: ");
scanf("%lf",&x);
int n = 0;
do
{
dx = my_pow(-1.0,n) * my_pow(x,2*n) / (double) my_fact(2*n);
y += dx;
n++;
}while(my_fabs(dx) >= my_fabs(eps));
printf("%lf\n",y);
return 0;
}
Жахан Абу Абдуррохман
А возможно через for сделать?
double x, eps, q, t = 1.0, s = 1.0;
int n = 0;
scanf("%lf%lf", &x, &eps);
q = -x * x;
do {
n += 2;
t *= q / (n * (n - 1));
s += t;
} while (fabs(t) >= eps);
printf("%lf", s);
P.S. Банальная рекуррентная формула:
t[0] = 1
t[i] = t[i - 1] * -x * x / (2 * i * (2 * i - 1))
P.P.S. Через for:
double x, eps, q, t = 1.0, s = 1.0;
scanf("%lf%lf", &x, &eps);
q = -x * x;
for (int n = 2; fabs(t) >= eps; n += 2) {
t *= q / (n * (n - 1));
s += t;
}
printf("%lf", s);
int n = 0;
scanf("%lf%lf", &x, &eps);
q = -x * x;
do {
n += 2;
t *= q / (n * (n - 1));
s += t;
} while (fabs(t) >= eps);
printf("%lf", s);
P.S. Банальная рекуррентная формула:
t[0] = 1
t[i] = t[i - 1] * -x * x / (2 * i * (2 * i - 1))
P.P.S. Через for:
double x, eps, q, t = 1.0, s = 1.0;
scanf("%lf%lf", &x, &eps);
q = -x * x;
for (int n = 2; fabs(t) >= eps; n += 2) {
t *= q / (n * (n - 1));
s += t;
}
printf("%lf", s);
Жахан Абу Абдуррохман
А возможно через for сделать?
Так вот можно с контролем результатов:
#include <stdio.h>
#include <math.h>
int main()
{ const double tau = 6.2831853071795865;
double X, x, y, p, q, s, S, eps; for (;;)
{ printf("x eps: "); scanf("%lf%lf", &x, &eps);
S = cos(x); if (x < 0) x = -x;
x -= tau * (unsigned long long)(x / tau);
p = s = 1.; q = 0.; y = - x * x;
while (fabs(p) > eps) { q += 2.;
p *= y / (q * (q - 1.)); s += p; }
printf("%.17g %e\n", s, s - S); } }
А аргумент приводить к небольшим числам обязательно, иначе получится чушь в виде косинуса, по модулю бОльшего единицы, причём намного бОльшего. Да, и не всегда заказываемая точность будет меньше фактической.
#include <stdio.h>
#include <math.h>
int main()
{ const double tau = 6.2831853071795865;
double X, x, y, p, q, s, S, eps; for (;;)
{ printf("x eps: "); scanf("%lf%lf", &x, &eps);
S = cos(x); if (x < 0) x = -x;
x -= tau * (unsigned long long)(x / tau);
p = s = 1.; q = 0.; y = - x * x;
while (fabs(p) > eps) { q += 2.;
p *= y / (q * (q - 1.)); s += p; }
printf("%.17g %e\n", s, s - S); } }
А аргумент приводить к небольшим числам обязательно, иначе получится чушь в виде косинуса, по модулю бОльшего единицы, причём намного бОльшего. Да, и не всегда заказываемая точность будет меньше фактической.
Похожие вопросы
- Помогите пожалуйста написать программу, реализующую десять генераторов псевдослучайных чисел.СИ!!!!
- Помогите, пожалуйста, написать программу на языке Си.
- Помоги пожалуйста написать программу на C++
- Помогите пожалуйста написать программу!
- Помогите плиз написать программу на Си Массив структур
- Помогите пожалуйста написать программу на С++
- Помогите, пожалуйста, написать программу по нижеописанной задаче!
- Помогите пожалуйста, написать программу в С++
- Помогите пожалуйста написать программу небольшую в C++. Одномерный массив
- Помогите пожалуйста написать программу на C++. Очень нужно!