Advertisement
treash

Untitled

Dec 19th, 2017
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.34 KB | None | 0 0
  1. #include "stdafx.h"
  2.  
  3. #include<iostream>
  4. #include<cmath>
  5. #include<iomanip>
  6.  
  7. using namespace std;
  8.  
  9. double y(double* xx){              //функция вычисления y; пердаём ссылку на xx
  10.     double ans=(1/4.0)*log((1+(*xx))/(1-(*xx)))-(1/2.0)*atan((*xx));
  11.     return ans;
  12. }
  13.  
  14. double s(double &xx, int nn){       //функция вычисления s; пердаём адрес xx
  15.     double ans=0;
  16.  
  17.     for (int k=1; k<=nn; k++)
  18.         ans+=pow((*(&xx)),4*k-1)/(4*k-1);
  19.  
  20.     return ans;
  21. }
  22.  
  23. void Out_Rez(double ss, double yy, double xx){  //процедура(функция без фозврата значения) вывода
  24.     cout<<"S("<<xx<<")="<<ss<<setw(10)<<"Y("<<xx<<")="<<yy<<setw(10)<<"S-Y="<<ss-yy<<endl;   
  25. }
  26.  
  27. int main(){
  28.     double h;
  29.     double* t;
  30.     int n,x;
  31.  
  32.     double a=-0.5;
  33.     double b=0.5;
  34.     double e=0.00001;
  35.  
  36.  
  37.  
  38.     cout<<endl<<"Vvedite shag s kotorim budet perehod ot a do b: ";
  39.     cin>>h;
  40.    
  41.    
  42.     n=1;           //искомое количество опираций для нужной точности е
  43.    
  44.     while (2==2){ //зфпускаем бесконечный цикл и выходим из него только огда, когда получим нужное нам n
  45.            
  46.     int flag=0;         //флаг для вычисления n, если |s-y|>e значит нужная точность не получена и увеличиваем n
  47.    
  48.         for (double x=a; x<=b; x+=h){
  49.                 t=&x;
  50.                 double sx=s(x,n);
  51.                 double yx=y(t);
  52.                 if (fabs(sx-yx)>e) flag=1;
  53.         }
  54.  
  55.     if (flag==1) n++;
  56.         else break;      //выход из бесконечного цикла while
  57.     }
  58.  
  59.     for (double x=a; x<=b; x+=h){
  60.             t=&x;                 //задаём адресу значение( используется, чтобы препод увидил, что ты передаёшь параметры в функции всеми тремя способами)
  61.  
  62.         if (fabs(x)<0.00001) x=0;   //округляем х, т.к. при сложении/вычитании дробных чисел может быть очень маленькая погрешность(0.00000000000000001) и при 0.1-0.1 мы можем получить 0.000000000000000000000001
  63.             double sx=s(x,n);
  64.             double yx=y(t);
  65.             Out_Rez(sx,yx,x);        
  66.     }
  67.     cout<<"Chislo k dlya dostizheniya tochnosti s-y<=0.00001: "<<n;
  68. return 0;
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement