Advertisement
Guest User

Untitled

a guest
Feb 25th, 2020
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.57 KB | None | 0 0
  1. /*********************************************
  2. *   Алтайский государственный университет    *
  3. *   Кафедра информатики                      *
  4. *                                            *
  5. *   Курс "Языки и методы программитрования"  *
  6. *   Лекция 7. Примеры программ с циклами     *
  7. *                                            *
  8. *   Задача о разложении функции в ряд        *
  9. *   (эффективный вариант)                    *
  10. *                                            *
  11. **********************************************/
  12. #include <stdio.h>
  13. #include <math.h>
  14.  
  15. #define MAX_ITER 1000.0
  16.  
  17. void main() {
  18.   double x,   // аргумент функции
  19.          fx,  // значение функции
  20.          Sn,  // слагаемое с номером n
  21.          S,   // сумма ряда
  22.          eps, // погрешность разложения в ряд
  23.          a,
  24.          SFACT = 1.0,// Сумма фактариала
  25.          n;   // номер слагаемого
  26.  
  27.   // Ввод аргумента функции и погрешности разложения
  28.   printf("  x=");
  29.   scanf("%lf",&x);
  30.   printf("eps=");
  31.   scanf("%lf",&eps);
  32. printf("  a=");
  33.   scanf("%lf",&a);
  34.  
  35.   // Вычисление функции в точке x
  36.   fx= pow(a, x);
  37.   // Вычисление слагаемого с номером 0
  38.   n=1;
  39.   Sn=1;  
  40.   S=Sn;
  41.  
  42.   // Пока
  43.   //     значение функции fx отличается от суммы ряда S более, чем на eps,
  44.   //     И номер слагаемого не слишком велик
  45.   // повторять
  46.   while(fabs(fx-S) > eps && n < MAX_ITER) {
  47.     // Вычислить очередное слагаемое домножением предыдущего
  48.     SFACT*=n;
  49.     Sn=(pow(x*log(a),n))/(SFACT);
  50.  
  51.     // Добавить слагаемое к сумме
  52.     S+=Sn;
  53.    
  54.     // Нарастить номер слагаемого
  55.     n+=1;
  56.   }
  57.  
  58.   // Предупреждение при достижении максимально допустимого количества итераций
  59.   if(n == MAX_ITER)
  60.      printf("Достигнуто максимальное количество итераций:\n",fx);
  61.  
  62.   // Вывести значение функции, суммы и количество слагаемых
  63.   printf("fx=%12.10lf\n",fx);
  64.   printf(" S=%12.10lf\n",S);
  65.   printf(" n=%1.0lf\n",n);
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement