解析交会及附合导线C++程序设计实习报告(2)

2025-10-19

五、 实习中主要技术问题及处理方法

1. 问题:函数如何返回多个数值

处理方法:1)指针传递

Eg:角度转换成度分秒函数将度分秒的值传回主函数(3个返回值) void DegSwitch::Deg_DMS(double Deg,int*a,int*b,int*c)

{int DMS_D=(int)Deg; *a=DMS_D;

double DMS_M1=(Deg-DMS_D)*60; int DMS_M=(int)DMS_M1; *b=DMS_M;

int DMS_S=int((DMS_M1-DMS_M)*60);

*c=DMS_S;

}

2)调用数组

Eg:附合导线坐标方位角计算函数将计算所得方位角值传回主函数(多个返

回值)

void LineCalculation::C_Angle(double ang[],double cang[],int n,int b,double sc_ang) {cang[0]=sc_ang+b*(PI-ang[0]); if(cang[0]<0) cang[0]=cang[0]+2*PI; if(cang[0]>2*PI) cang[0]=cang[0]-2*PI;

for(int i=1;i

{cang[i]=cang[i-1]+b*(PI-ang[i]); if(cang[i]>2*PI) cang[i]=cang[i]-2*PI;}

}

if(cang[i]<0) cang[i]=cang[i]+2*PI;

2. 问题:如何访问类的对象成员

处理方法:在预处理命令中装入相应类的头文件,再通过指针访问对象成员 Eg:检查角度处理类算法时,在主函数中调用类中函数 #include\

…… ……

DegSwitch *D1=new DegSwitch();

D1->Deg_DMS(Deg,&(*a),&(*b),&*(c));

…… ……

result=D1->Deg_Rad(Deg); …… ……

3. 问题:不同的类之间可否相互调用成员函数

处理方法:可以;在预处理命令中装入相应类的头文件,再通过指针访问对象成员 4. 问题:录入的多个以度分秒表示的角度如何批量存放、处理

处理方法:放入二维数组中储存、处理

Eg:在主函数中定义一个数组存放录入的附合导线观测角值 int A[N][3] ……

6

其中,A[i][0]、A[i][1]、A[i][2]中分别存放第i+1个观测角的度、分、秒

位上的数值

5. 问题:附合导线近似计算类中,最初录入的度分秒形式的角度值无法直接进行运算,如

何准确计算和分配角度闭合差、算出坐标方位角,并根据坐标方位角正确计算坐标增量 处理方法:1)根据不同计算需求将角度转换成以秒为单位或以弧度为单位数据 度分秒形式进行角度转换 以秒为单位 的角度值 角度值

进行角度闭合差的计算与 进行角度转换 分配,根据调整后的观测进行角度转换 角值计算坐标方位角 度分秒形式弧度形式的 的角度值 角度值 得到并输出度分秒形以弧度形式的坐标方 式的调整后观测角值位角值运用三角函数 和坐标方位角 计算坐标增量 2)对角度闭合差的分配:先将闭合差平均分配到每一个观测角中,若有余数,

再将余数平均分配到最小边对应点两个观测角中

实现以上处理的对应代码:

……

//度分秒形式角度值转换成以秒为单位角度值 DegSwitch *m=new DegSwitch();

for(i=0;i

ang[i]=m->DMS_s(A[i][0],A[i][1],A[i][2]);

……

//对角度闭合差的分配 int ff=f_a/n*b;

for(int i=0;i

ang[i]=ang[i]+ff;

int m=0,f1=0,f2=0; for(int j=1;j

if(S[j]<=S[m])

m=j; if((f_a%n)!=0)

if((f_a/n)%2!=0)

{f1=(f_a%n)/2;

7

f2=f1+1;}

else {f1=(f_a%n)/2; f2=f1;}

ang[m]=ang[m]+f1*b;

ang[m+1]=ang[m+1]+f2*b; ……

//以秒为单位角度值转换成弧度值计算坐标增量 DegSwitch *q=new DegSwitch;

for(i=0;i

cang2[i]=q->DMS_Rad(0,0,cang[i]); …… double xs=0,ys=0; for(i=0;i

{Ccoo[i][0]=S[i]*cos(cang[i]); xs=xs+Ccoo[i][0]; ys=ys+Ccoo[i][1];

*dx=xs-x;

*dy=ys-y; ……

//得到并输出度分秒形式的调整后观测角值和坐标方位角 cout<

{u->s_DMS(ang[i],&A[i][0],&A[i][1],&A[i][2]); cout<

cout<

Ccoo[i][1]=S[i]*sin(cang[i]);

}

{u->s_DMS(cang[i],&CAng[i][0],&CAng[i][1],&CAng[i][2]); cout<

……

6. 问题:读原始数据文件过程中,如何将多个数据一次存放在数组中

处理方法:通过循环语句实现

Eg:将原始数据文件中储存的观测角角度值(度分秒形式)存入一个二维数

组中

for(i=0;i

for(j=0;j<3;j++)

fscanf(fp,\,&A[i][j]);

7. 问题:程序能够生成、运行,但运行结果不正确

处理方法:通过以下手段调试、检查程序:

8

1)断点调试

2)逐语句执行程序 3)选取关键变量进行监视

经过逐步排除筛选找出源代码的逻辑错误或算法错误,进行分析改正

8. 问题:Windows窗体程序中如何通过对控件的操作打开一个新的窗体

处理方法:在原窗体头文件的预处理命令中装入新窗体对应头文件,在原窗体设计界面

双击控件,进入头文件,在光标停留处添加代码

Eg:角度转换 cfrm=gcnew 角度转换();

cfrm->Show();

9. 问题:如何在Windows窗体中提取、改变控件文本

处理方法:提取控件文本:double d=Convert::ToDouble(t1->Text);

改变控件文本: t4->Text=Convert::ToString(deg);

10. 问题:如何在Windows窗体中调用类的成员函数 处理方法:DegSwitch^ x=gcnew DegSwitch();

deg=x->DMS_Deg(d,m,s);

六、 实习收获及感想

根据面向对象思想设计算法、编写代码使程序设计模块化,各模块有明确的功能,既便于对函数的调用,也有利于对程序算法的精简、检查。

基于面向对象思想的程序设计,首先要明确需要处理的对象(已知数据)和最终要得到的对象(所求数据),然后分析二者之间的关系,深入理解问题,由此设计算法,再将分块进行算法代码编写,最终编码实现整个过程。编写源代码过程中要注意对数据的灵活处理和转换,如度分秒形式的角度值可存放在二维数组中,使用三角函数是角度值应化为弧度值,通过指针或数组进行值的传递等。编码完成生成程序后,要及时进行多次检查,发现错误后采用适当的方法进行调试、找出有问题的语句或算法进行修改,尽量提高算法的效率和准确度,使结果最精确。

在Windows窗体程序设计过程中,每个控件都要有相应的功能或作用,为用户提供获取及输入信息的途径;同时,界面的设计要简洁合理,使用户能一目了然,迅速进行操作,因此可在所需控件较多的情况下按功能添加新的窗体,在原窗体中只提供功能选择控件,并在新窗体中设计实现相应功能。

总体来说,我在本次实习中更具体地认识、理解了面向对象程序设计的思想,独立实践运用了课堂上学习的编程知识,并学习了一些新的编程语法知识,全面提高了自身编程能力,对编程所解决的问题有了更加深入的理解。目前,我能够独立设计编写的程序还很简单,因此更需要我在以后尽力学习相关知识、查阅相关资料,以不断提升程序设计方面的水平。

七、 意见及建议

希望今后能提前通知实习内容及要求,以便学生能在实习前做好准备,查阅、学习相关资料,提高实习过程中的效率。

9


解析交会及附合导线C++程序设计实习报告(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:23周亚夫军细柳--导学案

相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219