程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告[精校版本]_第1頁
程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告[精校版本]_第2頁
程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告[精校版本]_第3頁
程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告[精校版本]_第4頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、學(xué) 生 實(shí) 驗(yàn) 報(bào) 告院 系: 測繪學(xué)院 專業(yè)班級(jí): 測繪13級(jí)3班 學(xué) 號(hào): 2013305517 學(xué)生姓名: 王 澤 指導(dǎo)教師: 郭輝老師 2016年05月20日安徽理工大學(xué)實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)課程名稱: 數(shù)據(jù)結(jié)構(gòu)與軟件開發(fā)上機(jī)實(shí)驗(yàn) 開課院系及實(shí)驗(yàn)室: 測繪學(xué)院 紅樓二樓機(jī)房 院系測繪學(xué)院專業(yè)班級(jí)測繪13-3班姓 名王澤成 績實(shí)驗(yàn)項(xiàng)目名稱測量程序設(shè)計(jì)課程實(shí)驗(yàn)指導(dǎo)教師郭輝老師實(shí)驗(yàn)1 編程基本知識(shí)練習(xí)實(shí)驗(yàn)?zāi)康模?通過該實(shí)驗(yàn)課內(nèi)容的練習(xí),學(xué)生應(yīng)掌握VB 編程的基本語法、變量的定義、數(shù)組(動(dòng)態(tài)數(shù)組)的定義 、VB 語言中子過程與函數(shù)的定義以及文本文件的讀寫等知識(shí)。實(shí)驗(yàn)內(nèi)容:1)變量的定義 動(dòng)態(tài)數(shù)組的定義與

2、應(yīng)用;2)矩陣的加、減、乘運(yùn)算 (定義Sub()子過程或Function()來實(shí)現(xiàn));3)數(shù)據(jù)文件的建立、數(shù)據(jù)的讀取與寫入。實(shí)驗(yàn)步驟:1.編輯界面1.1 打開VB 編程工具,進(jìn)入編程主界面。1.2 在窗體上新建 “讀入數(shù)據(jù)”和“輸出數(shù)據(jù)”兩個(gè)按鈕。1.3 雙擊“窗體”進(jìn)入代碼輸入界面,進(jìn)行代碼編輯。2.用VB 編寫的源代碼2.1 矩陣基本運(yùn)算源碼詳見附錄一。(1)兩矩陣相加(2)兩矩陣相減(3)矩陣轉(zhuǎn)置(4)兩矩陣相乘(5)矩陣求逆2.2 文本文件(本實(shí)驗(yàn)中data.txt)的讀取源代碼(1)建立文本文件并輸入數(shù)據(jù)在桌面上新建一“data.txt” ( 文本文件路徑為C:Users WHDes

3、ktop練習(xí)data.txt”)。輸入以下內(nèi)容:6,7,4,0.005A,35.418B,45.712C,25.270D,24.678在桌面上新建一“result.txt” ( 文本文件路徑為C:Users WHDesktop練習(xí)result.txt”)。(2)從文本文件中讀數(shù)據(jù)Dim linedata as string, m_GaochaN as integer,m_Pnumber asinteger,m_knPnumber as integer,M as Double,k1 as integerlinedata 為存儲(chǔ)文本文件一行信息的字符串變量Dim a() as String,H()

4、 as Doublea()為存儲(chǔ)點(diǎn)名,H()存儲(chǔ)高程Open“C:Users WHDesktop練習(xí)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(k

5、1) = CDbl(k(1)NextClose #1(3)將讀入點(diǎn)名存儲(chǔ)到點(diǎn)名數(shù)組中,且返回該點(diǎn)名所對(duì)應(yīng)編號(hào)Function GetstationNumber(name As String)Dim i As IntegerFor i = 1 To m_PnumberIf P_Name(i) Then將待查點(diǎn)名與已經(jīng)存入點(diǎn)名數(shù)組的點(diǎn)比較If P_Name(i) = name ThenGetstationNumber = iExit ForEnd IfElse 待查點(diǎn)是新的點(diǎn)名,將新點(diǎn)名放到 P_Name 數(shù)組中P_Name(i) = nameGetstationNumber = iExit Fo

6、rEnd IfNext iEnd Function(4)從文本文件中寫數(shù)據(jù)(將從data.txt 讀入的數(shù)據(jù),寫入到result.txt 文件中)Open“C:Users WHDesktop 練習(xí)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實(shí)驗(yàn) 2 水準(zhǔn)網(wǎng)平差程序設(shè)計(jì)實(shí)驗(yàn)?zāi)康模?通過本次實(shí)驗(yàn)的練習(xí),使學(xué)生掌握水準(zhǔn)網(wǎng)平差中近似高程計(jì)算算法、組成誤差方程系數(shù)陣B、組成誤差方程常數(shù)項(xiàng)L及權(quán)陣生成算法。掌握法方程的組建 參數(shù)改正值的計(jì)算以及單位權(quán)中誤差的計(jì)算。掌握水準(zhǔn)網(wǎng)平差中輸出高程平差值和高程中誤差、 輸出觀測值及其改正數(shù)與平差值等信息并保存為平差成果文件的方法。實(shí)驗(yàn)內(nèi)容:1)在讀入水準(zhǔn)網(wǎng)數(shù)據(jù)后,進(jìn)行待定點(diǎn)近似坐標(biāo)的計(jì)算;2)基于間接平

8、差的思想,以觀測的測段高差為觀測值,組成誤差方程系數(shù)矩陣B 及常數(shù)項(xiàng)矩陣L;3)基于水準(zhǔn)網(wǎng)平差中定權(quán)的方法(測段長或測站數(shù)定權(quán)) ,生成權(quán)陣P。4) 利用矩陣的基本運(yùn)算(調(diào)用矩陣運(yùn)算函數(shù)即可)得到法方程系數(shù)矩陣及常數(shù)項(xiàng)矩陣。 該實(shí)驗(yàn)的內(nèi)容其實(shí)質(zhì)就是調(diào)用矩陣運(yùn)算函數(shù)。5)熟悉VB 中輸出函數(shù)Print 的用法,及控制輸出格式的函數(shù)的用法,如Space()、 String()6)水準(zhǔn)網(wǎng)平差結(jié)束后,將變量及數(shù)組中的數(shù)據(jù)輸出到平差結(jié)果文件中。實(shí)驗(yàn)步驟:1. 讀入水準(zhǔn)網(wǎng)數(shù)據(jù)(1)建立文本文件并輸入數(shù)據(jù)在桌面上新建一“data.txt” ( 文本文件路徑為C:Users WHDesktop練習(xí)1data.

9、txt”)。輸入以下內(nèi)容: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練習(xí)1 out.txt”)。Private Sub Command1_Click()(2)讀入水準(zhǔn)網(wǎng)數(shù)據(jù)Open C

10、:UsersWHDesktop練習(xí)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 編程工具,進(jìn)入編

12、程主界面。在窗體上利用控件新建 “載入數(shù)據(jù)”、“開始計(jì)算”、“導(dǎo)出結(jié)果”、“清空”四個(gè)按鈕和一個(gè)文本框。3.定義相應(yīng)變量、數(shù)組和實(shí)現(xiàn)各功能的函數(shù)(過程)詳見附錄二(1)水準(zhǔn)網(wǎng)中近似坐標(biāo)計(jì)算(2)生成誤差方程系數(shù)矩陣B 及常數(shù)項(xiàng)矩陣L(3)生成權(quán)陣P(4)殘差及中誤差計(jì)算函數(shù)(5)組成法方程及平差計(jì)算(6)平差結(jié)果輸出附件1 矩陣基本運(yùn)算源碼(1)兩矩陣相加Private Function Msum(M As Integer, n As Integer, Matrixsum() As Double, Matrix1() As Double, Matrix2() As Double)矩陣求和函數(shù)D

13、im 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)矩陣求差函數(shù)Dim i1

14、 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)矩陣轉(zhuǎn)置Function Mchange(M As Integer, n As Integer, Matrixchange() As Double, Matrix1() As Double)矩陣轉(zhuǎn)置函數(shù)Matrix1()需轉(zhuǎn)置的矩陣,Matrixchan

15、ge()為轉(zhuǎn)置后的矩陣Dim i1 As Integer, i2 As IntegerReDim Matrixchange(1 To n, 1 To M) 動(dòng)態(tài)分配用來存儲(chǔ)轉(zhuǎn)置后的矩陣For i1 = 1 To MFor i2 = 1 To nMatrixchange(i2, i1) = Matrix1(i1, i2)Next i2Next i1End Function(4)兩矩陣相乘矩陣相乘函數(shù), MatrixMultiply()為存儲(chǔ)AB 后的矩陣, Matrix1()為A矩陣, Matrix2()為B 矩陣,注意矩陣相乘的順序Mi 為行, Ni 為列,i=1,2Function Mmul

16、tiply(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 兩矩陣不能相乘,請(qǐng)檢查!, vbOKCancel + vbCritical + vbDefaultButton1Exit FunctionEnd IfReDim MatrixMultiply(1 To

17、 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功能:實(shí)矩陣求逆的全選主元高斯約當(dāng)法參數(shù):n - Integer 型

18、變量,矩陣的階數(shù)mtxA - Double 型二維數(shù)組,體積為n x n。存放原矩陣A;返回時(shí)存放其逆矩陣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調(diào)整恢復(fù)行列次序F

21、or 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 水準(zhǔn)網(wǎng)平差程序計(jì)算源碼(1)水準(zhǔn)網(wǎng)中近似坐標(biāo)計(jì)算Sub ca_H(

22、) 水準(zhǔn)網(wǎng)中待定點(diǎn)近似高程計(jì)算Dim k1 As Integer, H_N As Integer H_N 為計(jì)算出近似高程點(diǎn)個(gè)數(shù)Dim c1 As Integer, c2 As IntegerH_N = 0Do While H_N (m_Pnumber - m_knPnumber)For k1 = 1 To m_GaochaNc1 = StartP(k1) 觀測高差起點(diǎn)c2 = EndP(k1) 觀測高差終點(diǎn)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)生成誤差方程系數(shù)矩陣B 及常數(shù)項(xiàng)矩陣LSub GouJianBL(H() As Double, StartP() As Integer, EndP() AsInteger) 構(gòu)建誤差方程系數(shù)矩陣B 與LH()為近似高程數(shù)組, StatP()為起點(diǎn)點(diǎn)號(hào)數(shù)組, EndP()為終點(diǎn)點(diǎn)號(hào)數(shù)組Dim k1 As Integer, k2 As Integer, k3 As Integer, c1 As Integer, c2As IntegerFor k1 = 1

24、 To m_GaochaNFor k2 = 1 To (m_Pnumber - m_knPnumber)B(k1, k2) = 0NextNextFor k1 = 1 To m_GaochaNc1 = StartP(k1) 觀測高差起點(diǎn)c2 = EndP(k1) 觀測高差終點(diǎn)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_knPn

25、umber) = -1End IfIf c1 m_knPnumber ThenB(k1, c2 - m_knPnumber) = 1End IfL(k1, 1) = gaocha(k1) - (H(c2) - H(c1)NextEnd Sub(3)生成權(quán)陣PSub goujianP() 構(gòu)建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(k1

26、) = 0 ThenMsgBox (第 + Str(k1) + 測段長為0! )End IfIf k1 = k2 ThenP(k1, k2) = 1 / Sqr(Li(k1)End IfNextNextEnd Sub(4)殘差及中誤差計(jì)算函數(shù)Sub ca_V() 殘差計(jì)算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) = vv

27、p_vv = p_vv + P(k1, k1) * vv * vvm_mu = Sqr(p_vv / (m_GaochaN - (m_Pnumber -m_knPnumber)NextEnd Sub(5)組成法方程及平差計(jì)算Private Sub Command2_Click() 平差計(jì)算及結(jié)果輸出按鈕ca_HGouJianBL H, StartP, EndPgoujianPMchange m_GaochaN, m_Pnumber - m_knPnumber, Matrixchange,B B 轉(zhuǎn)置的計(jì)算Mmultiply (m_Pnumber - m_knPnumber), m_Gaocha

28、N,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_knPnumb

29、er), (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)平差結(jié)果輸出Sub Prin

30、tResult() 平差結(jié)果輸出Dim outstring As String 存儲(chǔ)保存的信息Dim qii As Double, qjj As Double, qij As Double 存儲(chǔ)法方程系數(shù)矩陣對(duì)交線上元素Dim k1 As Integer, c1 As Integer, c2 As Integer, ml As Doubleml存儲(chǔ)觀測高程中誤差,m_mu 單位權(quán)中誤差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, 點(diǎn)名 近似高程 改正數(shù) 高程平差值 中誤差+ 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 = outstrin

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論