qq_41023904 2021-06-15 22:35 采纳率: 0%
浏览 191
已结题

用MFC写了一段程序运行不出来,求大神指教

void CMy1Dlg::OnOK() 
{
    // TODO: Add extra validation here
    //MessageBox("Hello, Windows!");
    if(((CButton *)GetDlgItem(IDC_RADIO10))->GetCheck() && ((CButton *)GetDlgItem(IDC_RADIO11))->GetCheck()){
        //MessageBox("ddf");能弹出MessageBox,但是再往下的程序运行不出来。
        
        //MessageBox("请输入您测量的转角数");
        int n= GetDlgItemInt(IDC_EDIT1);
        //cin>>n;
        //cout<<"请输入转角数"<<endl;
        //cin>>n;
        ifstream ep;
        ep.open("闭合导线各边距.txt",ios::in);
        if(!ep.is_open()){
            cout<<"打开文件失败"<<endl;
            return ;
        }
        for(i=1;i<=n;i++){
            ep>>di[i];
            cout<<"第"<<i<<"导线边距为"<<di[i]<<endl;
            g=g+di[i];
        }
        ep.close();
        cout<<"各导线边的和"<<g<<'\n';
        ifstream jp;
        jp.open("闭合导线各测角观测值.txt",ios::in);
        if(!jp.is_open()){
            cout<<"打开文件失败"<<endl;
            return ;
        }
        for(i=1;i<=n;i++){
            jp>>d[i]>>f[i]>>m[i];
            sumd=sumd+d[i]+(sumf+f[i]+(summ+m[i])/60)/60;
            sumf=(sumf+f[i]+(summ+m[i])/60)%60;
            summ=(summ+m[i])%60;
            cout<<d[i]<<"°"<<f[i]<<"′"<<m[i]<<"″"<<"\n";
        }
        jp.close();
        cout<<"内角和为"<<sumd<<"°"<<sumf<<"′"<<summ<<"″"<<"\n";
        cout<<"角度闭合差为"<<sumd-(n-2)*180<<"°"<<sumf<<"′"<<summ<<"″";
        if(abs(sumd-(n-2)*180)*60+sumf*60+summ>60*sqrt(60)){
            cout<<"角度闭合差超限";
        }
        else{
            gz=-((sumd-(n-2)*180)*60+sumf*60+summ)/n;
            cout<<"角度闭合差符合精度要求,水平角改正数为"<<gz<<"″"<<'\n';
        }
        for(i=1;i<=n;i++){
            if(abs(gz)<60){
                m[i]=m[i]+gz;
                if(m[i]<0){
                    f[i]=f[i]-1;m[i]=m[i]+60;
                    if(d[i]<0){
                        d[i]=d[i]-1;f[i]=f[i]+60;}
                        if(m[i]>=60){
                            m[i]=m[i]%60;f[i]=f[i]+m[i]/60;
                            if(f[i]>60){
                                f[i]=f[i]%60;d[i]=d[i]+f[i]/60;
                            }
                        }
                    }
                }
            if(abs(gz)>=60&&abs(gz)<3600){
                f[i]=f[i]+gz/60;d[i]=d[i]+f[i]/60;
            }
            if(abs(gz)>=3600){
                d[i]=d[i]+gz/3600;
            }
            yd[i]=d[i]+(long double)f[i]/60+(long double)m[i]/3600;
            cout<<"改正后的第"<<i<<"个水平角为"<<d[i]<<"°"<<f[i]<<"′"<<m[i]<<"″"<<'\n';
            gsumd=gsumd+d[i]+(gsumf+f[i]+(gsumm+m[i])/60)/60;
            gsumf=(gsumf+f[i]+(gsumm+m[i])/60)%60;
            gsumm=(gsumm+m[i])%60;
        }

        cout<<"改正后内角和"<<gsumd<<"°"<<gsumf<<"′"<<gsumm<<"″";
        if(gsumd!=(n-2)*180){
            cout<<"调整后角度不闭合,请查找错误";
            return ;
        }
        ifstream ap;
        ap.open("闭合导线已知方位角.txt",ios::in);
        if(!ap.is_open()){
            cout<<"打开文件失败"<<endl;
            return ;
        }
        ap>>fd[1]>>ff[1]>>fm[1];
        ap.close();
        cout<<"导线边1的方位角为"<<fd[1]<<"°"<<ff[1]<<"′"<<fm[1]<<"″"<<'\n';
        B[1]=fd[1]+(long double)ff[1]/60+(long double)fm[1]/3600;//导线边1的方位角小数形式
        for(i=2;i<=n;i++){//开始求算各边方位角
            fm[i]=fm[i-1]+m[i];//前进方向边的方位角=后方方位角+观测角-180
            ff[i]=ff[i-1]+f[i];
            fd[i]=fd[i-1]+d[i]-180;
            if(fm[i]>=60){
                ff[i]=ff[i]+1;fm[i]=fm[i]%60;
            }
            if(ff[i]>=60){
                fd[i]=fd[i]+1;ff[i]=ff[i]%60;
            }
            if(fd[i]>=360){
                fd[i]=fd[i]%360;
            }
            if(fd[i]<0){
                fd[i]=fd[i]+360;
            }
            B[i]=fd[i]+(long double)ff[i]/60+(long double)fm[i]/3600;
            cout<<"导线边"<<i<<"的坐标方位角为"<<fd[i]<<"°"<<ff[i]<<"′"<<fm[i]<<"″"<<'\n';
        }
        tB=B[n]+yd[1]-180;
        if(tB<0){
            tB=tB+360;cout<<"tB="<<tB<<'\n';
        }
        cout<<"初始方位角为"<<B[1]<<"推算的坐标方位角为"<<tB<<'\n';
        
        if(tB!=B[1]){
            cout<<"推算坐标方位角与原角不等,请查明原因";
            return ;
        }
        else{
            cout<<"推算坐标方位角与原角一致,下面开始计算坐标增量";
        }

        for(i=1;i<=n;i++){
            B[i]=B[i]*(pi/180);
            yd[i]=long double(yd[i]*pi/180);
            x[i+1]=di[i]*cos(B[i]);
            y[i+1]=di[i]*sin(B[i]);
            if(x[i+1]>0){//纵坐标增量
                x[i+1]=int(x[i+1]*100+0.5)/100.0;
            }
            if(x[i+1]<0){
                x[i+1]=int(x[i+1]*100-0.5)/100.0;
            }
            if(y[i+1]>0){//横坐标增量{
            y[i+1]=int(y[i+1]*100+0.5)/100.0;
            }
            if(y[i+1]<0){
                y[i+1]=int(y[i+1]*100-0.5)/100.0;
            }//四舍五入,保留两位小数
            sumx=sumx+x[i+1];sumy=sumy+y[i+1];
            cout<<x[i+1]<<'\t'<<y[i+1]<<'\n';}
            cout<<"纵坐标增量闭合差为"<<"米"<<sumx<<"横坐标增量闭合差为"<<sumy<<"米"<<'\n';
            fp=sqrt(pow(sumx,2)+pow(sumy,2));
            K=double(fp/g);
            cout<<"导线全长闭合差为"<<fp<<"米"<<setiosflags(ios::fixed)<<setprecision(5)<<"导线全长相对闭合差为"<<K<<"米"<<'\n';
            double yunxu=0.0005;
            if(K>=yunxu){
                cout<<"成果不合格"<<endl;
                return ;
            }
            else{
                cout<<"符合精度要求"<<endl;
            }
            for(i=1;i<=n;i++){
                if(sumx<0){
                    vx[i]=int(-sumx*di[i]*100/g+0.5)/1.0;
                    sumxz=sumxz+vx[i];
                }
                else{
                    vx[i]=int(-sumy*di[i]*100/g-0.5)/1.0;
                    sumxz=sumxz+vx[i];
                }
            if(sumy<0){
                vy[i]=int(-sumy*di[i]*100/g+0.5)/1.0;
                sumyh=sumyh+vy[i];
            }
            else{
                vy[i]=int(-sumy*di[i]*100/g-0.5)/1.0;
                sumyh=sumyh+vy[i];
            }
            cout<<"纵坐标增量改正数为"<<vx[i]<<"厘米"<<","<<"横坐标增量改正数为"<<vy[i]<<"厘米"<<endl;
        }
        for(i=1;i<=n;i++){
            x[i+1]=x[i+1]+float(vx[i]/100);
            y[i+1]=y[i+1]+float(vy[i]/100);
            if(i+1>n){
            x[1]=x[1]+float(vx[n]/100);
            y[1]=y[1]+float(vy[n]/100);}
            cout<<"改正后的导线"<<i<<"的纵坐标增量为"<<x[i+1]<<"米"<<","<<"横坐标增量为"<<y[i+1]<<"米"<<endl;
        }
        ifstream zp;
        zp.open("闭合导线已知坐标.txt",ios::in);
        if(!zp.is_open()){
            cout<<"打开文件失败"<<endl;
            return ;
        }
        zp>>xz[1]>>yh[1];
        zp.close();
        for(i=2;i<=n;i++){
            xz[i]=xz[i-1]+x[i];
            yh[i]=yh[i-1]+y[i];
        }
        for(i=1;i<=n;i++){
            cout<<i<<"导线点的坐标为"<<setiosflags(ios::fixed)<<setprecision(2)<<"("<<xz[i]<<","<<yh[i]<<")"<<endl;
        }

        xzt=xz[n]+x[1];
        yht=yh[n]+y[1];
        cout<<setiosflags(ios::fixed)<<setprecision(2)<<"推算出的起始坐标为"<<"("<<xzt<<","<<yht<<")"<<endl<<endl;
        
        cout<<"您已完成导线测量内业计算,各导线点的坐标为"<<endl;
        for(i=1;i<=n;i++){
            cout<<setiosflags(ios::fixed)<<setprecision(2)<<"    "<<i<<"    "<<"("<<xz[i]<<","<<yh[i]<<")"<<endl;
        }
        ofstream op;
        op.open("闭合导线结果存放.txt",ios::app);
        if(!op.is_open()){
            cout<<"打开文件失败"<<endl;
            return ;
        }
        for(i=1;i<=n;i++){
            op<<setiosflags(ios::fixed)<<setprecision(2)<<i<<"    "<<"("<<xz[i]<<","<<yh[i]<<")"<<endl;
        }
        op.close();
    }
    else{
        return;
    }
    CDialog::OnOK();
}
 

  • 写回答

7条回答 默认 最新

  • CSDN专家-link 2021-06-15 22:42
    关注

    数组d的长度是多少,为何你循环都是从1到n,而不是从0到n?

    评论

报告相同问题?

悬赏问题

  • ¥15 数据库数据成问号了,前台查询正常,数据库查询是?号
  • ¥15 算法使用了tf-idf,用手肘图确定k值确定不了,第四轮廓系数又太小才有0.006088746097507285,如何解决?(相关搜索:数据处理)
  • ¥15 彩灯控制电路,会的加我QQ1482956179
  • ¥200 相机拍直接转存到电脑上 立拍立穿无线局域网传
  • ¥15 (关键词-电路设计)
  • ¥15 如何解决MIPS计算是否溢出
  • ¥15 vue中我代理了iframe,iframe却走的是路由,没有显示该显示的网站,这个该如何处理
  • ¥15 操作系统相关算法中while();的含义
  • ¥15 CNVcaller安装后无法找到文件
  • ¥15 visual studio2022中文乱码无法解决