学以致用

最近,由于工作原因,需要做一个临建方案,以及出一个施工图纸,需要电气、给水排水施工图纸,给水计算还很好说,排水计算很不好算,之前给的排水管管径更多的是靠经验,到底能不能用,自己不敢打保票,于是自己花了1个小时,用C++编写了一个计算水平横管的排水计算工具。 代码如下:


#include <iostream>
#include "math.h"
#include "cmath"
#define PI 3.14159265

using namespace std;

float return_acos(float a)
{
    return (acos(a));  //求弧度值                                   
}

int main(void)
{
    float Qp, A, v, i, R, I, cosa, n;
    char ans;
    //A管道在设计充满度的过水断面 
    //v:速度 
    //i:最大设计充满度
    //R:水力半径
    //Qp = A*v;//设计秒流量 L/s 
    //float n = 0.009;//管渠粗糙度,塑料取0.009 铸铁取0.013 钢管取0.012
    int D;//管径mm
    cout<<"具体资料参考《建筑给水排水设计标准 [附条文说明] GB50015-2019》\n http://www.jianbiaoku.com/webarbs/book/130/4152938.shtml\n"<<endl;

    do{
    cout<<"----------\n请给出管径D(mm):";
    cin>>D;
    cout<<"请给出充满度i:";
    cin>>i;
    cout<<"请给出设计坡度I:";
    cin>>I;
    cout<<"请给出管渠粗糙度n(其中塑料管为0.009,铸铁管为0.0013,钢管为0.012)\n:";
    cin>>n;

    //过水深度 D*i
    cosa = return_acos((D/2-D*i)/(D/2));
    //R = (PI*D)/(2*cosa*1000);
    A = ((cosa*pow(D, 2)/8)-D*sin(cosa)*(D/2-D*i))/1000;
    R = A/(D*cosa);
    v = (1/n)*pow(R, 0.667)*pow(I, 0.5);

    cout<<">流速v(m/s):"<<v<<endl;
    cout<<">过水断面面积A(m2):"<<A/1000<<endl;
    cout<<">理想流量Qp(L/s):"<<A*v<<endl;
    cout<<">充满度i:"<<i<<endl;
    cout<<">坡度I:"<<I<<endl;
    //cout<<">弧度角cosa:"<<cosa<<endl;
    cout<<">角度:"<<cosa*180/PI<<endl;
    cout<<"继续吗?Y/N"<<" ";
    cin>>ans;
    }while(ans == 'Y' || ans =='y');
    return 0;
}

执行情况:


具体资料参考《建筑给水排水设计标准 [附条文说明] GB50015-2019》
 http://www.jianbiaoku.com/webarbs/book/130/4152938.shtml

----------
请给出管径D(mm):100
请给出充满度i:0.6
请给出设计坡度I:0.004
请给出管渠粗糙度n(其中塑料管为0.009,铸铁管为0.0013,钢管为0.012)
:0.009
>流速v(m/s):0.482523
>过水断面面积A(m2):0.00319499
>理想流量Qp(L/s):1.54166
>充满度i:0.6
>坡度I:0.004
>角度:101.537
继续吗?Y/N

非常简单。

小工具第二版,根据已知排水流量到推出合理的管径:


#include <iostream>
#include "math.h"
#include "cmath"
#define PI 3.14159265

using namespace std;

float return_acos(float a)
{
    return (acos(a));  //求弧度值                                   
}

float get_Q(float n, float I, float D, float i){
    float cosa = return_acos((D/2-D*i)/(D/2));
    //R = (PI*D)/(2*cosa*1000);
    float A = ((cosa*pow(D, 2)/8)-D*sin(cosa)*(D/2-D*i))/1000;
    float R = A/(D*cosa);
    float v = (1/n)*pow(R, 0.667)*pow(I, 0.5); 
    return A*v;
}
int main(void)
{
    float Qp, A, v, i, R, I, cosa, n, L;
    char ans;
    //A管道在设计充满度的过水断面 
    //v:速度 
    //i:最大设计充满度
    //R:水力半径
    //Qp = A*v;//设计秒流量 L/s 
    //float n = 0.009;//管渠粗糙度,塑料取0.009 铸铁取0.013 钢管取0.012
    float D;//管径mm
    cout<<"具体资料参考《建筑给水排水设计标准 [附条文说明] GB50015-2019》\n http://www.jianbiaoku.com/webarbs/book/130/4152938.shtml\n"<<endl;

    do{
    //cout<<"----------\n请给出管径D(mm):";
    //cin>>D;
    cout<<"---------\n请给出已知的排水流量Qp(L/s):";
    cin>>Qp;
    cout<<"请给出充满度i:";
    cin>>i;
    cout<<"请给出设计坡度I:";
    cin>>I;
    cout<<"请给出管渠粗糙度n(其中塑料管为0.009,铸铁管为0.0013,钢管为0.012)\n:";
    cin>>n;

    //过水深度 D*i
    for(D=1; get_Q(n, I, D, i)排水管道内径大于"<<D<<"mm,进口与出口标高相差"<<L*I*100<<"cm,管道能满足排水要求。"<<endl;


    cout<<"继续吗?Y/N"<<" ";
    cin>>ans;
    }while(ans == 'Y' || ans =='y');
    return 0;
}