Вычислить сумму ряда (приближенное значение функции sin) - C (СИ)
Формулировка задачи:
Решить задачу, применив оператор повтора WHILE.
Вычислить сумму ряда (приближенное значение функции sin) с точностью eps. Значения x и eps вводятся с клавиатуры. Полученный результат и значение библиотечной функции sin вывести на экран.
Вот часть решения, а дальше не чего не получается:
# include <stdio.h> # include <conio.h> # include <math.h> #pragma argsused int main(int argc, char* argv[]) { int j,f,i,x; float eps,sl,s=0.0; printf ("vedite x, eps"); scanf("%d %f",&x, &eps); sl=x; while(fabs(sl)>eps) { s=s+sl; f=1; for (j=1; j<=2*i+1;j++) f=f*j; sl=pow(-1,i)*pow(x,2*i+1)/f; } return 0;
Решение задачи: «Вычислить сумму ряда (приближенное значение функции sin)»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <math.h> double MySin( double x, double eps ); // функция избавляется от лишних оборотов единичной окружности возвращает только нужное количество радиан // от угла, переданного как аргумент в радианах double ClearUnnTurn( double valuePi ); int main( void ) { // запрашиваем исходные данные у пользователя double eps, xDegrees; printf( "Введите аргумент x в градусах " ); scanf( "%lf", &xDegrees ); printf( "Введите точность epsilon " ); scanf( "%lf", &eps ); double xRadians = xDegrees * M_PI / 180.0; // переводим градусы в радианы // выводим результаты вычислений printf( "Значение sin( %g )\n", xDegrees ); printf( " - вычисленное с заданной точностью при помощи разложения в степенной ряд = %2.8f\n", MySin( xRadians, eps ) ); printf( " - вычисленное при помощи библиотечной функции = %2.8f\n", sin( xRadians ) ); return EXIT_SUCCESS; } double ClearUnnTurn( double valuePi ) { int sign = 1; // знак радианной меры if ( valuePi < 0 ) // если радианная мера отрицательна sign = -1; // запоминаем это valuePi = fabs( valuePi ); // берем абсолютное значение радианной меры int countUnnecessary = valuePi / ( 2.0 * M_PI ); // ищем количество оборотов if ( countUnnecessary >= 1 ) // если есть лишние обороты valuePi -= ( countUnnecessary * 2 * M_PI ); // значит убираем ненужные return valuePi * sign; // возвращаем результат, учитывая знак } double MySin( double x, double eps ) { x = ClearUnnTurn( x ); // тут double an, s; int n; n = 2; an = x; s = an; while ( fabs( an ) > eps ) { an *= -x * x / ( n * ( n + 1 ) ); // тут s += an; n += 2; } return s; }
Объяснение кода листинга программы
- В функции main() пользователю предлагается ввести значение аргумента x в градусах и точность epsilon.
- Аргумент x переводится из градусов в радианы.
- Вычисляется приближенное значение функции sin(x) с заданной точностью при помощи разложения в степенной ряд (функция MySin()).
- Также вычисляется значение функции sin(x) при помощи библиотечной функции sin().
- В функции ClearUnnTurn() радианная мера избавляется от лишних оборотов.
- В функции MySin() используется итерационный процесс для вычисления приближенного значения функции sin(x).
- При вычислении значения функции MySin() используется итерационный процесс, который продолжается до тех пор, пока абсолютное значение текущего приближения не станет меньше заданной точности epsilon.
- Значение функции sin(x) вычисляется с помощью библиотечной функции sin() и сравнивается с приближенным значением, полученным с помощью функции MySin().
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д