第一篇:公開課 VB程序設計教案
第四課 學學程序設計—初步認識編程軟件VB 教學目標:
知識目標:了解什么是程序設計語言和計算機程序以及語言的分類
過程與方法:培養學生的閱讀總結和自主探索能力
情感態度與價值觀:通過學生利用所學的知識解決實際問題,激
發學生的學習興趣
教學重難點:了解什么是程序設計語言
啟發學生創新思維
以任務為驅動,激發學生創新思維 教法:講授法、任務驅動法 教學過程:
一、導入新課
教師運行游戲小程序,引起學生的興趣,并打開程序的原代碼說明編程并不很神秘。試運行游戲小程序,激發學生的學習興趣。
二、教師講授: 程序設計語言
教師活動:語言是人類交流思想、溝通感情最重要的工具。那么語言不通的人如何交流呢?
學生活動:請一個語言翻譯或自己學會他人的語言
教師活動:計算機所做的事情均為人向機器下達的命令,那么操作作者又是通過什么語言同計算機進行溝通的呢? 程序設計語言的分類及特點
1、機器語言
教師活動:①計算機能聽懂的語言(機器語言)②機器語言的實質(二進制語言)③二進制語言的特點。強調計算機內部只認識二進制
學生活動:談對二進制語言的感受
教師小結:機器語言的特點(二進制、計算機直接能懂、難以理解,與人類語言差距較大)匯編語言-用助記符號表示面向機器的程序設計語言。使用匯編語言編寫的程序,機器不能直接識別,要由一種程雪匯編語言翻譯成機器語言。適合編寫直接控制機器操作的程序,不容易使用。高級語言-最接近人的自然語言,即簡單易學,它所編制的程序計算機執行時需要“翻譯”,執行速度比二進制程序慢。三:展示微課視頻
VB簡介、認識VB窗口、相關概念:
1、對象的概念
2、屬性的概念
3、事件和代碼的概念。演示設計運行程序“奔跑的小汽車”依照微課演示編寫程序“奔跑的小汽車” 四:學生體驗
1、學生編寫程序“奔跑的小汽車”,教師巡回指導。
2、試修改程序,讓汽車倒車、速度變慢。
五、教學評價:
1、教師點評教師通過巡視,把部分學生修改的結果進行點評,指出典型的錯誤。
六、課后小結:
這節課,我們體驗了用VB設計程序,了解程序有關知識。(回顧本節知識)希望同學們繼續努力。
第二篇:程序設計教案VB版第三章
第三章
矩陣的基本計算程序設計方法
§3-1 行列式的性質(參見文獻[39]P91)
矩陣的基本計算用到了行列式的內容。行列式通常用記號A或detA表示,det的英文單詞是:determinant。為后面討論矩陣計算時方便,下面先敘述行列式的十個主要性質。
1、把行列式的行變為同號數的列,行列式的值不變。即一個行列式與它的轉置行列式的值相等。
2、對調行列式的兩行(或兩列),行列式的符號改變,但絕對值不變。
3、有兩行(或兩列)相同的行列式的值必等于零。
4、行列式等于它任意一行(或一列)的各元素與對應于它們的代數余子式的乘積的和。
5、行列式某一行(或某一列)的各元素與另一行(或另一列)對應元素的代數余子式的乘積的和恒等于零。
6、行列式的某一行(或某一列)的各元素如果有公因子,這公因子可以提到行列式記號的外面去。
7、如果行列式的某一行(或某一列)的各元素都等于零,則此行列式等于零。
8、如果行列式的第i行(或第i列)的各元素是兩個加數的和,則此行列式可表示為兩個行列式的和,其中一個行列式的第i行(或第i列)的各元素是上述的一個加數,而另一個行列式的第i行(或第i列)的各元素是另一個加數;在這三個行列式中,其余的各元素完全相同。
9、如果行列式的兩行(或兩列)的對應元素成比例,則此行列式等于零。
10、把行列式的某一行(或某一列)所有的元素同乘以一個數后,加于另一行(或另一列)的各對應元素上,行列式的值不變。
§3-2 矩陣基本計算的程序設計原理
矩陣的基本計算包括:矩陣的初等變換(行變換或列變換),矩陣的加、減法,矩陣的轉置,矩陣乘法的定義及計算方法、代數余子式的定義及計算方法、按照定義式進行矩陣求逆等的編程方法。矩陣的英文單詞是matrix。
一、矩陣的基本概念
設有一個線性方程組,例如測量平差中的條件方程: ?a1v1?a2v2????anvn?wa?0??b1v1?b2v2????bnvn?wb?0 ?
????????????????rv?rv????rv?w?022nnr?11等式的左邊由三部分組成,即n個改正數vi,r個改正數的系數,r個閉合差。現在我們將這三種成份按原來排列的次序抽出來,分別組成下面三個表:
?a1??b1????r?1a2b2?r2????????an??bn?,?v1???rn???wa??wbvn?,????w?r???? ???v2? 18 這種由一組數排列成矩形的表,就稱為矩陣。表中的數稱為矩陣的元素。在第一個表中有r行n列元素,該表稱為r?n階矩陣;第二個表只有一行n列元素,稱為1?n階矩陣,或稱行矩陣;第三表有r行一列元素,稱為r?1階矩陣,或稱列矩陣。
一般地,設有m?n個元素排成矩形的表: ?a11??a21 A?????a?m1a12a22?am2????????a1n??a2n? ???amn??稱A為m行n列矩陣,aij稱為矩陣A的元素。m行n列矩陣記為m?n階矩陣。
二、常見的特殊矩陣
1、方陣
當m?n時,矩陣A稱為n階矩陣,或稱n階方陣。方陣A中的元素a11,a22,?,ann稱為矩陣A的對角線元素。例如條件平差中法方程組的系數陣,即為方陣。
2、零矩陣
如果某一個矩陣的元素全為零,則稱為零矩陣,記為O。測量平差中常見的零矩陣是r?1階零矩陣,一般也用O表示。即:
?0????0? O???
????0???
3、對角陣
如果一個n階方陣除對角線元素外,其余元素全為零,則稱其為對角陣,即: ?a11??0 A?????0?0a22?0????????0??0? ???ann??
4、單位矩陣
對于對角陣A,當主對角線元素全為1時,即:a11?a22??ann?1,則稱其為單位矩陣,簡稱單位陣,也稱為幺陣,一般用E表示,也有用I表示的。
5、上三角矩陣
對于n階方陣A,如果當i?j時,aij均為零,則稱該矩陣為上三角矩陣。即: ?a11??0A? ????0?a12a22?0????????a1n??a2n? ???ann??
6、下三角矩陣
對于n階方陣A,如果當i?j時,aij均為零,則稱該矩陣為下三角矩陣。即: ?a11??a21 A?????a?n10a22?an2????????0??0? ???ann??
7、行矩陣
對于m?n階矩陣,若m?1時,則稱其為行矩陣,也稱為行向量。即:
A??a11
8、列矩陣
對于m?n階矩陣,若n?1時,則稱其為列矩陣,也稱為列向量。即: ?a11???a?21? A??
?????a??m1?a12?a1n?
9、對稱方陣
對于n階方陣A: ?a11??a21A? ????a?n1a12a22?an2????????a1n??a2n? ???ann???ann兩側的元素對稱相等,若主對角線元素a11,a22,即aij?aji,則稱A為n階對稱方陣。
三、矩陣的基本計算
矩陣和行列式有本質的區別,屬于兩個不同的概念。行列式本身代表一個數,而矩陣僅僅是一組數排列成的表,它只說明表中各元素的排列位置,但矩陣的整體可以參與運算。下面介紹矩陣的基本計算規則。
㈠、矩陣的相等
設有兩個同階矩陣A?(aij)和B?(bij),如果它們的對應元素相等,即:aij?bij,則矩陣A和B稱為相等。
㈡、矩陣的加、減法
1、如果矩陣A?(aij)和B?(bij)是同階矩陣,則矩陣A與B是可加減的。將兩個同階矩陣中對應元素求和差,稱為矩陣的加減法。即: ?a11?b11??a21?b21 A?B??????a?bm1?m1a12?b12a22?b22??am2?bm2????????a1n?b1n??a2n?b2n? ????amn?bmn?? 20 若令aij?bij?cij,C?(cij),則矩陣:
C?A?B
可見矩陣C必與A、B同階。
2、一個常數與一個矩陣相乘的定義及計算方法
常數?與某矩陣A相乘所得之矩陣B,其元素就是常數?與矩陣A中各個元素之乘積。即:
???a11????a21 B???A?A?????????am1???a12??a22???????????a1n???a2n???am2??amn??? ???
3、矩陣加減法運算的基本性質
⑴、可結合性:A?(B?C)?(A?B)?C ⑵、可交換性:A?B?B?A
⑶、A?O?A(式中O為與A同階的零矩陣)
⑷、(???)A???A???A(式中A為矩陣,?、?是常數)⑸、?(A?B)???A???B(式中A、B為矩陣,?是常數)
㈢、矩陣的轉置
1、設A是m?n階矩陣,將A的行與列依次對換,得n?m階矩陣,稱為A的轉置矩陣,并記為A?,或記為AT。即: ?a11??a21 A?????a?m1a12a22?am2????????a1n??a11??a2n??a12TA? ????????aamn??1na21a22?a2n????????am1??am2? ???anm??
2、轉置矩陣的性質
⑴、將矩陣進行兩次轉置即得原矩陣,即:(A)⑵、(A?B)⑶、(??A)TTTTT?A。
?ATT?B
TTT???A(式中A為矩陣,?是常數)
⑷、(A?B)?B?A
⑸、對角陣的轉置矩陣,仍為對角陣,且與原對角陣相等。⑹、若AT?A,則A為對稱矩陣。
㈣、矩陣相乘的定義及計算方法
1、兩個矩陣相乘的定義及計算方法 設矩陣A的列數等于矩陣B的行數: ?a11??a21A?????a?m1a12a22?am2????????a1p??b11??a2p??b21B? ????????bamp??p1c1n??c2n? ???cmn??b12b22?bp2????????b1n??b2n? ???bpn??又設矩陣:
?c11??c21 C?????c?m1pc12c22?cm2????????這里cij??ak?1ik,將C稱為?bkj(i?1,2,?,m;j?1,2,?,n;1?i?m;1?j?n)矩陣A與B的乘積,記作C?AB。
2、矩陣乘積的性質
⑴、注意,一般地,AB?BA,即矩陣的乘法一般不滿足交換律。
⑵、矩陣乘法的結合律是成立的,即:(AB)C?A(BC)或(??A)B??(AB)。⑶、矩陣乘法的分配律是成立的,即:A(B?C)?AB?AC或(A?B)C?AC?BC。⑷、若A是n階矩陣,E是n階單位矩陣,則有:AE?EA?A。
㈤、代數余子式的定義及計算方法
在某階行列式中,劃去aij所在的行和列的元素,余下的元素構成一個降階行列式,它與(?1)i?j的乘積叫做aij的代數余子式,記作Aij。例如:
a11a12a22a322?3a13a23中a23的代數余子式為: a33行列式a21a31A23?(?1)a11a31a12a32??a11a31a12a32
㈥、按照定義式進行矩陣求逆的一種編程方法
1、非奇異矩陣和奇異矩陣的定義 ?a11??a21設n階矩陣為:A?????a?n1a12a22?an2????????a1n??a2n?,方陣A的行列式記作A,若A?0,???ann??稱A為非奇異矩陣(也稱滿秩矩陣);否則,稱A為奇異矩陣。
2、逆矩陣的定義 對于n階矩陣A,如果有一個n階矩陣B,滿足:AB?BA?E,則B叫做A的逆矩陣,A也叫做B的逆矩陣。A的逆矩陣記作A?1,這里E是單位矩陣。
重要的性質:一個n階矩陣有逆矩陣的必要與充分條件是該矩陣是非奇異矩陣。非奇異矩陣有唯一的逆矩陣。
3、伴隨方陣的定義及逆矩陣的定義式
設A為一個n階非奇異矩陣,則A有唯一的一個逆矩陣A?1,其定義式為:
A?1?1AA*
?a11??a21A? ????a?n1??? A*?????A11A12?A1na12a22?an2A21A22?A2na12a22?an2????????????????????????a1n??a2n? ???ann??An1??An2? ???Ann??a1na2n?anna11 A?a21?an1
式中,Aij是行列式A中元素aij的代數余子式,稱矩陣A*為矩陣A的伴隨方陣,A?1是矩陣A的逆矩陣。
4、矩陣A的行列式A的值的計算方法
根據行列式的性質10,首先通過列變換,將行列式第一行上除主對角線上的一個元素外,將這行上其它各元素均變換成零;這樣,根據行列式的性質4可知,行列式的值等于第一行各元素與對應于它們的代數余子式的乘積之和,即等于第一行不為零的主對角線上的元?與其代數余子式的積。素a11若行列式的某一行(或某一列)的所有元素均為零,則該行列式的值為零,不需要進行變換。
a11a12a22?an2????????a1na2n?ann A?a21?an1
a110?a22??2an?????????a22?a23?a33??3an0?na2??ann?????????na2?na3??anna1ia11 ?a21?an1
???1?1?1a11?a32??2an
上式中首先將a12、a13、??、a1n均變換為0,具體方法如下:取乘數m1i??
3、??、n)(i?
2、,從第二列起,每列各元素加上第一列各元素與m1i的積。例如,若想
?a12使a12變為0,應將第一列各元素同乘以???a11??a13將第一列各元素同乘以???a11???后,加到第二列上;若想使a13變為0,應????后,加到第三列上;??。?? 仿照列變換,也可以進行行變換,使a11、a21、a31、??、an1均變換為0。
同理,往下可以逐次變換,每變換一次,行列式便降一階,最后行列式A的值為經過變換的主對角線上各元素與每一次降階時的(?1)i?j的積。
由于每次降階時均有i?j,所以(?1)i?j?1。這樣,矩陣A的行列式的值為: ??a33???a44?????
A?a11?a225、伴隨矩陣A*中各元素Aij的計算方法
類似地,利用上述求行列式A的值的方法可以求出伴隨矩陣A*中各元素Aij(Aij為行列式A中元素aij的代數余子式)的值。
6、有關逆矩陣的兩個性質
①、若矩陣A、B都有逆矩陣,則其乘積AB也有逆矩陣,其(AB)②、設A為非奇異矩陣,則(A)?1T?1?B?1A?1。
?(A)T?1,即(A)為AT的逆矩陣。
?1T㈦、矩陣的秩
1、矩陣A的k階子式的定義
在一個m行、n列的矩陣A中任取k行、k列,位于這些行、列相交處的元素構成的k階行列式,叫做A的k階子式。
2、矩陣A的秩的定義
矩陣A中不等于零的子式的最大階數,叫做矩陣A的秩。
3、關于計算矩陣A的秩的三個定理(這三個定理又稱為矩陣的初等變換)①、如果一個矩陣的某一行(列)乘以一個不為零的數,則矩陣的秩不變。
②、若一個矩陣的任意兩行(列)交換,則矩陣的秩不變。
③、如果一個矩陣A的某一行(列)乘以一個不為零的數k,然后加到另一行(列)的對應元素上去,則矩陣的秩不變。
㈧、分塊矩陣
對于階數比較高的矩陣A,在計算過程中,經常采用“矩陣分塊法”,這樣,它可以使計算簡化為較低階矩陣的運算。
1、分塊矩陣的定義
將一個m?n階矩陣A用若干條縱線和橫線分成多塊低階矩陣,每一塊低階矩陣稱為A的子塊,以子塊為元素的矩陣稱為分塊矩陣。
實際計算中,多數情況下是將一個m?n階矩陣A化成m?1階或1?n階分快矩陣,即將矩陣A按列或按行分塊,這樣分塊的作用是規律性強,利于編程計算。
2、分塊矩陣的計算規則
⑴、作分塊矩陣的加減法運算時,必須將兩個同階矩陣按相同方法分塊,才能運算。
⑵、作分塊矩陣A與B相乘時,A的列子陣數必須等于B的行子陣數,且對應相乘的子陣Cih與Dhi必須有Cih的列數等于Dhi的行數。即:
?C11??C21A?????C?s1C12C22?Cs2????????at?1,l?2at?2,l?2?at?m,l?2???C1p??D11??C2p??D21 B????????DCsp???p1????????at?1,l?n??at?2,l?n?? ??at?m,l?n??D12D22?Dp2????????D1r??D2r? ???Dpr??且 Cih?at?1,l?1??at?2,l?1?????a?t?m,l?1?bf?1,e?1??????bf?x,e?1 Dhibf?1,e?n????
?bf?x,e?n?⑶、分塊矩陣轉置時,先將子陣看成矩陣的元素,作轉置后,再將每個子陣轉置。即:
?C11??C21A?????C?s1
C12C22?Cs2????????TC1p??C11??TC2p??C12T A????????CTCsp???1pC21C22?C2pTTT????????TCs1??TCs2?? ??T?Csp?25 ⑷、分塊矩陣求逆法 參見文獻[30]P506。
四、矩陣基本計算程序示例
1、矩陣加減、轉置、乘法運算 Private Sub GPHARRAY1_Click()Rem ***** 矩陣加減計算子菜單 ***** Dim I As Integer Dim J As Integer I = 3 J = 3 ReDim A(1 To I, 1 To J)As Double ReDim B(1 To I, 1 To J)As Double A(1, 1)= 1 A(1, 2)= 2 A(1, 3)= 3 A(2, 1)= 4 A(2, 2)= 5 A(2, 3)= 6 A(3, 1)= 7 A(3, 2)= 8 A(3, 3)= 9 B(1, 1)= 0.1: '***** 第一行第一列 B(1, 2)= 0.2 B(1, 3)= 0.3 B(2, 1)= 0.4: '***** 第二行第一列 B(2, 2)= 0.5 B(2, 3)= 0.6 B(3, 1)= 0.7: '***** 第三行第一列 B(3, 2)= 0.8 B(3, 3)= 0.9 Cls Call GPHARRAY11(A(), B())End Sub
Private Sub GPHARRAY11(ByRef A()As Double, ByRef B()As Double)Rem ***** 矩陣加減計算子程序 ***** Dim I As Integer Dim J As Integer Dim N As Integer N = 3 ReDim C(1 To N, 1 To N)As Double For I = 1 To N For J = 1 To N C(I, J)= A(I, J)+ B(I, J)Print Spc(6);“C(”;I;“,”;J;“)=”;C(I, J)Next J Next I End Sub
Private Sub GPHARRAY2_Click()Rem ***** 矩陣轉置計算子菜單 ***** Dim I As Integer I = 2 J = 3 ReDim A(1 To I, 1 To J)As Double A(1, 1)= 2: '***** 第一行第一列 A(1, 2)= 3 A(1, 3)= 4 A(2, 1)= 5: '***** 第二行第一列 A(2, 2)= 6 A(2, 3)= 7 Cls Call GPHARRAY21(A())End Sub
Private Sub GPHARRAY21(ByRef A()As Double)Rem ***** 矩陣轉置計算子程序 ***** Dim I As Integer Dim J As Integer Dim I1 As Integer Dim J1 As Integer I = LBound(A, 1): '***** 返回二維數組第一維的最小下標 J = LBound(A, 2): '***** 返回二維數組第二維的最小下標 I1 = UBound(A, 1): '***** 返回二維數組第一維的最大下標 J1 = UBound(A, 2): '***** 返回二維數組第二維的最大下標 ReDim C(I To J1, J To I1)As Double For R = 1 To J1 For S = 1 To I1 C(R, S)= A(S, R)Print Spc(6);“C(”;R;“,”;S;“)=”;C(R, S)Next S 27 Next R End Sub
Private Sub GPHARRAY3_Click()Rem ***** 矩陣乘法計算子菜單 ***** Dim I As Integer Dim J As Integer I = 2 J = 3 K = 4 ReDim A(1 To I, 1 To J)As Double ReDim B(1 To J, 1 To K)As Double A(1, 1)= 1 A(1, 2)= 2 A(1, 3)= 3 A(2, 1)= 4 A(2, 2)= 5 A(2, 3)= 6 B(1, 1)= 1: '***** 第一行第一列 B(1, 2)= 2 B(1, 3)= 3 B(1, 4)= 4 B(2, 1)= 5: '***** 第二行第一列 B(2, 2)= 6 B(2, 3)= 7 B(2, 4)= 8 B(3, 1)= 9: '***** 第三行第一列 B(3, 2)= 10 B(3, 3)= 11 B(3, 4)= 12 Cls Call GPHARRAY31(A(), B())End Sub
Private Sub GPHARRAY31(ByRef A()As Double, ByRef B()As Double)Rem ***** 矩陣乘法計算子程序 ***** Dim I As Integer Dim J As Integer Dim K As Integer Dim U As Integer Dim I1 As Integer Dim J1 As Integer Dim K1 As Integer I1 = UBound(A, 1): '***** 返回二維數組第一維的最大下標,此為矩陣A()的行數
J1 = UBound(A, 2): '***** 返回二維數組第二維的最大下標,此為矩陣A()的列數 K1 = UBound(B, 2): '***** 返回二維數組第二維的最大下標,此為矩陣B()的列數 Rem ***** C()=A()*B()
ReDim C(1 To I1, 1 To K1)As Double For I = 1 To I1 For K = 1 To K1 U = 0 For J = 1 To J1 U = U + A(I, J)* B(J, K)Next J C(I, K)= U Print Spc(6);“C(”;I;“,”;K;“)=”;C(I, K)Next K Next I End Sub
2、矩陣求逆
Private Sub Form_Load()Dim I As Integer Dim J As Integer Dim K As Integer Dim N As Integer Dim R As Integer Dim DetA As Double, S As Double N = 4 ReDim A(1 To N, 1 To N), B(1 To N, 1 To N)As Double, C(1 To N, 1 To N)As Double 'A數組存放源矩陣,B數組臨時存放各元素的代數余子式,C數組存放逆矩陣 A(1, 1)= 10: A(1, 2)= 4: A(1, 3)= 3: A(1, 4)= 6 A(2, 1)= 5: A(2, 2)= 8: A(2, 3)= 7: A(2, 4)= 9 A(3, 1)= 1: A(3, 2)= 3: A(3, 3)= 5: A(3, 4)= 7 A(4, 1)= 2: A(4, 2)= 6: A(4, 3)= 3: A(4, 4)= 1 '求矩陣的行列式 For I = 1 To N For J = 1 To N B(I, J)= A(I, J)Next J Next I Call QIUJUZHEN(B(), N, S)DetA = S Debug.Print “S=”;S '求代數余子式及伴隨矩陣 N = N1)= A(K, R)If R < J And K > I Then B(K1, R1 For J = I + 1 To N M =-B(I, J)/ B(I, I)For K = I To N B(K, J)= B(K, J)+ M * B(K, I)' Debug.Print “B(”;K;“,”;J;“)=”;B(K, J)Next K Next J Next I For I = 1 To N S = S * B(I, I)Next I
End Function 30
第三篇:程序設計教案VB版第七章
第七章
繪制誤差橢圓、誤差曲線的程序設計方法
§7-1 繪制誤差橢圓的程序設計方法
測量平面控制網平差計算后進行精度評定時,點位中誤差雖然可以用來評定待定點的點位精度,但是它卻不能代表該點在某一任意方向上的位差大小。在有些情況下,往往需要確定點位在某些特殊方向上的位差大小;此外,還要了解點位在哪一個方向上的位差最大,在哪一個方向上的位差最小。例如,在工程放樣中,就經常需要研究這個問題。為了便于求定待定點點位在任意方向上位差的大小,一般是通過求出待定點的點位誤差橢圓來實現的。通過誤差橢圓可以求得待定點在任意方向上的位差,這樣就可以較精確地、形象而全面地反映待定點點位在各個方向上誤差的分布情況。
為了確定任意兩個待定點之間相對位置的某些精度,也需要作出兩個待定點之間的相對誤差橢圓。
無論是表示點位絕對位差的誤差橢圓,還是表示兩個待定點之間相對位置的某些精度的相對誤差橢圓,在測量程序設計中所要面臨的問題都是繪制橢圓,而這個橢圓一般情況下不是正立的。由于目前常用的幾種編程語言(例如VB、VC)中沒有現成的語句、命令、函數或方法來繪制傾斜任意角度的橢圓,因此,下面研究在計算機屏幕上繪制傾斜任意角度的橢圓的編程方法。
一、繪制誤差橢圓的基本思路
以下討論問題及編程中所使用的平面直角坐標系,設經過一段程序的控制,已將屏幕繪圖區域的平面直角坐標系調整為測量平面直角坐標系(以下簡稱坐標系),即縱軸向上為X軸正向,橫軸向右為Y軸正向。
繪制傾斜任意角度的誤差橢圓時,已知數據如下: 橢圓的長半軸:E(也可用a表示)橢圓的短半軸:F(也可用b表示)
橢圓中心點的在坐標系中的坐標:(X0,Y0)
橢圓長半軸在坐標系中的坐標方位角:T(T稱為誤差橢圓的主軸方向)
如圖7-1所示,繪制傾斜任意角度的誤差橢圓的基本思路是:首先,求出在坐標系中坐標方位角為T的橢圓長半軸與橢圓圓周的交點G的坐標;然后,再求出橢圓圓周上一系列點P(i)的坐標(設i?0時,P(0)點與G點重合;i?n時,P(n)點與G點重合);最后,從G點開始用VB中畫直線方法LINE(以下簡稱LINE)依次連接相鄰點。
為了用LINE依次連接相鄰點時所畫出的直線趨近于橢圓曲線,需要使橢圓圓周上一系列點P(i)(將P(i)點稱為誤差橢圓圓周上細部點,簡稱P(i)點,下同)分布合理,即P(i)點與P(i?1)點之間的直線距離應足夠小。鑒于計算機屏幕的分辨率,可控制在0.2mm內。
關于G點坐標的計算,應以橢圓中心點坐標(X0,Y0)作為起始坐標、以橢圓的長半軸E為距離、以T為坐標方位角、按坐標正算的方法進行計算,即:
?XG?X0?a?Cos(T)
(7-1)?Y?Y?a?Sin(T)0?G
155 橢圓長軸與橢圓圓周的另一個交點GA的坐標為:
?sT??)?XGA?X0?a?Co((7-2)
(T??)?YGA?Y0?a?Sin橢圓短軸與橢圓圓周的兩個交點H、HA的坐標分別為:
??X?X?b?Cos(T?)0??H(7-3)??Y?Y?b?Sin(T??)H0?2?3??X?X?b?Cos(T?)0??HA2
(7-4)?3??Y?Y?b?Sin(T?)HA0?2?根據上述坐標,用LINE可畫出橢圓的長軸及短軸。以下重點介紹計算P(i)點坐標的方法。
二、計算P(i)點坐標的方法
1、坐標轉換公式
如圖7-1所示,設P點在坐標系XOY中的坐標為XP、YP,在坐標系EO?F中的坐標為EP、FP;O?點在坐標系XOY中的坐標為XO、YO;E軸正向在坐標系XOY中的坐標方位角為T。則可以推證出如下坐標互換公式:
圖7-1 傾斜任意角度的誤差橢圓
?XP?XO?EP?CosT?FP?SinT
(7-5)?Y?Y?E?SinT?F?CosTOPP?P?EP?(YP?YO)?SinT?(XP?XO)?CosT及:
?
(7-6)
F?(Y?Y)?CosT?(X?X)?SinTPOPO?P2、計算P(i)點坐標的參數方程法
如圖7-2所示,該法的基本思路是:先用橢圓的參數方程求解正立豎放橢圓上P(i)點坐標EP(i)、FP(i);然后,使用坐標轉換公式的(7-5)式計算P(i)點在坐標系XOY中的坐標XP(i)、YP(i)。
P(i)點在EO?F坐標系中的坐標EP(i)、FP(i)可用參數方程表示為:
156 ?EP(i)?a?Cos(t)
(7-7)??FP(i)?b?Sin(t)參照圖7-1,用P(i)代替P、EP(i)代替EP、FP(i)代替FP、XP(i)代替XP、YP(i)代替YP,將(7-7)式代入(7-5)式中,可得任一點P(i)在XOY坐標系中的坐標為:
?XP(i)?X0?(a?Cos(t))?Cos(T)?(b?Sin(t))?Sin(T)
(7-8)??YP(i)?Y0?(a?Cos(t))?Sin(T)?(b?Sin(t))?Cos(T)如圖7-2所示,編程中,可設t?i?(DT),其中DT是橢圓圓周上有序(即有一定規律)分布的一系列點中的任意相鄰兩點P(i)、P(i?1)和橢圓中心相連的直線的夾角,t應從O?G開始沿順時針方向遞增,即自E軸正向沿著順時針方向至O?P(i)的水平夾角;i是程序中的循環變量,i?0,1,2,??,n。
3、計算P(i)點坐標的直線點斜式方程法
如圖7-2所示,該法的基本思路是:首先,求出
圖7-2 正立豎放橢圓 橢圓圓周上一系列點P(i)到橢圓中心的距離D(i);然后,直接用坐標正算公式求解P(i)點在坐標系XOY中坐標XP(i)、YP(i)。
設正立豎放橢圓中心O?點在EO?F坐標系中的坐標為(0,則過該點及橢圓圓周上任0),一點P(i)的直線點斜式方程為:
FP(i)?m?EP(i)
(7-9)其中:
m?tg(i?DT)
(7-10)
(7-10)式中的m為直線O?P(i)的斜率,i、DT的意義與前面相同。
在EO?F坐標系中的正立豎放橢圓的標準方程為:
(EP(i))2(FP(i))2??
1(7-11)
22ab將(7-9)式代入到(7-11)式,并顧及(7-10)式,可解得:
a2b(EP(i))?2
(7-12)22b?a?tg(i?DT)2 157 則O?點至P(i)點的距離為:
D(i)?(EP(i))2?(FP(i))2
?a2?b2a2?b22?m?2
(7-13)
b2?a2?m2b?a2?m2從式(7-13)可以看出,D(i)的計算與坐標系無關,也可以說與橢圓傾斜角度無關。在圖7-1與圖7-2中,不論橢圓是正立豎放,還是傾斜任意角度的,D(i)是不變的。因此,P(i)點在坐標系XOY中的坐標按坐標正算公式可得:
??XP(i)?XO?D(i)?Cos(T?i?DT)
(7-14)
?YP(i)?YO?D(i)?Sin(T?i?DT)
編程中,如圖7-1所示,從G點開始依順時針方向用LINE依次連接相鄰點,最后,再回到G點,即可繪出所要求的誤差橢圓。
4、計算P(i)點坐標的遞推計算方法
該方法與計算P(i)點坐標的參數方程法基本相同,只是編程計算中采用了遞推計算的方法計算Cos(t)和Sin(t)。詳見后面的示例程序。
三、坐標軸的平移、旋轉公式(即(7-5)式、(7-6)式的推導過程)
如圖7-3所示,設P點在坐標系
?,YP?),O?點X?O?Y?中的坐標為(XP在坐標系XOY中的坐標為(XO,YO);經
圖7-3 坐標軸的平移、旋轉
?,YP?)平移、旋轉后,P點在坐標系XOY中的坐標為(XP,YP)。根據求(XP(XP,YP)的公式如下:
XP?XO?A1P
?X0?O?P?Cos(???)
s?Co?s?O?P?Si?n?Si?n
?XO?O?P?Co???Cos??YP??Sin? ?XO?XPYP?YO?O?A1
?Y0?O?P?Sin(???)
?YO?O?P?Sin??Cos??O?P?Cos??Sin?
158 ??Sin??YP??Cos?
?YO?XP?,YP?)(XO,YO)、(XP,YP)根據?、,也可求得,有以下兩種方法。(XP?、YP?。方法一:根據上面的兩式聯立方程組,可解得XP方法二:如圖7-3所示,設?PO?A1??1,則可得:
??O?P?Sin(???1)
XP
?O?P?Sin??Cos?1?O?P?Cos??Sin??(YP?YO)?Sin??(XP?XO)?Cos?
??O?P?Cos(???1)
YP
?O?P?Cos??Cos?1?O?P?Sin??Sin?1
?(YP?YO)?Cos??(XP?XO)?Sin?
四、正立橫放橢圓的參數方程與標準方程
繪制傾斜任意角度的誤差橢圓時,也可根據正立橫放橢圓推導出另一套公式進行編程。
如圖7-4所示,正立橫放橢圓的參數方程為:
圖7-4 正立橫放橢圓
?XP?XB?b?Cos? ?Y?Y?a?Sin?A?P 在坐標系XOY中,橢圓中心位于坐標原點的正立橫放橢圓的標準方程為:
Y2X2??1 a2b
2五、繪制誤差橢圓程序示例(輸出圖形見圖7-5)
Private Sub GPHPIC22_Click()Rem ***** 繪制誤差橢圓菜單子過程 ***** Dim X As Double Dim Y As Double Dim A As Double
159 Dim B As Double Dim T As String Cls
Form2.DrawStyle = 0: ' ***** 設定繪制單實線
Form2.DrawWidth = 1: ' ***** 設定繪制單實線的線寬
Form2.Line(1, 7)-(199, 143), RGB(255, 0, 0), B: '***** 繪制一個紅色矩形作為繪圖區域。
X = 80: '***** 橢圓中心測量縱坐標 ***** Y = 100: '***** 橢圓中心測量橫坐標 ***** A = 25.4: '***** 橢圓長半軸 ***** B = 9.5: '***** 橢圓短半軸 ***** T = “138 54 12”: '***** 橢圓長半軸坐標方位角 **** Call GPHP15(X, Y, A, B, T)End Sub
Private Sub GPHP15(ByVal XC As Double, ByVal YC As Double, ByVal A As Double, ByVal B As Double, ByVal T As String)Rem ***** 繪制誤差橢圓子過程 ***** Dim II As Integer Dim N As Integer Dim I As Integer Dim DT As Double Dim TT As Double: '***** 橢圓長半軸坐標方位角 ****
N = 200
ReDim X(N + 1)As Double ReDim Y(N + 1)As Double
TT = RAD(T): '***** 程序中T應為度、分、秒(字符串)DT = 2 * PI()/ N
II = 3: '***** 選擇繪制橢圓的方法
Select Case II Case 1: '***** 用橢圓參數方程及將坐標進行平移、旋轉變換的方法
Form2.PSet(YC + A * Sin(TT), XC + A * Cos(TT)), RGB(0, 0, 0)
For I = 1 To N
X(I)= XC + A * Cos(I * DT)* Cos(TT)ST * SS: '***** 遞推求算Cos(i*DT)
ST = ST * CC + CT * SS: '***** 遞推求算Sin(i*DT)
CT = DCT
XP = XC + A * CT * Cos(TT)-B * ST * Sin(TT)
YP = YC + A * CT * Sin(TT)+ B * ST * Cos(TT)
Form2.Line-(YP, XP), RGB(0, 0, 0)
Next I
Case 3: '***** 用點斜式直線方程與豎放橢圓的標準方程聯立方程組
Rem ***** 解算橢圓中心O(0,0)至橢圓圓周交點距離的方法
Dim AT As Double
Dim BT As Double
Dim XI As Double
Dim YI As Double
Dim M As Double
Dim DI As Double
Dim XPI As Double
Dim YPI As Double
Form2.PSet(YC + A * Sin(TT), XC + A * Cos(TT)), RGB(0, 0, 0)
161
AT = A ^ 2
BT = B ^ 2
For I = 1 To N
M = Tan(I * DT): '***** 直線的斜率
M = M ^ 2
XI = AT * BT /(BT + AT * M): '***** 正立豎放橢圓圓周i點縱坐標的平方,X(i)^2
YI = XI * M: '***** 正立豎放橢圓圓周i點橫坐標的平方,Y(i)^2
DI = Sqr(XI + YI): '***** 橢圓中心至橢圓圓周i點的距離D(i)
XPI = XC + DI * Cos(TT + I * DT): '***** 斜立橢圓圓周i點的縱坐標XP(i)
YPI = YC + DI * Sin(TT + I * DT): '***** 斜立橢圓圓周i點的橫坐標YP(i)
Form2.Line-(YPI, XPI), RGB(0, 0, 0)
Next I End Select
Rem ***** 繪制橢圓的長、短軸,用坐標正算的方法 *****
Dim X1 As Double
Dim Y1 As Double
Dim X2 As Double
Dim Y2 As Double
X1 = XC + A * Cos(TT)
Y1 = YC + A * Sin(TT)
X2 = XC + A * Cos(TT + PI())
圖7-5 誤差橢圓
Y2 = YC + A * Sin(TT + PI())
Line(Y1, X1)-(Y2, X2), RGB(255, 0, 0)
X1 = XC + B * Cos(TT + PI()/ 2)
Y1 = YC + B * Sin(TT + PI()/ 2)
X2 = XC + B * Cos(TT + 3 * PI()/ 2)
Y2 = YC + B * Sin(TT + 3 * PI()/ 2)
Line(Y1, X1)-(Y2, X2), RGB(255, 0, 0)
Rem ***** 以下繪制測量坐標系及方框 ***** Rem ***** 略 ***** End Sub
162 §7-2 繪制誤差曲線的程序設計方法
一、誤差曲線簡介
誤差曲線的方程為:
2m??a2?Cos2??b2?Sin2?
式中:
a —— 誤差曲線所對應的誤差橢圓的長半軸 b —— 誤差曲線所對應的誤差橢圓的短半軸
? —— 以a為起始方向、以誤差曲線中心為起始點、沿順時針方向對應誤差曲線上某點的方向角
m?—— 對應任意方向角?的誤差曲線上某點的位差
以不同的?和m?為極坐標的點的軌跡為一條閉合的曲線。顯然,從曲線中心O至曲線上任意點P(對應誤差曲線上某點的方向角為?)的向徑OP就是該方向的位差m?。這個曲線可以把各方向的位差清楚地圖解出來。
在工程測量中,誤差曲線的用途是廣泛的。根據這個圖可以確定坐標平差值在各個方向上的位差。參見文獻[34] P461-462)
二、誤差曲線的程序設計方法
由于編程語言中沒有現成的語句、命令、函數或方法來繪制傾斜任意角度的誤差曲線,因此,下面研究在計算機屏幕上繪制傾斜任意角度的誤差曲線的編程方法。
繪制傾斜任意角度的誤差曲線時,已知數據如下: 對應誤差曲線的誤差橢圓的長半軸:A(或a)對應誤差曲線的誤差橢圓的短半軸:B(或b)對應誤差曲線的誤差橢圓中心點的測量坐標系坐標:(XO,YO)對應誤差曲線的誤差橢圓長半軸在測量坐標系中的坐標方位角:T 下面討論問題及編程中所使用的平面坐標系均為測量平面直角坐標系,即縱軸向上為X軸正向,橫軸向右為Y軸正向。
繪制傾斜任意角度的誤差曲線的基本思路是:首先,求出在測量坐標系中坐標方位角為T的橢圓長半軸與橢圓圓周的交點G(該點也是橢圓長半軸與誤差曲線的交點)的坐標;然后,再求出誤差曲線上一系列點P(i)的坐標;最后,從G點開始用畫直線方法LINE依次連接相鄰點。
為了用畫直線方法LINE依次連接相鄰點時所畫出的直線趨近于誤差曲線,需要將誤差曲線上一系列點P(i)分布的合理,即P(i)與P(i?1)的距離應足夠小,且任意相鄰兩點P(i)與P(i?1)和誤差曲線中心(也是誤差橢圓中心)相連的直線的夾角均相等——這是為了使編程計算有規律性。
實際編程中,如圖7-6所示,在測量坐標系中坐標方位角為T的橢圓長半軸與橢圓圓周的交點G的坐標,應以橢圓中心點坐標(Xo,Yo)作為起始坐標、以橢圓的長半軸A為距離、以T為坐標方位角、按坐標正算的方法計算G點的坐標:
163 ?XG?X0?A?Cos(T)??YG?Y0?A?Sin(T)橢圓長軸與橢圓圓周的另一個交點GA的坐標為:
sT??)?XGA?X0?A?Co(?
Y?Y?A?Sin(T??)0?GA橢圓短軸與橢圓圓周的兩個交點F、FA的坐標分別為:
??X?X?B?Cos(T?)0??F2 ???Y?Y?B?Sin(T?)F0?2?3??X?X?B?Cos(T?)FA0??2 ??Y?Y?B?Sin(T?3?)FA0?2?根據上述坐標,用畫直線方法LINE可
圖7-6 傾斜任意角度的誤差曲線
畫出橢圓的長軸及短軸,這也是誤差曲線的 長軸及短軸。
計算傾斜任意角度T的誤差曲線上任意點P(i)坐標的方法,可采用與繪制誤差橢圓相同的方法,如圖7-6所示。
首先,求出在測量坐標系中坐標方位角為T的橢圓長半軸與橢圓圓周的交點G的坐標。
然后,再求出誤差曲線上一系列點P(i)到誤差曲線中心的距離。不論誤差曲線是正立豎放,還是傾斜任意角度的,這個距離值是確定不變的,因此,可按正立豎放的誤差曲線求算該距離值,如圖7-7所示,對于誤差曲線上的任意一點P(i),有??t。
D(i)?m??a2?Cos2??b2?Sin2?
實際編程中,可取??i?DT。
圖7-7 豎立正放的誤差曲線 按坐標正算可得誤差曲線上任意點P(i)的坐標:
??XP(i)?XO?D(i)?Cos(T?i?DT)
?YP(i)?YO?D(i)?Sin(T?i?DT)164 最后,在圖7-6中從G點開始用畫直線方法LINE依次連接相鄰點,即可繪出誤差曲線。
三、誤差曲線編程示例(含屏幕顯示及打印機打印誤差曲線兩部分)(見圖7-8)
Private Sub GPHPIC23_Click()Rem ***** 繪制誤差曲線一級菜單子過程 ***** End Sub
Private Sub GPHPIC24_Click()Rem ***** 顯示誤差曲線菜單子過程 ***** Dim X As Double Dim Y As Double Dim A As Double Dim B As Double Dim T As String Cls Form2.DrawStyle = 0: ' ***** 設定繪制單實線
Form2.DrawWidth = 1: ' ***** 設定繪制單實線的線寬
Form2.Line(1, 7)-(199, 143), RGB(255, 0, 0), B: '繪制一個紅色矩形作為繪圖區域。X = 80: '***** 曲線中心測量縱坐標 ***** Y = 100: '***** 曲線中心測量橫坐標 ***** A = 25.4: '***** 對應誤差曲線的誤差橢圓的長半軸 ***** B = 9.5: '***** 對應誤差曲線的誤差橢圓的短半軸 ***** T = “138 54 12”: '***** 對應誤差曲線的誤差橢圓的長半軸坐標方位角 **** Call GPHP16(X, Y, A, B, T, 1)End Sub
Private Sub GPHPIC25_Click()Rem ***** 打印機打印誤差曲線菜單子過程 Dim X As Double Dim Y As Double Dim A As Double Dim B As Double Dim T As String Cls Form2.DrawStyle = 0: ' ***** 設定繪制單實線
Form2.DrawWidth = 1: ' ***** 設定繪制單實線的線寬
Form2.Line(1, 7)-(199, 143), RGB(255, 0, 0), B: '繪制一個紅色矩形作為繪圖區域。
X = 80: '***** 曲線中心測量縱坐標 ***** Y = 100: '***** 曲線中心測量橫坐標 ***** A = 25.4: '***** 對應誤差曲線的誤差橢圓的長半軸 ***** B = 9.5: '***** 對應誤差曲線的誤差橢圓的短半軸 ***** T = “138 54 12”: '***** 對應誤差曲線的誤差橢圓的長半軸坐標方位角 **** Call GPHP16(X, Y, A, B, T, 2)165 End Sub
Private Sub GPHP16(ByVal XC As Double, ByVal YC As Double, ByVal A As Double, ByVal B As Double, ByVal T As String, ByVal PP As Integer)Rem ***** 屏幕顯示及打印機打印誤差曲線子過程 ***** Rem ***** 當PP=1時,屏幕顯示誤差曲線 ***** Rem ***** 當PP=2時,打印機打印誤差曲線 ***** Dim N As Integer Dim I As Integer Dim DT As Double Dim TT As Double: '***** 對應誤差曲線的誤差橢圓的長半軸坐標方位角 ****
N = 400 TT = RAD(T): '***** 程序中T應為度、分、秒(字符串)DT = 2 * PI()/ N
Rem ***** 用點斜式直線方程與豎放橢圓(或豎放誤差曲線)的標準方程聯立方程組 Rem ***** 解算橢圓中心O(0,0)至橢圓圓周(或豎放誤差曲線)交點距離的方法 Rem ***** 誤差曲線的方程為:m^2=a^2*(Cos(t))^2+b^2*(Sin(t))^2 Dim AT As Double Dim BT As Double Dim XI As Double Dim YI As Double Dim M As Double Dim DI As Double Dim XPI As Double Dim YPI As Double
AT = A ^ 2 BT = B ^ 2
If PP = 1 Then Form2.PSet(YC + A * Sin(TT), XC + A * Cos(TT)), RGB(0, 0, 0)ElseIf PP = 2 Then Dim XXX As Printer For Each XXX In Printers If XXX.Orientation = vbPRORPortrait Then Set Printer = XXX: '* 設置為系統默認打印機,參見《VB6.0中文版參考詳解》P502 Exit For End If Next
Printer.ScaleMode = 0: '***** 通常先設為零
Printer.ScaleMode = 6: '***** 設置打印機坐標系的單位是毫米
166
Dim ASPP As Single
ASPP = Printer.ScaleHeight / Printer.ScaleWidth: '*** 設置打印機新的繪圖區坐標系縱橫比
Rem ***** 當設置打印機坐標系的單位是毫米時,ASPP值約為0.72 Printer.ScaleWidth = 200: '*** 設置打印機新的繪圖區坐標系寬為200 Printer.ScaleHeight =-Int(Printer.ScaleWidth * ASPP): '*** 設置打印機新的繪圖區坐標系高
Printer.ScaleLeft =-0: '*** 設置打印機新的繪圖區坐標系坐標原點橫坐標值
Printer.ScaleTop =-Printer.ScaleHeight: '-ScaleHeight: '*** 設置打印機新的繪圖區坐標系坐標原點縱坐標值
Rem ***** 通過以上的設定,將打印機繪圖區坐標系設為與數學坐標系相同 Printer.DrawStyle = 0: ' ***** 設定打印機打印單實線
Printer.DrawWidth = 1: ' ***** 設定打印機打印單實線的線寬
Printer.PSet(YC + A * Sin(TT), XC + A * Cos(TT)): '*** 打印機打印 End If
For I = 1 To N M = Tan(I * DT): '***** 直線的斜率 M = M ^ 2 XI = AT * BT /(BT + AT * M): '***** 正立豎放橢圓圓周i點縱坐標的平方,X(i)^2 YI = XI * M: '***** 正立豎放橢圓圓周i點橫坐標的平方,Y(i)^2 DI = Sqr(XI + YI): '***** 橢圓中心至橢圓圓周i點的距離D(i)XPI = XC + DI * Cos(TT + I * DT): '***** 斜立橢圓圓周i點的縱坐標XP(i)YPI = YC + DI * Sin(TT + I * DT): '***** 斜立橢圓圓周i點的橫坐標YP(i)If PP = 1 Then Form2.Line-(YPI, XPI), RGB(0, 0, 0): '***** 繪制斜立誤差橢圓 ElseIf PP = 2 Then Printer.Line-(YPI, XPI): '***** 打印機打印斜立誤差橢圓 End If Next I
If PP = 1 Then Form2.PSet(YC + A * Sin(TT), XC + A * Cos(TT)), RGB(0, 0, 255)ElseIf PP = 2 Then Printer.PSet(YC + A * Sin(TT), XC + A * Cos(TT)): '*** 打印機打印 End If
For I = 1 To N DI = Sqr(AT *(Cos(I * DT))^ 2 + BT *(Sin(I * DT))^ 2): '***** 誤差曲線中心至曲線上i點的距離D(i)XPI = XC + DI * Cos(TT + I * DT): '***** 斜立誤差曲線上i點的縱坐標XP(i)167 YPI = YC + DI * Sin(TT + I * DT): '***** 斜立誤差曲線上i點的橫坐標YP(i)If PP = 1 Then Form2.Line-(YPI, XPI), RGB(0, 0, 255): '***** 繪制斜立誤差曲線 ElseIf PP = 2 Then Printer.Line-(YPI, XPI): '***** 打印機打印斜立誤差曲線 End If Next I
Rem ***** 繪制橢圓的長、短軸,用坐標正算的方法 ***** Dim X1 As Double Dim Y1 As Double Dim X2 As Double Dim Y2 As Double
X1 = XC + A * Cos(TT)Y1 = YC + A * Sin(TT)X2 = XC + A * Cos(TT + PI())Y2 = YC + A * Sin(TT + PI())If PP = 1 Then Line(Y1, X1)-(Y2, X2), RGB(255, 0, 0)ElseIf PP = 2 Then Printer.Line(Y1, X1)-(Y2, X2): '*** 打印機打印 End If
X1 = XC + B * Cos(TT + PI()/ 2)Y1 = YC + B * Sin(TT + PI()/ 2)X2 = XC + B * Cos(TT + 3 * PI()/ 2)Y2 = YC + B * Sin(TT + 3 * PI()/ 2)If PP = 1 Then Line(Y1, X1)-(Y2, X2), RGB(255, 0, 0)ElseIf PP = 2 Then Printer.Line(Y1, X1)-(Y2, X2): '*** 打印機打印
Printer.EndDoc: '***** 該方法(EndDoc)意思為“開始打印” End If Rem ***** 以下繪制測量坐標系及方框 ***** Rem ***** 略 ***** End Sub
圖7-8 誤差橢圓與誤差曲線
168
第四篇:VB程序設計的常用算法教案
VB程序設計的常用算法教案
算法(Algrith):計算機解題的基本思想方法和步驟。算法的描述:是對要解決一個問題或要完成一項任務所采 取的方法和步驟的描述,包括需要什么數據(輸入什么數據、輸出什么結果)、采用什么結構、使用什么語句以及如何 安排這些語句等。通常使用自然語言、結構化流程圖、偽代碼等來描述算法。
一、計數、求和、求階乘等簡單算法
此類問題都要使用循環,要注意根據問題確定循環變量的初值、終值或結束條,更要注意用來表示計數、和、階 乘的變量的初值。
例:用隨機函數產生100個[0,99]范圍內的隨機整數,統計個位上的數字分別為1,2,3,4,6,7,8,9,0的 數的個數并打印出來。
本題使用數組來處理,用數組a存放產生的確100個隨機整數,數組x來存放個位上的數字分
別為1,2,3,4,6,7,8,9,0的數的個數。即個位是1的個數存放在x中,個位是2的個數存放在x中,…… 個位是0的個數存放在x。
將程序編寫在一個GetTput過程中,代碼如下: PubliSubGetTput
DiaAsInteger
DixAsInteger
DiiAsInteger,pAsInteger
'產生100個[0,99]范圍內的隨機整數,每行印出來
Fri=1T100
a=Int
Ifa<10Then
Fr1PrintSpae;a;
10個打
Else
Fr1PrintSpae;a;
EndIf
Ifid10=0ThenFr1Print
Nexti
'統計個位上的數字分別為1,2,3,4,6,7,8,9,0的數的個數,并將統計結果保存在數組x,x,x中,將統計結果打印出來
Fri=1T100
p=a
d
0
'求個位上的數字
Ifp=0Thenp=10
x=x+1
Nexti
Fr1Print&qut;統計結果&qut;
Fri=1T10
p=i
Ifi=10Thenp=0 Fr1Print&qut;個位數為&qut;+Str+&qut;&qut;+Str)+&qut;個&qut;
Nexti EndSub
二、求兩個整數的最大公約數、最小公倍數 分析:求最大公約數的算法思想:
對于已知兩數,n,使得>n;
共
除以n得余數r;
若r=0,則n為求得的最大公約數,算法結束;否則執行;
←n,n←r,再重復執行。
例如:求=14,n=6的最大公約數
n
r
0 =inputBx n=inputBx n=n* If r=dn Dhile =n n=r r=dn Lp Print&qut;最大公約數=&qut;,n [1] [2] [3] [4] [] [6] [7] 下一頁 < VB程序設計課程設計 1、目的 VB程序設計課程設計是考察學生對VB程序設計課程相關知識點掌握情況的重要環節,也是激勵學生進一步學習VB、提高運用VB開發實際計算機程序的能力。課程設計的重點在于學生利用VB開發程序的能力。 2、課程設計題目 學生信息管理系統 3、程序功能 該程序具有建立數據庫,建立數據庫表,添加數據,刪除數據,查詢學生每學期成績、不及格情況、積點情況等相關信息的功能。 4、實現要求 每個學生建立一個數據庫(名字自擬),數據庫中建立學生基本信息表(學號、姓名、性別、出生年、出生月、出生日、聯系電話、年級、班級、住址等)、學生成績表(學號、課程號、成績、學期等)、課程信息表(課程號、課程名稱、出版社、出版日期、版次、頁碼、價格、課程類型(基礎課、專業基礎課、選修課等)、開課學院等)。 把課程信息、每一學期的成績等分別輸入相應的表中,其中學生基本信息表記錄不少于5個學生的信息。 在以上數據的基礎上,實現相關的程序功能(不僅僅第3條指定的功能)。 設計多界面程序,相關查詢結果應由不同的界面顯示,每個同學顯示結果的形式應盡量不同。 5、考核 根據學生實現程序功能多少(40分)、界面設計情況(20分)、課程設計報告撰寫情況(20)、答辯情況(20分)進行考核。雷同者應重做。 6、課程設計報告內容 1)課程設計題目 2)課程設計的目的3)程序功能介紹 4)程序界面設計與控件屬性設置 5)程序代碼編寫 6)程序演示(將運行過程用截圖方式截下來,并對輸入數據、輸出的結果進行適當說明) 7)課程學習與課程設計心得體會 7、上交材料 本次課程設計以小班為單位上交如下資料: 1)光盤:每一小班建立一個目錄(專業年級班級),在此目錄下建立每個同學的目錄(學號姓名),在每個同學的目錄下保存該同學的電子版的課程設計報告、打包的程序。 2)紙制版的課程設計報告第五篇:VB程序設計課程設計