Advertisement
Val_Kir

2lab_7 (IterSum)

Feb 22nd, 2018
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.83 KB | None | 0 0
  1. /* Написать программу вычисления приближенных значений функции, представленной в виде ряда, в десяти равностоящих друг от друга точках
  2.    указанного диапозона возможных значений аргумента. (e^(-x^2))
  3. */
  4.  
  5. // IterSum.cpp: определяет точку входа для консольного приложения.
  6. //
  7.  
  8. #include "stdafx.h"
  9. #include <math.h>
  10. #include <stdlib.h>
  11.  
  12.  
  13. FILE* fopen_secure(const char fname[], const char mode[]) //функция безопасного открытия
  14. {
  15.     FILE *f=fopen(fname, mode);
  16.     if (f==NULL) //если fopen возвращает нулевой указатель, то выводит ошибку
  17.     {
  18.         fclose(f);
  19.         printf("Cannot open file %s with mode %s \n", fname, mode);
  20.         exit(0);
  21.     }
  22.     return f;
  23. }
  24.  
  25. bool checkX (float x) //чекаем диапозон
  26. {
  27.     if (x<-4 || x>4)
  28.     {
  29.         printf("Incorrect x: it should be -4 >= x <= 4. \n");
  30.         system("pause");
  31.         exit(0);
  32.     }
  33. }
  34.  
  35.  
  36. int _tmain(int argc, _TCHAR* argv[])
  37. {
  38.     float x0, x1, x, sh, eps, fun;
  39.     double sum;
  40.     int n;
  41.  
  42.     fflush(stdin);
  43.  
  44.     FILE* fp;
  45.     fp=fopen_secure("f.txt","w+");
  46.  
  47.     printf("x begin: ");
  48.     scanf("%f", &x0);
  49.     checkX(x0);
  50.  
  51.     printf("x end: ");
  52.     scanf("%f", &x1);
  53.     checkX(x1);
  54.  
  55.     sh=(x1-x0)/9;
  56.     x=x0;
  57.    
  58.     for (eps=0.1f;  x<=4; eps=eps/10)
  59.     {
  60.         for (int j=0; j<6; ++j)
  61.         {  
  62.             fun=1;
  63.             sum=fun;
  64.             n=1;
  65.  
  66.             while (abs(fun)>=eps)
  67.             {
  68.                 fun=-(fun*x*x)/n;
  69.                 sum=sum+fun;
  70.                 n=n+1;
  71.             }
  72.             printf("%0.3f %f %.10f %d \n", x, eps, sum, n);
  73.             fprintf(fp, "%0.3f %f %.10f %d \n", x, eps, sum, n);
  74.            
  75.         }
  76.         printf("test %.10f \n",expf(-(x*x)));
  77.         x=x+sh;
  78.     }
  79.     system("pause");
  80.     fclose(fp);
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement