Proc41. Описать функцию Sin1(x, $$\epsilon$$) вещественного типа (параметры $$x$$, $$\epsilon$$ — вещественные, $$\epsilon > 0$$), находящую приближенное значение функции sin($$x$$): $$sin(x) = x — x^3/(3!) + x^5/(5!) — … + (-1)^n*x^{2*n+1}/((2*n+1)!) + …$$ . В сумме учитывать все слагаемые, модуль которых больше $$\epsilon$$. С помощью Sin1 найти приближенное значение синуса для данного x при шести данных $$\epsilon$$.
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
#include <stdio.h> float sin1(float x, float e){ float xi=x,ni=1,rez=0,temprez=x; int i=1,znak=1; while(temprez > e){ temprez=xi/ni; rez+=znak*temprez; znak*=-1; xi*=x; xi*=x; ++i; ni*=i; ++i; ni*=i; printf("%f\n%f\n",xi,ni); } return rez; } int main(void) { float x,e; printf("X:"); scanf("%f", &x); int i; for(i=1;i<=6;++i){ printf("E: "); scanf("%f", &e); printf("Sin: %f\n",sin1(x,e)); } return 0; } |
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#include <stdio.h> #include <math.h> float sin1(float x, float e){ float sin1_n=x,rez=0; int i=0; while (fabs(sin1_n)>e){ rez+=sin1_n; ++i; sin1_n*=-x*x/((2*i+1)*(2*i)); } return rez; } int main(void) { float x,e; printf("X:"); scanf("%f", &x); int i; for(i=1;i<=6;++i){ printf("E: "); scanf("%f", &e); printf("Sin: %f\n",sin1(x,e)); } return 0; } |
Другие задачи из раздела Proc можно посмотреть здесь.
Комментарии: