一道小学奥数题

来源:互联网 发布:耶稣是韩国人 知乎 编辑:程序博客网 时间:2024/04/30 03:29

正方形的边长为1,假设正方形左下角的点位原点,求ABCD的面积。



采用x积分的方法求此面积。

首先求B,C两点的横坐标x1,x2,然后将面积积分分为两部分。第一部分从x1积分到x2,第二部分从x2积分到1。

实现的c++代码如下。

#include<iostream>
#include<cmath>
using namespace std;


void intersection(double* x11,double* x22);
double c1(double x);
double c21(double x);
double c22(double x); 
double simpson(double x1,double x2,double(*f)(double),double(*g)(double));


int main()
{
double x1,x2;
intersection(&x1,&x2);
double square;
square=simpson(x1,x2,c21,c1)+simpson(x2,1.0,c21,c22);
cout << square << endl;
return 0;
}


void intersection(double* x11,double* x22)
{
    double a=2,b=-2.5,c=0.5625,deta;
    deta = b*b-4*a*c;
    if(deta>0)
    {
         *x22 = (-b+sqrt(deta))/(2*a);
         *x11 = *x22-sqrt(deta)/a;
    }
    else cout << "there is no solution;\n";
}
double c1(double x)
{
return sqrt(1-x*x);
}
double c21(double x)
{
return (0.5+sqrt(0.25-(x-0.5)*(x-0.5)));
}
double c22(double x)
{
return (0.5-sqrt(0.25-(x-0.5)*(x-0.5)));
}
double simpson(double x1,double x2,double(*f)(double),double(*g)(double))
{
double h=x2-x1,I2n=0,T2n=h*(f(x1)+f(x2)-g(x1)-g(x2))/2,In=T2n,Tn;
for(int n=1;abs(I2n-In)>1e-3;n+=n,h/=2.0)
{
In=I2n;Tn=T2n;
double sigma=0;
for(int k=0;k<n;k++)
sigma += f(x1+(k+0.5)*h)-g(x1+(k+0.5)*h);
T2n = (Tn+h*sigma)/2;
I2n = (4*T2n-Tn)/3;
}
return I2n;
}

0 0