平差程序設(shè)計(jì)_第1頁
平差程序設(shè)計(jì)_第2頁
平差程序設(shè)計(jì)_第3頁
平差程序設(shè)計(jì)_第4頁
平差程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、中國地質(zhì)大學(xué)(武漢)信息工程學(xué)院-數(shù)據(jù)結(jié)構(gòu)課程實(shí)習(xí)報(bào)告2015年秋+實(shí)習(xí)題目【題目一】角度、弧度、方位角【問題描述】(1)從鍵盤輸入一個(gè)角度,判斷其合法性;(2)從鍵盤輸入一個(gè)角度值將其轉(zhuǎn)化為對(duì)應(yīng)的弧度值輸出;(3)從鍵盤輸入一個(gè)弧度值將其轉(zhuǎn)化為對(duì)應(yīng)的角度值輸出;(4)從鍵盤輸入兩個(gè)點(diǎn)的坐標(biāo)的值(x1,y1)(x2,y2),求方位角并輸出。【算法分析與設(shè)計(jì)】1、 問題分析與設(shè)計(jì)思想 題目一包含了四個(gè)部分,因此可以定義四個(gè)函數(shù)實(shí)現(xiàn)上述功能。 函數(shù)(一)主要應(yīng)用if-else的分支結(jié)構(gòu)來實(shí)現(xiàn),首先是取出輸入值的度位判斷其是否位于0,360),接下來取其分位判斷是否位于0,60),最后判斷秒位是否位

2、于0,60),這樣就可以實(shí)現(xiàn)輸入角度合法性判斷的功能了。函數(shù)(二)的設(shè)計(jì)就比較簡(jiǎn)單了,主要是要先取出輸入的角度的度、分、秒對(duì)應(yīng)的值a1,a2,a3,然后利用利用數(shù)學(xué)公式a1*PI/180+a2*PI/(180*60)+a3*PI/(180*60*60)式中(PI=3.1415926);輸出求得的結(jié)果即可。函數(shù)(三)設(shè)計(jì)思路和函數(shù)二的整體思路基本一致,只不過首先要先利用數(shù)學(xué)公式a*180/PI求出輸入弧度對(duì)應(yīng)的以度為單位的值,然后就是取出改值的度、分、秒對(duì)應(yīng)的值a1,a2,a3,最后用公式a1+a2/100+a3/10000;求得我們平差中常用的角度值。函數(shù)(四)整體設(shè)計(jì)思路是運(yùn)用反三角函數(shù)at

3、an,但是要考慮一些細(xì)節(jié)問題,因?yàn)榍蟮玫?y2-y1)/(x2-x1)值可能為負(fù)數(shù)為了后面的計(jì)算方便要先調(diào)用一個(gè)求絕對(duì)值的函數(shù)fabs(),然后調(diào)用atan()函數(shù)求得的結(jié)果是弧度值,因此要調(diào)用之前的弧度轉(zhuǎn)環(huán)為度的函數(shù),接下來運(yùn)用if-else if-else的分支語句分不同的象限求值,最后輸出求得的結(jié)果。2、 出現(xiàn)的問題及解決辦法 第一次設(shè)計(jì)函數(shù)四的功能時(shí),在調(diào)用函數(shù)atan()是由于疏忽是用下面這種方式調(diào)用的atan(y2-y1)/(x2-x1),細(xì)心觀測(cè)會(huì)發(fā)現(xiàn)少了一個(gè)括號(hào),因此導(dǎo)致輸出的結(jié)果不正確,然后就加斷點(diǎn)分步運(yùn)行調(diào)試最終找出問題所在。3效率分析與改進(jìn)設(shè)想 因?yàn)樗膫€(gè)函數(shù)的代碼較短,函

4、數(shù)功能比較簡(jiǎn)單因此效率很高,暫時(shí)還沒想出改進(jìn)設(shè)想,期待日后更加深入的學(xué)習(xí)。【源代碼】見附件。/ HzJ.cpp : 定義控制臺(tái)應(yīng)用程序的入口點(diǎn)。/#include "stdafx.h"#include<iostream>#include<cmath>using namespace std;const double PI=3.1415926;void PD_angle(double a) /傳入一個(gè)角度double c;int b,d;b=(int)a; if(b<0|b>360) /判斷度位是否合法 cout<<"輸

5、入角度不合法<<endl; else c=(a-b)*100; d=(int)c; if(d>=60) /判斷分位是否合法 cout<<"輸入角度不合法<<endl; else c=(c-d)*100; if(c>=60) /判斷秒位是否合法 cout<<"輸入角度不合法<<endl; else cout<<"輸入角度合法<<endl; double JzH(int a)double b,d;int c1,c2,c3;c1=(int)a; /取出來度位b=(a-c1)*

6、100; c2=(int)b; /取出來分位c3=(int)(b-c2)*100; /取出來秒位d=c1*PI/180+c2*PI/(180*60)+c3*PI/(180*60*60); /計(jì)算弧度cout<<"輸入的角度轉(zhuǎn)為弧度是"<<d<<endl;return d;double HzJ(double a)double c1,c2,c3,d;int b1,b2,b3;c1=a*180/PI; /將弧度轉(zhuǎn)化為以度為單位b1=(int)c1; /取出度位c2=(c1-b1)*60; b2=(int)c2; /取出分位c3=(c2-b2)*

7、60;b3=(int)c3; /取出秒位d=b1+b2/100+b3/10000;cout<<"輸入的弧度轉(zhuǎn)為角度為a:"<<d<<endl;return d;double FwJ(double x1,double y1,double x2,double y2)double a,b,d,x,y;if(x1=x2 &&y1*y2>0)d=90;cout<<"兩點(diǎn)間的方位角為a:"<<d<<endl;else if(x1=x2 && y1*y2<

8、;0)d=270;cout<<"兩點(diǎn)間的方位角為a:"<<d<<endl;elsex=x2-x1; y=y2-y1; a=atan(y/x);a=(a>0)? a:-a;d=HzJ(a);/x=x2-x1;/y=y2-y1;if(x>0&&y>0)d=d;else if(x<0&&y>0)d=180-d;else if(x<0&&y<0)d=180+d;elsed=360-d;cout<<"兩點(diǎn)間的方位角為a:"<

9、;<d<<endl;return d;int _tmain(int argc, _TCHAR* argv)double a,b,c,x1,y1,x2,y2;cout<<"輸入一個(gè)角度判斷是否合法<<endl;cin>>a;PD_angle(a);cout<<"輸入一個(gè)角度轉(zhuǎn)換為弧度"<<endl;cin>>b;JzH(b);cout<<"輸入一個(gè)弧度轉(zhuǎn)換為角度"<<endl;cin>>c;HzJ(c);cout<&

10、lt;"輸入兩個(gè)點(diǎn)的坐標(biāo)(x1,y1)(x2,y2)"<<endl;cin>>x1>>y1>>x2>>y2;FwJ(x1,y1,x2,y2);return 0;【運(yùn)行結(jié)果】【題目二】確定一棵二叉樹【問題描述】編寫一個(gè)矩陣類,實(shí)現(xiàn)矩陣的轉(zhuǎn)置、求逆運(yùn)算,以及兩個(gè)矩陣的加、減、乘等相關(guān)運(yùn)算?!舅惴ǚ治雠c設(shè)計(jì)】.問題分析與設(shè)計(jì)思想 首先定義一個(gè)矩陣類,類中包含類的私有數(shù)據(jù)成員,矩陣的行row和列col,公有數(shù)據(jù)成員包括類的構(gòu)造函數(shù),讀入文件函數(shù),讀出文件函數(shù),矩陣相加、相減、相乘的重載函數(shù),矩陣的轉(zhuǎn)置函數(shù),矩陣的求逆函數(shù)。

11、在寫文件的讀入讀出函數(shù)時(shí)把第一行的數(shù)據(jù)定義為讀入或讀出矩陣的行和列,這樣便于記錄矩陣的行和列,就不用從鍵盤輸入行和列,用兩個(gè)嵌套的for循環(huán)函數(shù)去控制矩陣按行和列的方式讀入或讀出,矩陣的加減函數(shù)相對(duì)來說比較簡(jiǎn)單,先在加減的重載函數(shù)中讀入兩個(gè)文件中存儲(chǔ)的矩陣,接著要進(jìn)行判斷兩個(gè)矩陣能否進(jìn)行加減操作,也就是要判斷兩個(gè)矩陣的行和列是不是都相等,如果條件成立就進(jìn)行下一步的運(yùn)算,同樣是用兩個(gè)嵌套的for循環(huán)進(jìn)行加減運(yùn)算。矩陣的轉(zhuǎn)置運(yùn)算同樣是利用兩個(gè)嵌套的for循環(huán),然后將矩陣的行和列進(jìn)行轉(zhuǎn)換。兩個(gè)矩陣相乘較矩陣的加減復(fù)雜一點(diǎn),首先是判斷兩個(gè)矩陣能否相乘,就是判斷第一個(gè)矩陣的列和第二個(gè)矩陣的行是否相等,如

12、果相等就進(jìn)行接下來的計(jì)算,否則輸出兩個(gè)矩陣不能相乘,矩陣相乘是要進(jìn)行累加操作的,因此矩陣相乘要用三個(gè)for循環(huán)嵌套。矩陣的求逆是這次程序最重要的一個(gè)函數(shù),為了更符合一般矩陣的求逆,我采用了高斯-約旦法,因?yàn)橹霸诰€性代數(shù)上學(xué)過這種方法,所以采用了這種方法,主要思想有將文件讀入的矩陣變?yōu)樵鰪V矩陣,然后將讀入的矩陣變?yōu)閱挝痪仃?,最后將增廣矩陣的部分讀入到文件中即可。2程序源代碼/ juzhen.cpp : 定義控制臺(tái)應(yīng)用程序的入口點(diǎn)。/#include "stdafx.h"#include<iostream>#include<fstream>using

13、namespace std;double a100100=0;double b100100=0;double B100100=0;int To1(int i,int N,double B100100)/在進(jìn)行矩陣變成上三角是將第i行第i列的數(shù)變成1/并且返回是否變換成功/0-失敗,也就是說改矩陣的秩不是N,并不能求出逆矩陣/1-成功,返回后進(jìn)行下一步程序int j;int ii=i;double ij;if(Biiii!=0) ij=Biiii;else for(j=i+1;j<=N;+j)if(Bji!=0)break;if(j>N)return 0; /失敗for(;i<

14、=2*N;+i) /將第j行的加到第ii行Biii+=Bji;ij=Biiii;for(i=ii;i<=2*N;+i)/將第ii行第ii列的變?yōu)?Biii/=ij;return 1; /成功返回void To0(int i,int j,int N,double B100100)/利用第i行第i列的數(shù)將第j行到第i行的第i列變?yōu)? if(i=j)return;int ii=i,jj=j;double ij;int n=(i<j)?-1:1;/在下面是 j+=n/n用來檢驗(yàn)是求上三角,還是下三角/-1-i<j 也就是 將下三角表為0/1-i>j 也就是 將上三角變?yōu)?for

15、(;j!=i;j+=n)for(ii=i,ij=Bji;ii<=2*N;+ii)Bjii-=ij*Biii;class juzhenpublic:juzhen(int r=1,int l=1)row=r;col=l;void get1(juzhen &r1); void get2(juzhen &r2); void Transp();void QN(juzhen &r1); friend juzhen operator+(juzhen &rth1,juzhen & rth2); friend juzhen operator-(juzhen &

16、;rth1,juzhen & rth2); friend juzhen operator*(juzhen &rth1,juzhen & rth2); private:int row;int col; void juzhen:get1(juzhen &r1)int m ,n;ifstream inf1;inf1.open("F:f1.txt");inf1>>m>>n;for(int i=1;i<=m;i+) for(int j=0;j<n;j+) inf1>>aij;r1.row=m;r1.col

17、=n;inf1.close();/return a; void juzhen:get2(juzhen &r2)int d,h; ifstream inf2;inf2.open("F:f2.txt");inf2>>d>>h; for(int i=1;i<=d;i+) for(int j=0;j<h;j+) inf2>>bij;r2.row=d;r2.col=h;inf2.close();juzhen operator+(juzhen &rth1,juzhen & rth2)juzhen r;if(rth1

18、.row!=rth2.row|rth1.col!=rth2.col)cout<<"兩個(gè)矩陣不能相加"<<endl;elsedouble c100100=0; rth1.get1(rth1); rth2.get2(rth2); ofstream onf2;onf2.open("F:f4.txt");onf2<<"兩個(gè)矩陣相加:"<<endl;onf2<<rth1.row<<" "<<rth1.col<<endl; for(

19、int i=1;i<=rth1.row;i+) for(int j=0;j<rth1.col;j+) cij=aij+bij; onf2<<cij<<" " onf2<<endl; return r; juzhen operator-(juzhen &rth1,juzhen & rth2)juzhen r;if(rth1.row!=rth2.row|rth1.col!=rth2.col)cout<<"兩個(gè)矩陣不能相減"<<endl;elsedouble c100100

20、=0; rth1.get1(rth1); rth2.get2(rth2); ofstream onf2;onf2.open("F:f5.txt");onf2<<"兩個(gè)矩陣相減:"<<endl;onf2<<rth1.row<<" "<<rth1.col<<endl; for(int i=1;i<=rth1.row;i+) for(int j=0;j<rth1.col;j+) cij=aij-bij; onf2<<cij<<&quo

21、t; " onf2<<endl; return r; juzhen operator*(juzhen &rth1,juzhen & rth2)juzhen r;if(rth1.col!=rth2.row)cout<<"兩個(gè)矩陣不能相乘"<<endl;elsedouble c100100=0; rth1.get1(rth1); rth2.get2(rth2); ofstream onf2;onf2.open("F:f6.txt");for(int i=1;i<=rth1.row;i+)fo

22、r(int j=0;j<rth2.col;j+)for(int m=0;m<rth2.col;m+)cij+=aim*bm+1j;onf2<<"兩個(gè)矩陣相乘:"<<endl;onf2<<rth1.row<<" "<<rth2.col<<endl;for(int i=1;i<=rth1.row;i+) onf2<<endl;for(int j=0;j<rth2.col;j+)onf2<<cij<<" "re

23、turn r;void juzhen:Transp()juzhen r ;r.get1(r); ofstream onf2;onf2.open("F:f7.txt");onf2<<"矩陣的轉(zhuǎn)置為:"<<endl;onf2<<r.col<<" "<<r.row<<endl; for(int i=0;i<r.col;i+) for(int j=0;j<r.row;j+) bij=aj+1i; onf2<<bij<<" &q

24、uot; onf2<<endl; void juzhen:QN(juzhen &r1)r1.get2(r1);for(int i=1;i<=r1.col;+i)for(int j=1+col;j<=2*r1.col;+j)bij=(j-i=r1.col)?1:0;int i;int flag=1;for(i=1;i<r1.col;+i)if(To1(i,r1.col,b)To0(i,r1.col,r1.col,b);elsecout<<"該矩陣的秩小于 N ,沒有逆矩陣"<<endl; flag=0;break;for(i=r1.row;i>=1&&flag=1;-i)if(To1(i,r1.col,b)To0(i,0,r1.col,b);else cout<<"該矩陣的秩小于 N ,沒有逆矩陣"<<endl; f

溫馨提示

  • 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)論