解析交会及附合导线C++程序设计实习报告.docx
《解析交会及附合导线C++程序设计实习报告.docx》由会员分享,可在线阅读,更多相关《解析交会及附合导线C++程序设计实习报告.docx(15页珍藏版)》请在冰豆网上搜索。
解析交会及附合导线C++程序设计实习报告
测量程序设计
实习报告
目 录
一、 实习目的 …………………………………………… 3
二、 实习任务 …………………………………………… 3
三、 实习时间、地点、指导老师 ……………………… 3
四、 实习过程 …………………………………………… 3
五、 实习中主要技术问题及处理方法 ………………… 6
六、 实习收获及感想 …………………………………… 9
七、 意见及建议 ………………………………………… 9
2
一、 实习目的
在实践中综合应用第一学年中课堂所学的计算机知识,以期能够熟练掌握基本编程语
法、程序设计思想,为后续课程打下基础。
1.深入理解面向对象编程思想,理解对象的封装、继承及多态的含义;
2.掌握一门高级编程语言(可选VC++,Borland C++Builder,Visual Basic或Delphi)
和程序调试一般方法和技巧,熟练运用集成编程环境的基本功能,了解编程帮助系统;
3.掌握基本的类模块设计与实现、数据结构、数据文件读写、人机界面设计等;
4.综合运用所学数学和专业相关知识,设计并实现若干个类;
5.养成良好的编程风格。
二、 实习任务
1. 根据面向对象思想完成角度处理类模块
2. 根据面向对象思想完成解析交会点位坐标计算类模块
3. 根据面向对象思想完成附合导线近似坐标计算类模块
4. 测量程序设计
三、 实习时间、地点、指导老师
时间:
2013年7月6日~7月15日
地点:
犀浦校区X4245机房
指导老师:
黄泽纯
四、 实习过程
7月6日~7日
1. 了解面向对象程序设计思想
3
1) 类的基本概念;
2) 类的成员函数添加、定义方法;
3) 访问对象成员方法。
2. 编写角度处理类函数代码
1) 建立角度处理类 命名 DegSwitch;
2) 角度值转换成度分秒函数 命名 Deg_DMS;
3) 度分秒转换成角度值函数 命名 DMS_Deg;
4) 角度值转换成弧度值函数 命名 Deg_Rad;
5) 弧度值转换成角度值函数 命名 Rad_Deg;
6) 弧度值转换成度分秒函数 命名 Rad_DMS;
7) 度分秒转换成弧度值函数 命名 DMS_Rad;
8) 坐标方位角反算函数 命名 C_A。
3. 角度处理类函数调用、算法检查及修改
1) 函数调用方法:
指针;
2) 主函数中选择调用函数关键语句:
switch语句。
4. 调试技巧应用
7月8日
1.编写解析交会点位坐标类函数代码
1) 建立解析交会点位坐标类 命名 Coordinate;
2) 函数中涉及三角函数计算,应用预处理命令装入cmath头文件,并注意三角函数计
算中所用角度值为弧度制下数值;
3) 坐标正算函数 命名 C1SA_C2;
4) 坐标反算函数 命名 C1C2_SA
计算坐标方位角可调用角度处理类中坐标方位角反算函数;
5) 前方交会函数 命名 C1C2A1A2_P;
6) 后方交会函数 命名 C1C2C3_P。
2.解析交会点位坐标类函数调用、算法检查及修改
1) 函数调用方法:
指针;
2) 主函数中选择调用函数关键语句:
switch语句;
3) 输入角度为度分秒格式,需调用角度处理类中函数将其转换为弧度值后再进行计
算。
3.学习了解C语言中读写文件方式、语法格式
7月9日~10日
1.附合导线近似坐标计算问题分析、算法设计
2.编写附合导线近似坐标计算类函数代码
1) 建立附合导线近似坐标计算类 命名 LineCalculation;
2) 角度转换、总边长、原始坐标增量计算函数 命名Start
对输入的度分秒制的角度值可调用角度处理类中函数进行转换,计算得到总边长和
原始坐标增量将在随后的坐标增量及改正后坐标增量计算函数中使用;
3) 角度闭合差计算函数 命名 Angle_M;
4) 角度闭合差调整函数 命名 Angle_A;
5) 坐标方位角计算函数 命名 C_Angle;
4
6) 坐标增量计算函数 命名 Coordinate_M
坐标增量计算过程中需用到三角函数,应用预处理命令装入cmath头文件,并注意
三角函数计算中所用角度值为弧度制下数值;
7) 改正后坐标增量计算函数 命名 Coordinate_A;
8) 各点坐标计算函数 命名 Coordinate;
3.附合导线近似坐标计算类函数调用、算法检查及修改
1) 读原始数据文件
需要判断观测角是左角还是右角,以在随后采取正确的角度闭合差分配方式;
2) 函数调用方法:
指针;
3) 计算后得到调整后角度、坐标方位角等需调用角度处理类中函数将其转换为度分
秒制,便于检查;
4) 写结果文件。
7月11日
1.学习Windows窗体程序(CLR)的创建及设计
1) MFC与CLR的区别;
2) 创建Windows窗体程序(CLR);
3) 添加菜单、控件,对菜单、控件的编辑及使用
a. 菜单的创建、命名、分栏
b. 控件Button、Label、TextBox的添加、属性设置及使用;
4) 添加、显示新窗体
a. 添加新窗体
b. 设置在原窗体中进行一定操作后显示新窗体。
2.练习Windows窗体程序创建及设计。
7月12日~13日
创建、设计Windows窗体测量程序
1) 创建Windows窗体测量程序;
2) 添加控件;
3) 添加角度转换窗体;
4) 添加解析交会窗体;
5) 编辑、设置测量程序窗体中控件功能;
6) 在角度转换窗体中添加控件并设置其功能;
7) 添加角度处理类模块,实现处理角度转换窗体中数据的功能,并将结果传递显示
在角度转换窗体中;
8) 在解析交会窗体中添加控件并设置其功能;
9) 添加解析交会点位坐标类模块,实现处理解析交会窗体中数据的功能,并将结果
传递显示在解析交会窗体中;
10)运行检测测量程序。
7月14日~15日
实习总结,撰写实习报告。
5
五、 实习中主要技术问题及处理方法
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]<0) cang[i]=cang[i]+2*PI;
if(cang[i]>2*PI) cang[i]=cang[i]-2*PI;}
}
2. 问题:
如何访问类的对象成员
处理方法:
在预处理命令中装入相应类的头文件,再通过指针访问对象成员
Eg:
检查角度处理类算法时,在主函数中调用类中函数
#include"DegSwitch.h"
…………
DegSwitch *D1=new DegSwitch();
D1->Deg_DMS(Deg,&(*a),&(*b),&*(c));
…………
result=D1->Deg_Rad(Deg);
…………
3. 问题:
不同的类之间可否相互调用成员函数
处理方法:
可以;在预处理命令中装入相应类的头文件,再通过指针访问对象成员
4. 问题:
录入的多个以度分秒表示的角度如何批量存放、处理
处理方法:
放入二维数组中储存、处理
Eg:
在主函数中定义一个数组存放录入的附合导线观测角值
6
int A[N][3] ……
其中,A[i][0]、A[i][1]、A[i][2]中分别存放第i+1个观测角的度、
分、秒位上的数值
5. 问题:
附合导线近似计算类中,最初录入的度分秒形式的角度值无法直接进行运算,
如何准确计算和分配角度闭合差、算出坐标方位角,并根据坐标方位角正确计算坐标
增量
处理方法:
1)根据不同计算需求将角度转换成以秒为单位或以弧度为单位数据
度分秒形式
的角度值
进行角度转换
以秒为单位
角度值
进行角度转换
度分秒形式
的角度值
得到并输出度分秒形
式的调整后观测角值
和坐标方位角
进行角度闭合差的计算与
分配,根据调整后的观测
角值计算坐标方位角
进行角度转换
弧度形式的
角度值
以弧度形式的坐标方
位角值运用三角函数
计算坐标增量
2)对角度闭合差的分配:
先将闭合差平均分配到每一个观测角中,若有余
数,再将余数平均分配到最小边对应点两个观测角中
实现以上处理的对应代码:
……
//度分秒形式角度值转换成以秒为单位角度值
DegSwitch *m=new DegSwitch();
for(i=0;iang[i]=m->DMS_s(A[i][0],A[i][1],A[i][2]);
……
//对角度闭合差的分配
int ff=f_a/n*b;
for(int i=0;iang[i]=ang[i]+ff;
int m=0,f1=0,f2=0;
for(int j=1;jif(S[j]<=S[m])
m=j;
if((f_a%n)!
=0)
7
if((f_a/n)%2!
=0)
{f1=(f_a%n)/2;
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;icang2[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]);
Ccoo[i][1]=S[i]*sin(cang[i]);
xs=xs+Ccoo[i][0];
ys=ys+Ccoo[i][1];
}
*dx=xs-x;
*dy=ys-y;
……
//得到并输出度分秒形式的调整后观测角值和坐标方位角
cout<"<DegSwitch *u=new DegSwitch;
for(i=0;i{u->s_DMS(ang[i],&A[i][0],&A[i][1],&A[i][2]);
cout<}
cout<"<for(i=0;i{u->s_DMS(cang[i],&CAng[i][0],&CAng[i][1],&CAng[i][2]);
cout<}
……
6. 问题:
读原始数据文件过程中,如何将多个数据一次存放在数组中
处理方法:
通过循环语句实现
Eg:
将原始数据文件中储存的观测角角度值(度分秒形式)存入一个二维
数组中
for(i=0;ifor(j=0;j<3;j++)
fscanf(fp,"%d",&A[i][j]);
8
7. 问题:
程序能够生成、运行,但运行结果不正确
处理方法:
通过以下手段调试、检查程序:
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
希望今后能提前通知实习内容及要求,以便学生能在实习前做好准备,查阅、学习相
关资料,提高实习过程中的效率。
10