当前位置:编程学习 > C#/ASP.NET >>

求助!急!谁能把这个C++的程序改写成VB.NET的啊?

#include "stdio.h" 
#include "math.h" 

//申明全局变量 
float q,i,n,m,b,a,r,v2,ja,jb,es1,es2; 
double csn,srm,alfa; 
int ds,ns,dr=0; 

//主要函数 
int main(){ 
    //申明变量 
    double h[201],v[201],s[201]; 
    double hk,h0,hb; 
    float downx,upx; 
    float wucha; 
    float hd; 
    int l; 
    //申明后来要用到的函数 
    double erfenfa(int f,float x1,float x2,float eps); 
    double fe(float h); 
    double fhk(float h); 
    double fh0(float h); 
    //用到的文件 
    FILE *fbl; 
    
    //定义某些变量的初始值 
    alfa=1.05; 
    downx=0.0; 
    upx=40.0; 
    wucha=0.0005f; 
    
    //输入输出 
    fbl=fopen("Results.dat", "w");/* Results.dat 为输出计算结果的数据文件 */ 
    printf("请输入流量Q:"); 
    scanf("%f'\t'", &q); 
// */坡度i,糙率n,边坡m,底宽b\n"; 
    printf("请输入坡度i:"); 
    scanf("%f'\t'", &i); 
    printf("请输入糙率n:"); 
    scanf("%f'\t'", &n); 
    printf("请输入边坡m:"); 
    scanf("%f'\t'", &m); 
      printf("请输入底宽b:"); 
    scanf("%f'\t'", &b); 
    
    //("  %f  %f  %f  %f",, &i, &n, &m, &b); 
    fprintf(fbl,"流量:%6.2f (m**3/s)坡度:%8.5f  糙率: %6.4f  边坡:%4.2f  底宽:%7.2f",q, i, n, m, b); 
    fprintf(fbl,"流量:%6.2f,(m**3/s),坡度:,%8.5f,糙率:,%6.4f,边坡:%4.2f,底宽:,%7.2f", q, i, n, m, b); 
    csn=pow((1-i*i),0.5); 
    srm=pow((1+m*m),0.5); 
    
    /*  计算临界水深HK  */ 
    hk=erfenfa (1, downx , upx , wucha);//二分法求临界水深,函数子程序fhk附在主程序之后 
    printf("\n临界水深hk=%9.6f \t", hk,"(m)\n\t"); 
    fprintf(fbl, "\n临界水深hk=%9.6f \t", hk, "(m)\n\t"); 
    
    /* 计算正常水深h0 */ 
    if ( i <=0.0 ){ 
          h0=100; 
          printf("\n坡度小于或等于0.0,没有正常水深.\t"); 
          fprintf(fbl,"\n坡度小于或等于0.0,没有正常水深.\t"); 
    }else{ 
          h0=erfenfa(2, downx, upx, wucha); //二分法求正常水深,函数子程序fhk附在主程序之后 
          printf("\n正常水深=%f", h0); 
          fprintf(fbl,"正常水深=%f",h0); 
    } 
    printf("\n请输入控制水深,步长和计算步数\n"); 
    scanf("%f %d %d", &hd,&ds,&ns); 
    h[0]=hd; 
    a=float((b+m*h[0])*h[0]); 
    r=a/(b+float(2*h[0]*srm)); 
    v[0]=q / a; //计算起始断面参数 
    ja=float(pow(pow(v[0], 2/r), 4.0/3)); 
    es1=float(csn*h[0]+alfa*pow(v[0], (2/19.6))); 
    //判断水面线计算方向:dr=1,控制断面在上游;dr=-1,控制断面在下游 
    if ((hd>hk)||((hd==hk) && (hd <h0))){ 
                            dr=-1; 
    }else{ 
          dr=1; 
    } 
    // 二分法区间端点hb取值 
    if (((hk>h0)&&(hd>hk))||((h0>hk)&&(hd <hk))){ 
          hb=hk; 
    }else{ 
          hb=h0; 
    } 
    s[0]=0.0; 
    for (l=1;l <ns+1;l++){ 
        if (fabs(h[l-1]-h0) <0.005){ 
            h[1]=h0; 
            v[l]=v[l-1]; 
        }else{ 
            h[l]=erfenfa(3,float(h[l-1]),float(hb),0.001f); 
            a=float((b+m*h[l])*h[l]); 
            v[l]=q/a; 
            ja=float(pow(n*v[l],2)/pow((a/(b+2*h[l]*srm)),(4.0/3))); 
            es1=float(csn*h[l]+alfa*v[l]*v[1]/19.6); 
        } 
        s[l]=l*ds; 
    } 
    //输出计算结果 
    printf("\n hd=%6.3f (m) ds=%7.2d (m)    ns=%d  r=%d\n", hd, ds, ns,dr); 
    fprintf(fbl,"\n hd=%6.3f (m)  ds=%7.2f (m)    ns=%d  r=,%d\n", hd, ds, ns,dr); 
    printf("l    h[1]    v[l]    s[l]      (m)    (m/s)    (m)"); 
    fprintf(fbl,"l    h[l]    v[l]    s[l]        (m)    (m/s)    (m)"); 
    
    for (l=0;l <ns+l;l++){ 
        printf("\n %3d  %7.3f  %7.3f  %10.2f", l, h[l]  ,v[l],s[l]); 
        fprintf(fbl,"\n %3d  %7.3f  %7.3f  %10.2f", l, h[l],v[l],s[l]); 
    }    
return(0); 

//子函数 
//计算fhk 
double fhk(float h0){ 
    double w; 
    double pw; 
    pw=pow((b+m*h0),3.0); 
    w=9.8*csn*pw-alfa*q*q*(b+2*m*h0); 
    return(w); 

//计算fh0 
double fh0(float h){ 
    double t; 
    t=q*n/(pow(i,0.5))*pow((b+2*srm*h),(2.0/3))-pow(((b+m*h)*h),(5.0/3)); 
    return(t); 

//计算fe 
double fe(float h){ 
    double g; 
    a=(b+m*h)*h; 
    v2=q/a; 
    jb=float(pow((n*v2),2)/pow((a/b*(2*h*srm)),(4.0/3))); 
    es2=float(csn*h+alfa*v2*v2/19.6); 
    g=es1-es2+dr*(i-(ja+jb)/2)*ds; 
    return(g); 

//计算二分差  
double erfenfa(int f, float x1,float x2, float eps){ 
    double Er, fm; 
    float a1, a2, fa, fb; 
    int k; 
    a1=x1; 
    a2=x2; 
    do{ 
          switch (f){ 
          case 1:fa=float(fhk(a1)),fb=float(fhk(a2));break; 
          case 2:fa=float(fh0(a1)),fb=float(fh0(a2));break; 
          case 3:fa=float(fe(a1)),fb=float(fe(a2));break; 
          default:printf("error\n"); 
          } 
          if(fa*fb>0.0){ 
              printf("无解,请输入上下边界"); 
              scanf("%f,%f",&a1,&a2); 
          } 
    }while(fa*fb>0.0); 
    k=1; 
    while(fabs(a2-a1)>eps){ 
        Er=(a1+a2)*0.5; 
        if(fabs(a2-a1) <eps) 
        return(Er); 
        switch (f){ 
              case 1:fm=fhk(float(Er));break; 
              case 2:fm=fh0(float(Er));break; 
              case 3:fm=fe(float(Er));break; 
              default:printf("error\n"); 
        } 
        if ((fm*fa) <0.0) 
        a2=float(Er); 
        else 
        a1=float(Er); 
        k=k+1; 
    } 
    return(Er); 
}

计算步骤:

2.1 对于微分方程    ,采用二分法,计算积分
 
2.2计算过程,包括两个主要步骤:
(a)输入参数Q,I,n,m,b,求临界水深hk和正常水深h0。
临界水深hK满足方程            f1(hK)=A3cosθ-BαQ2/g=0
考虑了较大底坡的影响,且程序中取α=1.05。当底坡i>0时求解正常水深,h0满足方程
 =0
i≤0时,可取h0为一大值(程序中取为100m)。
在程序中调用二分法函数子程序ERFENFA求解以上两个代数方程,初始区间取为[0,40](m),误差限取0.0005m。
(b)输入控制水深hD、步长Δs和计算步数N,计算各断面的水深计算渠段的总长为Δs×N,共N+1个断面。h1=hD,计算从控制断面开始,共计算N步。
每一步中,hL-1为已知的前一断面水深;hL为待求的下一断面水深,满足方程
     (7-6-8)
L=2,…,N+1
其中断面比能ES=hcosθ+αv2/2g。求解出hL,便一步步地计算出N个断面上的水深。
方程(7-6-8)可能有两个解,因为在同一断面上对应于同一个ES值可有两个水深。为避免得到错误的结果,在迭代计算过程中应对hL的取值范围加以限制。我们知道,水面曲线在三个区域内是各自单调升、降的,令hB为水面曲线从hD出发所趋向的该区域水深界限,hL的取值只能在区间[hB,hL-1]或[hL-1,hB]上,程序中以此为初始区间,用二分法求解hL。
本程序根据渠道底坡性质和控制水深自动对hB和方向参数r取值(读者不难根据需要将其改为人工输入参数)。方向参数r的取值根据控制断面的流态来决定:急流时(hD<hK)控制断面在上游,r=1;缓流时(hD>hK)控制断面在下游,r=-1。hD=hK时,若hK>hD(陡坡),应该是S2型曲线,控制断面在上游,r=1;若hD>hK(缓坡),应该是M2型曲线,r=-1;hD=hK=h0时为临界坡渠道上的均匀流,不必计算水面曲线。
已知控制水深和水面线计算方向,hB在水面线变化范围的另一端,根据情况可能是hK或h0(i≤0时h0取值为100m)。程序中根据hD、hK和h0的值确定hB;当hD>hK>h0(S1型曲线),或hD<hK<h0(M3、H3和A3型曲线)时,hB=hK;当hD<h0<hK(S3型曲线),hD>h0>hK(M1型曲线),h0≤hD≤hK(S2型曲线),或hK≤hD≤h0(M2、H2、A2型曲线)时,hB=h0;临界坡渠道,hB=h0=hK。






--------------------编程问答-------------------- http://www.developerfusion.com/tools/convert/csharp-to-vb/ --------------------编程问答-------------------- 谢谢拉 --------------------编程问答-------------------- 那个是C井的 --------------------编程问答-------------------- 看看 --------------------编程问答-------------------- http://code2code.net/ --------------------编程问答-------------------- http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=2575&lngWId=10
补充:.NET技术 ,  VB.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,