氣象信息與網(wǎng)絡(luò)技術(shù)課程設(shè)計地面探空電碼譯碼系統(tǒng)_第1頁
氣象信息與網(wǎng)絡(luò)技術(shù)課程設(shè)計地面探空電碼譯碼系統(tǒng)_第2頁
氣象信息與網(wǎng)絡(luò)技術(shù)課程設(shè)計地面探空電碼譯碼系統(tǒng)_第3頁
氣象信息與網(wǎng)絡(luò)技術(shù)課程設(shè)計地面探空電碼譯碼系統(tǒng)_第4頁
氣象信息與網(wǎng)絡(luò)技術(shù)課程設(shè)計地面探空電碼譯碼系統(tǒng)_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、氣象信息與網(wǎng)絡(luò)技術(shù)課程設(shè)計 題 目 地面/探空電碼譯碼系統(tǒng) 學生姓名 學 號 學 院 專 業(yè) 設(shè)計時間 16周 二一五年六月三十日地面/探空電碼譯碼系統(tǒng)文摘要:氣象資料是對氣象進行預(yù)測和氣象研究的重要依據(jù),而各國各地的氣象資料都是以編碼的形式進行互相傳遞的,氣象要素的信息以代碼的形式儲存在文件中。而我們的地面/探空電碼譯碼系統(tǒng)是基于c語言的譯碼系統(tǒng),根據(jù)氣象信息編碼的特點翻譯出編碼表示的氣象要素。用戶提供的年月日及地區(qū)等指示可找到對應(yīng)的氣象要素信息,如溫度,露點,風速,風向等。這樣用戶可以方便地知道地面報文和探空報文所指示的氣象。從而可以方便各種研究和應(yīng)用。關(guān)鍵詞:地面報文;探空報文;譯碼系統(tǒng)

2、;氣象要素;一、 前言氣象地面報文電碼具有地面各種氣象要素和天氣現(xiàn)象,如氣溫、濕度、風向、風速、海平面氣壓和雨、雪、霧,還具有記錄云高、云狀、天氣演變?nèi)缛r變壓、氣壓傾向等。近年來,隨著計算機技術(shù)的快速發(fā)展以及衛(wèi)星通信技術(shù)的研究深度的加深,地面氣象報文系統(tǒng)的發(fā)展日益完善,報文電碼的發(fā)展與計算機技術(shù)相關(guān)度越來越大,二者相結(jié)合為人類的日常生活產(chǎn)生了日益深遠的影響。 我國是自然災(zāi)害頻發(fā)的國家,而氣象災(zāi)害又是在自然災(zāi)害中損毀程度最嚴重的。 如我國最近幾年發(fā)生幾次大的寒潮,以及每年夏天發(fā)生的臺風等同時每次自然災(zāi)害給人民的生產(chǎn)生活都帶來了極大的不便甚至對一個地區(qū)的生產(chǎn)秩序起到破壞性的作用,因此國際國內(nèi)對

3、天氣系統(tǒng)的變化情況越來越關(guān)注,而在氣象領(lǐng)域?qū)πl(wèi)星觀測資料的依賴度越來越大,天氣資料在天氣預(yù)報系統(tǒng)中占據(jù)越來越重要的作用,氣象報文信息發(fā)揮了比以往更關(guān)鍵的角色,氣象臺根據(jù)氣象信息預(yù)報寒潮、臺風、暴雨等自然災(zāi)害出現(xiàn)的位置和強度,就可以直接為工農(nóng)業(yè)生產(chǎn)和群眾生活服務(wù),通過應(yīng)急準備及人員疏散等可以講自然災(zāi)害帶來的損害講到最低。氣象信息就成為現(xiàn)代社會不可缺少的重要信息。同時,氣象信息的作用與氣象代碼翻譯工作是分不開的,通過現(xiàn)代化的手段以及先進的通訊工具,氣象電碼的翻譯工作效率大大提高,氣象信息一經(jīng)翻譯,依賴于先進的通訊工具就能夠及時地發(fā)布出去,具有很強的實時性,因而此代碼翻譯系統(tǒng)是具有重要意義的。在我們

4、可接觸到的各種電碼翻譯系統(tǒng)中,翻譯系統(tǒng)的實現(xiàn)采用了多種語言,本文提供一種基于c語言的電碼翻譯系統(tǒng),根據(jù)地面報文電碼的特點通過相關(guān)的語句翻譯出所表示的氣象信息。世界氣象組織所屬的天氣監(jiān)測網(wǎng)由一百多個成員國組成,其觀測系統(tǒng)中包括十多顆衛(wèi)星、三千多架飛機、一萬多個陸上觀測站、七千多個船舶觀測站以及九百多個攜帶自動氣象站的系統(tǒng)航標和浮標。世界天氣觀測網(wǎng)絡(luò)就是通過這個觀測系統(tǒng)提供最新的全球天氣預(yù)報的。每天,高速電信鏈路通過三個世界級氣象中心、34個區(qū)域性氣象中心和187個國家級氣象中心向全球傳輸氣象資料和氣象圖。氣象資料是氣象科學對天氣過程進行的預(yù)測及對大氣活動規(guī)律進行研究的主要依據(jù),氣象資料交換是氣象

5、業(yè)務(wù)的科研的基礎(chǔ)。但是,由于各國文字的不一致性,和文字占據(jù)大容量存儲空間的問題,決定將其以規(guī)定的編碼形式在國際國內(nèi)間進行交換。氣象地面電碼和探空電碼就是其中的一種可供交換編碼。各個行業(yè)都有各自的國際電碼。地面氣象觀測的天氣電碼,不但反映天氣實況,而且也反映了天氣的演變規(guī)律。因此,必須從天氣學的角度去理解和選用天氣報告電碼。這是全面、準確反映測站天氣實況和保證天氣預(yù)報工作、減少人為失誤的重要環(huán)節(jié)。電碼需要按照一定的規(guī)則編寫,這樣,譯碼者才能按照那個規(guī)則譯出電碼所代表的通俗易懂的信息。隨著社會、經(jīng)濟的飛速發(fā)展和人民生活水平生活質(zhì)量的大幅度提高,社會上各行各業(yè)對氣象部門提出了全方位、多時效、針對性強

6、、準確度高的天氣預(yù)報服務(wù)要求。社會需求永遠是天氣預(yù)報發(fā)展的動力和壓力。為了適應(yīng)日益增長的社會需要,做好預(yù)報服務(wù),預(yù)報員需要用到近年來許多新的知識和參考資料,尤其是各個地區(qū)的地面和探空氣象資料分析,能夠有效幫助預(yù)報員分析當?shù)氐奶鞖猬F(xiàn)象,從而做出比較準確的天氣預(yù)報。二、 需求分析1、提供給天氣預(yù)報員實時天氣資料,以便實時進行天氣分析及準確預(yù)報。實時天氣資料是天氣分析和預(yù)報的基礎(chǔ),因為天氣總在不斷的變化,依據(jù)最接近所要預(yù)報的時間的實時天氣資料所得出天氣預(yù)報的準確程度最高,短期的天氣預(yù)報總比長期和中長期的天氣預(yù)報準確。所以想要得到較為準確的天氣預(yù)報,必不可少的是方便及時地獲得實時資料信息,這就需要電碼

7、譯碼系統(tǒng)來幫助實現(xiàn)。編寫成電碼的方式,能有效地節(jié)約信息傳送的時間和空間,增加了天氣預(yù)報的時效。 2、提供給科研人員過去和現(xiàn)在的天氣各要素資料,從氣溫、氣壓、風、云、降水、能見度和空氣濕度等,得出天氣的性質(zhì),并且廣泛地采用繪圖,建表等分析方法,加上具體情況的具體分析,聯(lián)系各個地方、各個時段的天氣情況,找出天氣變化規(guī)律,系統(tǒng)地進行研究,以便分析總結(jié),研究天氣的發(fā)展、演變,為揭示天氣變化、研究大自然的奧妙,進而應(yīng)用天氣現(xiàn)象做出貢獻。該系統(tǒng)對于這些大型的研究來說只是渺小的一小步,但確是不可或缺的一部分。 3、為二次天氣應(yīng)用開發(fā)提供天氣資料,從而生產(chǎn)各種應(yīng)用產(chǎn)品。天氣應(yīng)用十分廣泛,天氣信息可以直接應(yīng)用播

8、報天氣情況,還可以應(yīng)用在二次天氣軟件上,如可以設(shè)計出查詢實時天氣情況的軟件,輸入年月日時段和地點,即可顯示出具體氣象要素的信息,把軟件安裝在手機上,隨身攜帶,方便快捷,符合大眾的應(yīng)用要求。4、提供給開發(fā)人員一個譯碼工具,方便開發(fā)人員優(yōu)化開發(fā),充分利用譯碼的語句和設(shè)計流程,不需要開發(fā)人員重新設(shè)計,可以直接使用,如此簡化了氣象臺的工作量,增加了其工作效率。此外,還給教師的教學提供了很大的方便,教師直接輸入需要知道的時間站點信息即可得到對應(yīng)的氣象要素值,學生可以很好地了解具體的氣象要素信息,能更好地學習氣象知識。5、提供給普通用戶查詢天氣實時或過去天氣資料,用戶自己總結(jié)天氣狀況,決定自己在穿衣御寒防

9、熱還有度假出行等方面的生活。6、提供給農(nóng)民獲取實時天氣和過去天氣資料,對比現(xiàn)在天氣情況,從而比較好地進行播種、收割等農(nóng)家活動。有了科學技術(shù)的支持,農(nóng)業(yè)生產(chǎn)能取得迅速地發(fā)展,收獲更多地糧食,養(yǎng)活更多的人口。7、提供給工廠天氣情況,有些產(chǎn)品的生產(chǎn)與天氣的要素如溫度、濕度等有著很大的關(guān)系,清楚地了解了具體的天氣情況就能及時調(diào)整這些因素,這對產(chǎn)品的生產(chǎn)有很大的益處,工廠生產(chǎn)效率也能極大的提高。三、 概要設(shè)計1、 設(shè)計思路讀取氣象電報電碼文件,經(jīng)過本電碼譯碼系統(tǒng),生產(chǎn)各氣象要素。地面電碼資料的氣象要素有:溫度、露點、本站氣壓、海平面氣壓、氣壓趨勢、氣壓變化量、降水量、天氣現(xiàn)象、云狀、能見度,風向飛速、總

10、云量等;高空電碼資料的氣象要素分13層:地面、1000hpa、925hpa、850hpa、700hpa、500hpa、400hpa、300hpa、250hpa、200hpa、150hpa、100hpa;高空電碼資料的每層氣象要素是:溫度、溫度露點差、氣壓、風向飛速。編程思路是:由用戶輸入要譯碼的年、月、日、世界時次和臺站號(注:有可能的話用地名),并選擇地面或高空;由譯碼系統(tǒng)進行譯碼,生產(chǎn)出氣象各要素,在屏幕上顯示。2、 地面/探空電報譯碼數(shù)據(jù)流圖地面/探空電報碼以文件形式存放,固定為8.3格式。地面電報碼文件格式是:aaxxmmdd.thh,探空電報碼文件格式是:ttaammdd.thh。其

11、中aaxx表示地面報;ttaa表示探空報;mm表示月份,用2位數(shù)字0112;dd表示日,用2位數(shù)字0131;hh表示時次,用2位數(shù)字,地面有00、03、06、09、12、15、18、21共8個時次,探空有00、06、12、18共4個時次,都用世界時。地面/探空電報譯碼數(shù)據(jù)流圖如圖1所示。地面/探空電碼文件電碼譯碼系統(tǒng)各天氣資料要素 圖1 電碼譯碼系統(tǒng)數(shù)據(jù)流圖3、 地面/探空電報譯碼程序總流程圖根據(jù)電碼文件名是8.3格式,并且與月日時次形成固定關(guān)系,因此可以采用輸入年月日時次的數(shù)據(jù)來組合文件名。地面14位固定為“aaxx”,探空14位為“ttaa”,56位為2位數(shù)月份,78位為2位數(shù)日,910位

12、為固定為“.t”,1112位為2位數(shù)時次。地面/探空電報譯碼程序流程圖如圖2所示,讀取文件,找到指定臺站的位置,并讀取指定臺站的電碼到一個字符串數(shù)組中,然后傳遞給地面或探空處理程序繼續(xù)處理,分解出天氣各要素。最后顯示結(jié)果。開始輸入年月日世界時及臺站號輸入選擇地面或高空文件存在?ny讀取電碼文件結(jié)束顯示出錯信息根據(jù)年月日世界時組成文件名指定臺站號?文件結(jié)束?ynn地面/高空?y地面處理程序高空處理程序高空地面 圖2 電碼譯碼系統(tǒng)程序流程圖四、 詳細設(shè)計由用戶輸入的p的值判斷是否是高空資料分析或者是地面資料分析,p=1,代表是對地面要素的分析,p=2則代表是對高空各個氣象要素的分析。p=1,調(diào)用地

13、面氣象要素分析函數(shù)。分解已讀入的這一行字符串,第04字符是臺站號;第610字符分別對應(yīng)著irix云底高度,能見度;第1216字符分別對應(yīng)著總云量,風向,風速。令k=18,然后判斷k是否還小于等于字符串總數(shù),若成立,則進行下一步,分析地k字符代表的內(nèi)容,k字符人為的規(guī)定可以表示氣溫,露點,本站氣壓,海平面氣壓,氣壓趨勢,降水量,天氣現(xiàn)象,云狀,發(fā)報時間。然后分析字符里的數(shù)據(jù)具體是多少,到表天氣要素的一個什么狀態(tài),反饋到用戶方面。再調(diào)整k=k+6,繼續(xù)重復從判斷k的值是否有意義開始的內(nèi)容,一直到字符串里的所有字符信息都已經(jīng)分析反饋結(jié)束為止。地面各要素地面各要素入口k=18ny返回k>n?第k

14、字符為123456789氣溫露點本站氣壓海平面氣壓氣壓趨勢降水量天氣現(xiàn)象發(fā)報時間云狀k=k+6分解已讀入的這一行字符串。第04字符臺站號iiiii;第610字符irixhvv;第1216字符nddff 圖3譯出地面各要素功能流程圖p=2,表示用戶需要的事探空各氣象要素,然后分解已經(jīng)讀入的這一行字符串,第0到11字符不用,第12到16的字符代表臺站號。令k=18,在k在合理的范圍內(nèi)時,分析k:k+1字符,由它們的數(shù)值判斷氣象要素所屬的層數(shù),繼而分別譯出氣壓,溫度,溫度露點差,風向風速。然后k=k+18,重復上面的判斷過程。一直到k的數(shù)值大于n。探空各要素地面各要素入口k=18分解已讀入的這一行字

15、符串。第011字符不用;第1216字符臺站號ny返回k>n?第k:k+1字符為999200857050/4020/15/10地面925hpa1000 hpa850hpa700hpa500/400300/25030/25200/150/100分別譯出氣壓,溫度,溫度露點差,風向風速。k=k+18 圖4譯出探空各要素功能流程圖五、 編碼設(shè)計利用計算機高級語言對程序流程圖進行編程,采用c語言編程。1、編寫主控程序,通過輸入年月日時次,然后選擇地面或高空,再輸入要處理的臺站號。根據(jù)輸入信息,自動組成相應(yīng)的文件名,從文件中讀出指定臺站電碼資料,存入字符串數(shù)組ch中,然后調(diào)度地面dmdisp子程序或

16、高空updisp子程序進行相應(yīng)的處理。 #include <stdio.h> / 程序中要用到輸入/輸出函數(shù) #include <string.h> / 程序中要用到字符串處理函數(shù),如strlen、strcpy等int str2int(char *ch,int k,int n); / 對字符串從k位置開始,長度為n的子字符串轉(zhuǎn)/ 換為整型值。對于含有非數(shù)字字符,則返回-1 void dmdisp(char *ch); / 對字符串ch進行地面譯碼的功能函數(shù) void updisp(char *ch); / 對字符串ch進行高空譯碼的功能函數(shù) void main(void

17、) / 主控程序入口 int year,month,day,hour; / 定義年year、月month、日day、時次hour int n,p; / 定義位置計數(shù)器n,臨時變量p char station6,ch400; / 定義臺站號station、存放電碼字符串數(shù)組ch file *fp; char name30; / 定義讀文件指針,文件名name int days=0,31,28,31,30,31,30,31,31,30,31,30,31; / 定義每月天數(shù) printf("請輸入年、月、日n");while(1) scanf("%d%d%d"

18、,&year,&month,&day); / 輸入年月日用空格隔開 if (year % 4 = 0) days2=29; else days2=28; if (month>=1 && month <=12 && day>=1 && day<=daysmonth) break; else printf ("輸入有錯,請重新輸入年、月、日n"); printf("請選擇:1-地面;2-高空n");while(1) scanf("%d",&am

19、p;p); if (p=1 | p=2) break;else printf ("輸入有錯,請重新選擇:1-地面;2-高空n"); if (p!=1) strcpy(name,".探空資料ttaa0529.t00"); p=13; printf("請輸入高空世界時,供選擇:0、6、12、18n");while(1) scanf("%d",&hour); if (hour=0 | hour =6 | hour =12 | hour =18) break;else printf ("輸入有錯,請重新輸

20、入高空世界時,供選擇:0、6、12、18n"); else strcpy(name,".地面資料aaxx0529.t06"); printf("請輸入地面世界時,供選擇:0、3、6、9、12、15、18、21n");while(1) scanf("%d",&hour); if (hour>=0 && hour <=21 && hour % 3 =0) break;else printf ("輸入有錯,請重新輸入地面世界時:021,間隔為3n"); n=s

21、trlen(name); / 以下生成電碼文件名,存放在name中 namen-2='0'+hour/10; namen-1='0'+hour%10; / 加入時次,2位數(shù) namen-8='0'+month/10; namen-7='0'+month%10; / 加入月份,2位數(shù) namen-6='0'+day/10; namen-5='0'+day%10; / 加入日期,2位數(shù) printf("請輸入臺站號,南京為58238,北京為54511,上海為58362n"); sca

22、nf("%s",station); / 臺站號存放入station中 if (fp=fopen(name,"rt") / 打開name電碼文件,以便讀入資料 fgets(ch,80,fp); / 跳空一行fgets(ch,80,fp); / 跳空一行if (p=1) fgets(ch,80,fp); / 如果處理地面,則跳空一行 while(!feof(fp) / 如未找到指定臺站號,則一直到文件結(jié)束 fgets(ch,80,fp); / 讀入一行,存放到ch字符串數(shù)組中 n=strlen(ch)-1; / 計算ch字符串實際讀入個數(shù) while (n&

23、lt;300 && chn-1 != '=' && !feof(fp) / 一直到讀完退出循環(huán) chn= ' ' / 在ch字符串尾留出一個空格,預(yù)備后續(xù)存放 fgets(&chn+1,80,fp); / 繼續(xù)讀入一行,存放到ch字符串數(shù)組后面中 n=strlen(ch)-1; / 重新計算ch字符串實際讀入個 if (!strncmp(&chp-1,station,5) / 是否找到指定臺站號,未找到繼續(xù)循環(huán) if (p=1) dmdisp(ch); else updisp(ch); / 找到,則作相應(yīng)的調(diào)度處理

24、p=0; break; / 退出循環(huán),準備結(jié)束程序運行 fclose(fp); / 關(guān)閉文件if (p!=0) printf("你指定的%s-臺站未找到,請檢查!n",station); else printf("你指定的%s-文件不存在,請檢查!n" ,name); 2、對ch字符串數(shù)組從k位置開始,規(guī)定字符串從0開始計數(shù),長度為n的子字符串轉(zhuǎn)換為整型值。對于含有非數(shù)字字符,則返回-1。例如ch=”123456/78”,則函數(shù)str2int(ch,2,3)返回345;函數(shù)str2int(ch,5,3)返回-1。 int str2int(char *ch

25、,int k,int n) / 字符串轉(zhuǎn)換成整數(shù)值函數(shù) int i,m=0; / 循環(huán)變量i,中間變量m,用于存放結(jié)果整數(shù)值 for(i=0;i<n;i+) if (chk+i< '0' | chk+i> '9') break; / 字符串中含非數(shù)字,中途跳出 m=m*10+chk+i-0; / 字符串轉(zhuǎn)換成整數(shù)值 if (i=n) return m; else return -1; / 返回結(jié)果值 3、對字符串電碼ch進行譯碼,翻譯出高空各要素的值進行顯示。 void updisp(char *ch) / 對ch進行探空譯碼 int n,i,

26、p,y; / n表示當前字符串位置,p表示轉(zhuǎn)換出的整數(shù)值printf("=讀出的探空電碼=n"); puts(ch); / 顯示讀到的字符串電碼內(nèi)容 printf("=探空譯碼結(jié)果=n"); n=(ch10=' ') ? 11 : 12 ; / 調(diào)整好當前位置,如果“ttaa”后只有一個空格, / 則n取11;若有兩個空格,則n取12 y=str2int(ch,n-6,2); / 取出月份給y保存,處理風速時要用到 printf("區(qū)站號:"); / n已指出臺站號位置 for(i=0;i<5;i+) print

27、f("%c",chn+i); / 輸出臺站號 printf("n"); / 換行 while(1) / 死循環(huán),中途必須用break跳出循環(huán) n+=6 ; / 調(diào)整好當前位置,準備處理hhppp p=str2int(ch,n+2,3); / pppp電碼,處理氣壓,位勢米 if (chn='9' && chn+1='9') / 99:地面氣壓 /此處輸出地面氣壓的位勢米高度p,若p100,則加1000;否則p就是位勢米。 if(p<=1000)p+=1000; printf("地面氣壓:%d

28、",p); else if (chn='0' && chn+1='0') / 00:1000hpa氣壓 /此處輸出1000hpa氣壓的位勢米高度p,若p>500,則500-p;否則p就是位勢米。 if(p>500)p=500-p; printf("1000hpa氣壓:%d",p); else if (chn='9' && chn+1='2') / 92:925hpa氣壓 /此處輸出925hpa氣壓的位勢米高度p,p就是位勢米。 printf("92

29、5hpa氣壓:%d",p); else if (chn='8' && chn+1='5') / 85:850hpa氣壓 /此處輸出850hpa氣壓的位勢米高度p,p加1000。 p=p+1000; printf("850hpa氣壓:%d",p); else if (chn='7' && chn+1='0') / 70:700hpa氣壓 /此處輸出700hpa氣壓的位勢米高度p,若p>300,加2000;否則加3000。 if(p>300) p=p+2000;

30、 else p=p+3000; printf("700hpa氣壓:%d",p); else if (chn='5'| chn='4') && chn+1='0') / 500hpa或400hpa氣壓 /此處輸出500hpa或400hpa氣壓的位勢米高度p,p乘以10。 p=p*10; printf("%c00hpa氣壓:%d",chn,p); else if (chn='3' && chn+1='0') | (chn='2' &

31、amp;& chn+1='5') / 此處輸出300hpa或250hpa氣壓的位勢米高度p, / 若p<500,則加1000后乘以10;否則p乘以10。 if(p<500) p=(p+1000)*10; elsep=p*10; printf("%c%c0hpa氣壓:%d",chn,chn+1,p); else if (chn='2'| chn='1') && chn+1='0') | (chn='1' && chn+1='5')

32、 /此處輸出200hpa或150hpa或100hpa氣壓的位勢米高度p,p加1000后乘以10。 p=(p+1000)*10; printf("%c%c0hpa氣壓:%d",chn,chn+1,p); else break; / 處理結(jié)束,跳出死循環(huán) n+=6 ; / 調(diào)整好當前位置,準備處理tttdd p=str2int(ch,n,3); / pttt電碼,處理溫度,單位0.1 if (p>=0) /此處輸出溫度p,p為偶數(shù)表示零上,否則為零下 if(p%2=0) printf(",溫度:零上%.1f",0.1*p); elseprintf(&q

33、uot;,溫度:零下%.1f",0.1*p); p=str2int(ch,n+3,2); / pdd電碼,處理露點差,單位,。 if (p>=0) / 此處輸出露點差p,若p>50,則減去50;否則除以10 if(p>50) p-=50; else p=p%10; printf(",露點差:%d",p); n+=6; / 調(diào)整好當前位置,準備處理dddff p=str2int(ch,n,3); / pddd電碼,處理風向 if (p%5=0) / 此處輸出風向p,必須是5的倍數(shù),否則缺測 printf(",風向:%d度",p)

34、 ; p=str2int(ch,n+3,2); / pff電碼,處理風速 if (p>=0) / 此處輸出風速p,注意風速的單位與y有關(guān)? if (y>50) printf(",風速:%.1f米/秒",p*0.5); else printf(",風速:%d米/秒",p); printf("n"); 4、對字符串電碼ch進行譯碼,翻譯出地面各層各要素的值進行顯示。void dmdisp(char *ch) / 對ch進行地面譯碼 int n,i,p; / n表示當前字符串位置,p表示轉(zhuǎn)換出的整數(shù)值char cl105=&qu

35、ot;無低","淡積","濃積","積雨","積層","層積","碎雨","碎雨","積","鬃積" char cm105="無中","高層","雨層","高積","莢狀","層積","積雨","積層","積","散積&

36、quot; char chh105="無高","毛卷","密卷","偽卷","鉤卷","卷","輻卷","卷層","層","卷積" char cw79="沙塵暴","霧","毛毛雨","非陣性雨","固體降水","陣雨","雷暴"char vv116=&quo

37、t;7萬","<50","50","2百","5百","1千","2千","4千","1萬","2萬","5萬"char nh106= "無云","1成","2-3成","4成","5成","6成","7-8成","9成",

38、"10成","有霧"char ww9615= "煙","霾","霾","霾","霾","霾","輕霧","片狀淺霧","連續(xù)淺霧","閃電","高空有降水","遠處有降水","附近有降水","雷暴無雨","颮","龍卷", "毛毛

39、雨", "雨", "雪、米雪","雨夾雪", "雨夾雨淞","陣雨", "陣雪","冰雹","大霧","雨夾雷暴","較輕沙塵暴","輕沙塵暴","中沙塵暴","中強沙塵暴","強沙塵暴","增強沙塵暴","輕低吹雪","強低吹雪","輕高

40、吹雪","強高吹雪","霧散開","散片霧","可辨霧變薄","不可辨輕霧變薄","可辨霧","不可辨霧","可辨霧變濃","不可辨霧變濃","可辨霧淞","不可辨霧淞","間歇輕毛毛雨","連續(xù)輕毛毛雨","間歇中毛毛雨","連續(xù)中毛毛雨","間歇濃毛毛雨",&quo

41、t;連續(xù)濃毛毛雨","輕毛毛雨","濃毛毛雨","輕毛毛雨夾雨","濃毛毛雨夾雨","間歇小雨","連續(xù)小雨","間歇中雨","連續(xù)中雨","間歇大雨","連續(xù)大雨","小雨夾雨淞","大雨夾雨淞","小雨夾雪","中雨夾雪","間歇小雪","連續(xù)小雪","間

42、歇中雪","連續(xù)中雪","間歇大雪","連續(xù)大雪","冰針","米雪","雪晶","冰粒","小陣雨","中陣雨","大陣雨","小陣性雨夾雪","大陣性雨夾雪","小陣雪","中或大陣雪","小陣性霰","中或大陣性霰","輕冰雹","中

43、或強冰雹","雷暴后小雨","雷暴后中雨","雷暴后小雪","雷暴后大雪","小雷暴伴雨雪","小雷暴伴冰雹","大雷暴伴雨雪","雷暴及沙塵暴","大雷暴伴冰雹" printf("=讀出的地面電碼=n"); puts(ch); / 顯示讀到的字符串電碼內(nèi)容 printf("=地面譯碼結(jié)果=n"); printf("區(qū)站號:") ; / 準備處理i

44、iiii for(i=0;i<5;i+) printf("%c",chi) ; / 輸出臺站號 printf("n") ; / 換行,準備處理irixhvv switch(ch8) / 處理云底高度h case '0' : printf("云高<50米"); break; case '1' : printf("云高50-<100米"); break; case '2' : printf("云高100-<200米"); bre

45、ak; case '3' : printf("云高200-<300米"); break; case '4' : printf("云高300-<600米"); break; case '5' : printf("云高600-<1000米"); break; case '6' : printf("云高1000-<1500米"); break; case '7' : printf("云高1500-<20

46、00米"); break; case '8' : printf("云高2000-<2500米"); break; case '9' : if (ch12='0') printf("無云高");else printf("云高2500米"); break; p=str2int(ch,9,2); / 處理能見度vv,pvv電碼,單位米或千米if(p=0) printf(",能見度為:<100"); if(p>=1&&p<=5

47、0) printf(",能見度為:%.1f",p*100.0); if(p>=51&&p<=79) p=(p-50)*1000; printf(",能見度為:p"); if(p=80)printf(",能見度為:>=3萬"); if(p>=81&&p<=88) p=(p-80)*5+30)*1000; printf(",能見度為:p"); / 此處根據(jù)p輸出能見度資料,注:p<=88未處理;p>88 已處理 if (p>88) prin

48、tf("%s米",vvp-89); / 準備處理nddff:總云量n、風向dd、風速ff if (ch12!= '/') printf(",總云量:%s",nhch12- '0'); / 處理總云量n p=str2int(ch,13,2); / 處理風向dd,要放大10倍,單位度 if (p=0) printf(",靜風"); if (p>0) printf(",風向:%d度",p*10); p=str2int(ch,15,2); / 處理風速ff,單位米/秒 if (p>

49、;0) printf(",風速:%d米/秒",p); printf("n"); / 換行 n=18; / 調(diào)整好當前位置,準備處理溫度、露點溫度等資料 if (chn= '1') / 處理溫度 1sttt 單位0.1 已處理好 p=str2int(ch,n+2,3); / pttt電碼,即溫度資料 if (p>=0) /此處根據(jù)p輸出溫度資料,chn+1為零表示正,否則為負。 if (chn+1='1') p=-p; printf("氣溫:%.1f",p/10.0); n+=6; / 調(diào)整好當前位

50、置 if (chn= '2') /處理露點溫度 2stdtdtd 單位0.1 p=str2int(ch,n+2,3); / ptdtdtd電碼,即露點溫度資料 if (p>=0) /此處根據(jù)p輸出露點溫度資料,chn+1為零表示正,否則為負。 if(chn+1=0)printf(",露點溫度為:%.1f",p*0.1); else printf(",露點溫度為:-%.1f",p*0.1); n+=6; / 調(diào)整好當前位置 if (chn= '3') /處理本站氣壓 3p0p0p0p0,單位0.1hpa。 p=str2

51、int(ch,n+1,4); / pp0p0p0p0電碼,即本站氣壓資料 if (p>=0) /此處根據(jù)p輸出本站氣壓資料。 if(p<100) p+=1000; printf(",本站氣壓為:%.1fhpa",p/10.0); n+=6; / 調(diào)整好當前位置 if (chn= '4') /處理海平面氣壓 4pppp,單位0.1hpa。 p=str2int(ch,n+1,4); / ppppp電碼,即海平面氣壓資料 if (p>=0) / 此處根據(jù)p輸出海平面氣壓資料 if(p<500) p+=1000; printf(",

52、海平面氣壓為:%.1fhpa",p/10.0); n+=6; / 調(diào)整好當前位置 printf("n") ; if (chn= '5') /處理過去三小時氣壓變化 5appp p=str2int(ch,n+2,3); / pppp電碼,即過去三小時氣壓變化資料 if (p>=0) / 此處根據(jù)p輸出過去三小時氣壓變化,單位0.1hpa。 if(chn+1<'4')printf("過去三小時氣壓上升%.1fhpa",p*0.1);if(chn+1='4')printf("過去三

53、小時氣壓不變"); if(chn+1>'4')printf("過去三小時氣壓下降%.1fhpa",p*0.1); n+=6; / 調(diào)整好當前位置 if (chn= '6') /處理降水量,單位毫米。 6rrr1 p=str2int(ch,n+1,3); / prrr電碼,即降水量資料 if (p>=0) / 此處根據(jù)p輸出降水量 if(p<=998) printf(",降水量為:%d",p); if(p=990) printf(",降水量為:微量"); if(p>990

54、&&p<=999) printf(",降水量為:%.1f",(p-990)/10.0); n+=6; / 調(diào)整好當前位置 printf("n") ;if (chn= '7') / 處理天氣現(xiàn)象 7www1w2 p=str2int(ch,n+1,2); / pww電碼,即天氣現(xiàn)象資料 if (p>=4) printf("現(xiàn)在天氣現(xiàn)象為:%s",wwp-4); / 請把電碼翻譯出來!/ 過去天氣現(xiàn)象,chn+3表示w1,chn+4表示w2 if (chn+3>='3' &a

55、mp;& chn+3<='9') printf(",六小時內(nèi)出現(xiàn)有%s",cwchn+3- '3' ); if (chn+4>='3' && chn+4<='9') printf("和%s",cwchn+4- '3' ); n+=6; / 調(diào)整好當前位置 printf("n") ; if (chn= '8') /處理云資料 8nhclcmch if (chn+1!= '/') / 低

56、云或中云總云量 if (chn+2!= '0') printf("低云"); else printf("中云"); printf("總云量:%s",nhchn+1- '0'); if (chn+2!= '/') printf(",低云狀:%s云",clchn+2- '0'); if (chn+3!= '/') printf(",中云狀:%s云",cmchn+3- '0'); if (chn+4!= &

57、#39;/') printf(",高云狀:%s云",chhchn+4- '0'); printf("n") ;六、 運行與調(diào)試1、2014年05月29日06時,北京氣象站地面原始電報碼和譯碼如圖5所示,由運行結(jié)果,根據(jù)讀出的地面電碼,譯碼的結(jié)果與約定的存儲相比是正確的,且合理的。全面的展示了該時刻的地面氣象要素以及變化過程,輸出的格式安排合理有序。 圖5北京氣象站地面原始電報碼和譯碼2、2014年05月29日6時,上海氣象站地面原始電報碼和譯碼如圖6所示,由運行結(jié)果,根據(jù)讀出的地面電碼,譯碼的結(jié)果與約定的存儲相比是正確的,且合理的

58、。全面的展示了該時刻的地面氣象要素以及變化過程,輸出的格式安排合理有序。 圖6上海氣象站地面原始電報碼和譯碼3、2014年05月29日6時,南京氣象站地面原始電報碼和譯碼如圖7所示,由運行結(jié)果,根據(jù)讀出的地面電碼,譯碼的結(jié)果與約定的存儲相比是正確的,且合理的。全面的展示了該時刻的地面氣象要素以及變化過程,輸出的格式安排合理有序。 圖7南京氣象站地面原始電報碼和譯碼4、2014年05月29日0時,北京氣象站探空原始電報碼和譯碼如圖8所示,由運行結(jié)果,根據(jù)讀出的探空電碼,譯碼的結(jié)果與約定的存儲相比是正確的,且合理的。全面的展示了該時刻的各個高層的高空氣象要素,輸出的格式安排合理有序。 圖8北京氣象

59、站探空原始電報碼和譯碼5、2014年05月29日0時,上海氣象站探空原始電報碼和譯碼如圖9所示,由運行結(jié)果,根據(jù)讀出的探空電碼,譯碼的結(jié)果與約定的存儲相比是正確的,且合理的。全面的展示了該時刻的各個高層的高空氣象要素,輸出的格式安排合理有序。 圖9上海氣象站探空原始電報碼和譯碼6、2014年05月29日0時,南京氣象站探空原始電報碼和譯碼如圖10所示,由運行結(jié)果,根據(jù)讀出的探空電碼,譯碼的結(jié)果與約定的存儲相比是正確的,且合理的。全面的展示了該時刻的各個高層的高空氣象要素,輸出的格式安排合理有序。 圖10南京氣象站探空原始電報碼和譯碼 7、系統(tǒng)對錯誤處理的情況 圖11.選擇地面還是高空時數(shù)值不在1,2范圍 圖12選擇的不是規(guī)定的時刻 圖13輸入的臺站號不是指定的七、 總結(jié) 該設(shè)計思路是讀取氣象電報電碼文件,經(jīng)過本電碼譯碼系統(tǒng),生產(chǎn)各氣象要素。地面電碼資料的氣象要素有:溫度、露點、本站氣壓、海平面氣壓、氣壓趨勢、氣壓變化量、降水量、天氣現(xiàn)象、云狀、能見度,風向飛速、總云量等;高空電碼資料的氣象要素分13層:地面、1000hpa、925hpa、850hpa、7

溫馨提示

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

評論

0/150

提交評論