程序设计实验报告_第1页
程序设计实验报告_第2页
程序设计实验报告_第3页
程序设计实验报告_第4页
程序设计实验报告_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.学 生 实 验 报 告院 系: 测绘学院 专业班级: 测绘13级3班 学 号: 2013305517 学生姓名: 王 泽 指导教师: 郭辉老师 2016年05月20日安徽理工大学实验报告实验课程名称: 数据结构与软件开发上机实验 开课院系及实验室: 测绘学院 红楼二楼机房 院系测绘学院专业班级测绘13-3班姓 名王泽成 绩实验项目名称测量程序设计课程实验指导教师郭辉老师实验1 编程基本知识练习实验目的: 通过该实验课内容的练习,学生应掌握VB 编程的基本语法、变量的定义、数组(动态数组)的定义 、VB 语言中子过程与函数的定义以及文本文件的读写等知识。实验内容:1)变量的定义 动态数组的定义

2、与应用;2)矩阵的加、减、乘运算 (定义Sub()子过程或Function()来实现);3)数据文件的建立、数据的读取与写入。实验步骤:1.编辑界面1.1 打开VB 编程工具,进入编程主界面。1.2 在窗体上新建 “读入数据”和“输出数据”两个按钮。1.3 双击“窗体”进入代码输入界面,进行代码编辑。2.用VB 编写的源代码2.1 矩阵基本运算源码详见附录一。(1)两矩阵相加(2)两矩阵相减(3)矩阵转置(4)两矩阵相乘(5)矩阵求逆2.2 文本文件(本实验中data.txt)的读取源代码(1)建立文本文件并输入数据在桌面上新建一“data.txt” ( 文本文件路径为C:Users WHDe

3、sktop练习data.txt”)。输入以下内容:6,7,4,0.005A,35.418B,45.712C,25.270D,24.678在桌面上新建一“result.txt” ( 文本文件路径为C:Users WHDesktop练习result.txt”)。(2)从文本文件中读数据Dim linedata as string, m_GaochaN as integer,m_Pnumber asinteger,m_knPnumber as integer,M as Double,k1 as integerlinedata 为存储文本文件一行信息的字符串变量Dim a() as String,H(

4、) as Doublea()为存储点名,H()存储高程Open“C:Users WHDesktop练习data.txt”For Input As #1Line Input #1, linedatak = Split(linedata, ,)m_GaochaN = Val(k(0)m_Pnumber = Val(k(1)m_knPnumber = Val(k(2)M = CDbl(k(3)For k1 = 1 To m_knPnumberLine Input #1, linedatak = Split(linedata, ,)a( k1) = k(0)GetstationNumber (a)H(

5、k1) = CDbl(k(1)NextClose #1(3)将读入点名存储到点名数组中,且返回该点名所对应编号Function GetstationNumber(name As String)Dim i As IntegerFor i = 1 To m_PnumberIf P_Name(i) Then将待查点名与已经存入点名数组的点比较If P_Name(i) = name ThenGetstationNumber = iExit ForEnd IfElse 待查点是新的点名,将新点名放到 P_Name 数组中P_Name(i) = nameGetstationNumber = iExit F

6、orEnd IfNext iEnd Function(4)从文本文件中写数据(将从data.txt 读入的数据,写入到result.txt 文件中)Open“C:Users WHDesktop 练习result.txt” For Output As #1outstring = outstring + str(m_GaochaN) +,outstring = outstring + str(m_Pnumber) + ,outstring = outstring + str(m_knPnumber) + ,outstring = outstring + str(M) + vbCrLfFor k1

7、= 1 To m_knPnumberoutstring = outstring +a(k1)+ ,+Format(H(k1), #0.000) +vbCrLfNextPrint #1, outstring实验 2 水准网平差程序设计实验目的: 通过本次实验的练习,使学生掌握水准网平差中近似高程计算算法、组成误差方程系数阵B、组成误差方程常数项L及权阵生成算法。掌握法方程的组建 参数改正值的计算以及单位权中误差的计算。掌握水准网平差中输出高程平差值和高程中误差、 输出观测值及其改正数与平差值等信息并保存为平差成果文件的方法。实验内容:1)在读入水准网数据后,进行待定点近似坐标的计算;2)基于间接

8、平差的思想,以观测的测段高差为观测值,组成误差方程系数矩阵B 及常数项矩阵L;3)基于水准网平差中定权的方法(测段长或测站数定权) ,生成权阵P。4) 利用矩阵的基本运算(调用矩阵运算函数即可)得到法方程系数矩阵及常数项矩阵。 该实验的内容其实质就是调用矩阵运算函数。5)熟悉VB 中输出函数Print 的用法,及控制输出格式的函数的用法,如Space()、 String()6)水准网平差结束后,将变量及数组中的数据输出到平差结果文件中。实验步骤:1. 读入水准网数据(1)建立文本文件并输入数据在桌面上新建一“data.txt” ( 文本文件路径为C:Users WHDesktop练习1data

9、.txt”)。输入以下内容:10,7,2,0.001 A,0.000 F,11.414 A,B,73.795,20.4 A,D,14.005,18.8 A,G,14.167,15.4C,B,71.949,8.9 D,B,59.780,14.2 C,D,12.159,12.8 C,E,15.364,9.8 F,E,5.797,19.6 G,E,3.044,15.1 D,G,0.169,10.0在桌面上新建一“result.txt” ( 文本文件路径为C:Users WHDesktop练习1 out.txt”)。Private Sub Command1_Click()(2)读入水准网数据Open

10、C:UsersWHDesktop练习1data.txt For Input As #1 Line Input #1, linedata k = Split(linedata, ,) m_GaochaN = Val(k(0) m_Pnumber = Val(k(1) m_knPnumber = Val(k(2) M = CDbl(k(3)ReDim A(1 To m_knPnumber), H(1 To m_knPnumber)For k1 = 1 To m_knPnumber Line Input #1, linedata k = Split(linedata, ,) A(k1) = k(0)

11、 H(k1) = CDbl(k(1)NextReDim StartP(1 To m_GaochaN), EndP(1 To m_GaochaN), gaocha(1 To m_GaochaN), Li(1 To m_GaochaN)For k2 = 1 To m_GaochaN Line Input #1, linedata k = Split(linedata, ,) StartP(k2) = k(0) EndP(k2) = k(1) gaocha(k2) = CDbl(k(2) Li(k2) = CDbl(k(3)NextClose #1End Sub2. 编辑界面打开VB 编程工具,进入

12、编程主界面。在窗体上利用控件新建 “载入数据”、“开始计算”、“导出结果”、“清空”四个按钮和一个文本框。3.定义相应变量、数组和实现各功能的函数(过程)详见附录二(1)水准网中近似坐标计算(2)生成误差方程系数矩阵B 及常数项矩阵L(3)生成权阵P(4)残差及中误差计算函数(5)组成法方程及平差计算(6)平差结果输出附件1 矩阵基本运算源码(1)两矩阵相加Private Function Msum(M As Integer, n As Integer, Matrixsum() As Double, Matrix1() As Double, Matrix2() As Double)矩阵求和函数

13、Dim i1 As Integer, i2 As IntegerReDim Matrixsum(1 To M, 1 To n)For i1 = 1 To MFor i2 = 1 To nMatrixsum(i1, i2) = Matrix1(i1, i2) + Matrix2(i1, i2)Next i2Next i1End Function(2)两矩阵相减Function Mminus(M As Integer, n As Integer, MatrixMinus() AsDouble, Matrix1() As Double, Matrix2() As Double)矩阵求差函数Dim i

14、1 As Integer, i2 As IntegerReDim MatrixMinus(1 To M, 1 To n)For i1 = 1 To MFor i2 = 1 To nMatrixMinus(i1, i2) = Matrix1(i1, i2) - Matrix2(i1, i2)Next i2Next i1End Function(3)矩阵转置Function Mchange(M As Integer, n As Integer, Matrixchange() As Double, Matrix1() As Double)矩阵转置函数Matrix1()需转置的矩阵,Matrixcha

15、nge()为转置后的矩阵Dim i1 As Integer, i2 As IntegerReDim Matrixchange(1 To n, 1 To M) 动态分配用来存储转置后的矩阵For i1 = 1 To MFor i2 = 1 To nMatrixchange(i2, i1) = Matrix1(i1, i2)Next i2Next i1End Function(4)两矩阵相乘矩阵相乘函数, MatrixMultiply()为存储AB 后的矩阵, Matrix1()为A矩阵, Matrix2()为B 矩阵,注意矩阵相乘的顺序Mi 为行, Ni 为列,i=1,2Function Mmu

16、ltiply(M1 As Integer, n1 As Integer, M2 As Integer,n2 As Integer, MatrixMultiply() As Double, Matrix1() As Double,Matrix2() As Double)Dim i1 As Integer, i2 As Integer, i3 As IntegerIf n1 M2 ThenMsgBox 两矩阵不能相乘,请检查!, vbOKCancel + vbCritical + vbDefaultButton1Exit FunctionEnd IfReDim MatrixMultiply(1 T

17、o M1, 1 To n2)For i1 = 1 To M1For i2 = 1 To n2MatrixMultiply(i1, i2) = 0For i3 = 1 To n1MatrixMultiply(i1, i2) = MatrixMultiply(i1, i2) +Matrix1(i1, i3) * Matrix2(i3, i2)Next i3Next i2Next i1End Function(5)矩阵求逆Function MRinv(n As Integer, mtxA() As Double) As Boolean功能:实矩阵求逆的全选主元高斯约当法参数:n - Integer

18、型变量,矩阵的阶数mtxA - Double 型二维数组,体积为n x n。存放原矩阵A;返回时存放其逆矩阵A-1。返回值: Boolean型,失败为False,成功为TrueReDim nIs(n) As Integer, nJs(n) As IntegerDim i As Integer, j As Integer, k As IntegerDim D As Double, P As Double全选主元,消元For k = 1 To nD = 0#For i = k To nFor j = k To nP = Abs(mtxA(i, j)If (P D) ThenD = PnIs(k)

19、= inJs(k) = jEnd IfNext jNext i求解失败If (D + 1# = 1#) ThenMRinv = FalseExit FunctionEnd IfIf (nIs(k) k) ThenFor j = 1 To nP = mtxA(k, j)mtxA(k, j) = mtxA(nIs(k), j)mtxA(nIs(k), j) = PNext jEnd IfIf (nJs(k) k) ThenFor i = 1 To nP = mtxA(i, k)mtxA(i, k) = mtxA(i, nJs(k)mtxA(i, nJs(k) = PNext iEnd IfmtxA

20、(k, k) = 1# / mtxA(k, k)For j = 1 To nIf (j k) Then mtxA(k, j) = mtxA(k, j) * mtxA(k, k)Next jFor i = 1 To nIf (i k) ThenFor j = 1 To nIf (j k) Then mtxA(i, j) = mtxA(i, j) - mtxA(i, k) *mtxA(k, j)Next jEnd IfNext iFor i = 1 To nIf (i k) Then mtxA(i, k) = -mtxA(i, k) * mtxA(k, k)Next iNext k调整恢复行列次序

21、For k = n To 1 Step -1If (nJs(k) k) ThenFor j = 1 To nP = mtxA(k, j)mtxA(k, j) = mtxA(nJs(k), j)mtxA(nJs(k), j) = PNext jEnd IfIf (nIs(k) k) ThenFor i = 1 To nP = mtxA(i, k)mtxA(i, k) = mtxA(i, nIs(k)mtxA(i, nIs(k) = PNext iEnd IfNext k求解成功MRinv = TrueEnd Function附件2 水准网平差程序计算源码(1)水准网中近似坐标计算Sub ca_H

22、() 水准网中待定点近似高程计算Dim k1 As Integer, H_N As Integer H_N 为计算出近似高程点个数Dim c1 As Integer, c2 As IntegerH_N = 0Do While H_N (m_Pnumber - m_knPnumber)For k1 = 1 To m_GaochaNc1 = StartP(k1) 观测高差起点c2 = EndP(k1) 观测高差终点If H(c1) = 0 And H(c2) 0 ThenH(c1) = H(c2) - gaocha(k1)H_N = H_N + 1End IfIf H(c1) 0 And H(c2

23、) = 0 ThenH(c2) = H(c1) + gaocha(k1)H_N = H_N + 1End IfNextLoopEnd Sub(2)生成误差方程系数矩阵B 及常数项矩阵LSub GouJianBL(H() As Double, StartP() As Integer, EndP() AsInteger) 构建误差方程系数矩阵B 与LH()为近似高程数组, StatP()为起点点号数组, EndP()为终点点号数组Dim k1 As Integer, k2 As Integer, k3 As Integer, c1 As Integer, c2As IntegerFor k1 =

24、1 To m_GaochaNFor k2 = 1 To (m_Pnumber - m_knPnumber)B(k1, k2) = 0NextNextFor k1 = 1 To m_GaochaNc1 = StartP(k1) 观测高差起点c2 = EndP(k1) 观测高差终点If c1 m_knPnumber And c2 m_knPnumber ThenB(k1, c2 - m_knPnumber) = 1B(k1, c1 - m_knPnumber) = -1End IfIf c1 m_knPnumber And c2 = m_knPnumber ThenB(k1, c1 - m_knP

25、number) = -1End IfIf c1 m_knPnumber ThenB(k1, c2 - m_knPnumber) = 1End IfL(k1, 1) = gaocha(k1) - (H(c2) - H(c1)NextEnd Sub(3)生成权阵PSub goujianP() 构建PDim k1 As Integer, k2 As IntegerFor k1 = 1 To m_GaochaNFor k2 = 1 To m_GaochaNP(k1, k2) = 0NextNextFor k1 = 1 To m_GaochaNFor k2 = 1 To m_GaochaNIf Li(k

26、1) = 0 ThenMsgBox (第 + Str(k1) + 测段长为0! )End IfIf k1 = k2 ThenP(k1, k2) = 1 / Sqr(Li(k1)End IfNextNextEnd Sub(4)残差及中误差计算函数Sub ca_V() 残差计算Dim k1 As Integer, vv As Double, c1 As Integer, c2 As Integerp_vv = 0For k1 = 1 To m_GaochaNc1 = StartP(k1)c2 = EndP(k1)vv = H(c2) - H(c1) - gaocha(k1)v(k1, 1) = v

27、vp_vv = p_vv + P(k1, k1) * vv * vvm_mu = Sqr(p_vv / (m_GaochaN - (m_Pnumber -m_knPnumber)NextEnd Sub(5)组成法方程及平差计算Private Sub Command2_Click() 平差计算及结果输出按钮ca_HGouJianBL H, StartP, EndPgoujianPMchange m_GaochaN, m_Pnumber - m_knPnumber, Matrixchange,B B 转置的计算Mmultiply (m_Pnumber - m_knPnumber), m_Gaoch

28、aN,m_GaochaN, m_GaochaN, MatrixMultiply, Matrixchange, PMmultiply (m_Pnumber - m_knPnumber), m_GaochaN,m_GaochaN, (m_Pnumber - m_knPnumber), Q, MatrixMultiply, BMRinv (m_Pnumber - m_knPnumber), MatrixMultiply1MRinv (m_Pnumber - m_knPnumber), QMmultiply (m_Pnumber - m_knPnumber), (m_Pnumber -m_knPnum

29、ber), (m_Pnumber - m_knPnumber), m_GaochaN,MatrixMultiply2, Q, MatrixchangeMmultiply (m_Pnumber - m_knPnumber), m_GaochaN,m_GaochaN, m_GaochaN, MatrixMultiply3, MatrixMultiply2, PMmultiply (m_Pnumber - m_knPnumber), m_GaochaN,m_GaochaN, 1, dx, MatrixMultiply3, Lca_VPrintResultEnd Sub(6)平差结果输出Sub Pri

30、ntResult() 平差结果输出Dim outstring As String 存储保存的信息Dim qii As Double, qjj As Double, qij As Double 存储法方程系数矩阵对交线上元素Dim k1 As Integer, c1 As Integer, c2 As Integer, ml As Doubleml存储观测高程中误差,m_mu 单位权中误差CommonDialog1.Filter = All Files (*.*)|*.*|Text Files(*.txt)|*.txt|Batch Files (*.bat)|*.batCommonDialog1

31、.ShowSaveIf CommonDialog1.FileName *.txt AndCommonDialog1.FileName ThenOpen CommonDialog1.FileName For Output As #1outstring = Space(10) & String(4, =) + 高程平差值及其精度+ String(4, =) + vbCrLfPrint #1, outstringPrint #1, 点名 近似高程 改正数 高程平差值 中误差+ vbCrLfoutstring = For k1 = 1 To m_Pnumber - m_knPnumberoutstring = outstring + P_Name(k1 + m_knPnumber) + Space(2)outstring = outstring + Format(Str(H(k1 + m_knPnumber),#0.000) + Space(2)outstring = outs

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论