Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include<iostream>
- #include<cmath>
- #include<iomanip>
- using namespace std;
- double y(double* xx){ //функция вычисления y; пердаём ссылку на xx
- double ans=(1/4.0)*log((1+(*xx))/(1-(*xx)))-(1/2.0)*atan((*xx));
- return ans;
- }
- double s(double &xx, int nn){ //функция вычисления s; пердаём адрес xx
- double ans=0;
- for (int k=1; k<=nn; k++)
- ans+=pow((*(&xx)),4*k-1)/(4*k-1);
- return ans;
- }
- void Out_Rez(double ss, double yy, double xx){ //процедура(функция без фозврата значения) вывода
- cout<<"S("<<xx<<")="<<ss<<setw(10)<<"Y("<<xx<<")="<<yy<<setw(10)<<"S-Y="<<ss-yy<<endl;
- }
- int main(){
- double h;
- double* t;
- int n,x;
- double a=-0.5;
- double b=0.5;
- double e=0.00001;
- cout<<endl<<"Vvedite shag s kotorim budet perehod ot a do b: ";
- cin>>h;
- n=1; //искомое количество опираций для нужной точности е
- while (2==2){ //зфпускаем бесконечный цикл и выходим из него только огда, когда получим нужное нам n
- int flag=0; //флаг для вычисления n, если |s-y|>e значит нужная точность не получена и увеличиваем n
- for (double x=a; x<=b; x+=h){
- t=&x;
- double sx=s(x,n);
- double yx=y(t);
- if (fabs(sx-yx)>e) flag=1;
- }
- if (flag==1) n++;
- else break; //выход из бесконечного цикла while
- }
- for (double x=a; x<=b; x+=h){
- t=&x; //задаём адресу значение( используется, чтобы препод увидил, что ты передаёшь параметры в функции всеми тремя способами)
- if (fabs(x)<0.00001) x=0; //округляем х, т.к. при сложении/вычитании дробных чисел может быть очень маленькая погрешность(0.00000000000000001) и при 0.1-0.1 мы можем получить 0.000000000000000000000001
- double sx=s(x,n);
- double yx=y(t);
- Out_Rez(sx,yx,x);
- }
- cout<<"Chislo k dlya dostizheniya tochnosti s-y<=0.00001: "<<n;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement