Advertisement
InnaSibirova

Vlad sinus isprav

Dec 29th, 2021
1,037
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.38 KB | None | 0 0
  1. /*
  2. В данной программе сначала пользователь вводит значение EPS и значение x. После проверки EPS на корректность начинаем считать
  3. значение ряда с точностью до EPS (для этого в цикле while вкладываем цикл for, который высчитывает факториал при n (до 2n - 1),
  4. каждый раз меняя ряд при определенном n. После завершения цикла выводим значение стандартной функции sin, и значение найденного
  5. ряда.
  6. */
  7. /* Исправления:
  8. 1) Корректность данных (а точнее EPS) проверяется, в случае некорректности выводится соответствующее сообщение.
  9. 2) Переделан цикл while: теперь нет функции pow, а факториал и степень вычисляются по-другому (накапливаются с каждой итерацией
  10. в отдельной переменной)
  11. */
  12. #include <stdio.h> // подключаем библиотеки ввода и вывода и библиотеку математических функций
  13. #include <math.h>
  14.  
  15. int main()
  16. {
  17.     float e, s, row, x,  step = 1;  // задаем переменные типа float: e - EPS, s - sin, row - значение ряда,  x - введённое значение x, step - степень x (при отдельной итерации)
  18.     int fact = 1, n = 1; //fact - переменная для хранение значения факториала
  19.     printf("enter EPS \n"); // просим пользователя ввести EPS
  20.     scanf("%f", &e);    // вводим значение EPS
  21.     printf("enter x \n"); // просим пользователя ввести x
  22.     scanf("%f", &x);    // вводим значение x    
  23.                
  24.     if(fabs(e) >= 1) {   // проверяем корректность EPS
  25.         printf("uncorrect data");
  26.     }
  27.    
  28.     else {
  29.         s = sin(x);    // заносим в s значение стандартной функции sin
  30.         row = x;   // заносим в row значение ряда, при n = 1
  31.         step = x;
  32.         while(fabs(s - row) > fabs(e)) {  // высчитываем значение ряда до нужного EPS
  33.             n += 2; // увеличиваем n на два
  34.             fact = fact * n * (n-1); // вычисляем факториал для текущей итерации
  35.             step = step * x * x;  // вычисляем степень для x для текущей итерации
  36.             if(n % 4 == 3) {     // c переменным знаком прибавляем/вычитаем к/из ряда текущее значение степени x деленное на факториал
  37.                 row = row - (step / fact);
  38.             }
  39.             else {
  40.                 row = row + (step / fact);
  41.             }
  42.         }
  43.         printf("sin = %f row = %f", s, row); // после нахождения ряда, с точностью до EPS, выводим значение стандартной функции и значение ряда
  44.     }
  45.     return 0;
  46. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement