信息論課程設計(香農、費諾編碼)(共35頁)_第1頁
信息論課程設計(香農、費諾編碼)(共35頁)_第2頁
信息論課程設計(香農、費諾編碼)(共35頁)_第3頁
信息論課程設計(香農、費諾編碼)(共35頁)_第4頁
信息論課程設計(香農、費諾編碼)(共35頁)_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、精選優(yōu)質文檔-傾情為你奉上華 北 科 技 學 院信息論基礎課程設計說明書班級: 計算B092 姓名: 李 寧 (7) 設計題目: 信源編碼軟件 設計時間: 2012.7.4 至 2012.7.8 指導教師: 李 慧 評 語: _評閱成績: 評閱教師: 目 錄專心-專注-專業(yè)設計總說明早期的數(shù)據(jù)壓縮起源于人們對概率的認識。當對文字信息進行編碼時,如果為出現(xiàn)概率較高的字母賦予較短的編碼,為出現(xiàn)概率較低的字母賦予較長的編碼,平均編碼長度就能縮短不少。印象中的著名的Morse電碼就是一個范例。信息論之父C.E.Shannon曾指出,任何信息都存在冗余,冗余大小與信息中每個符號的出現(xiàn)概率(不確定性)有關

2、。他所提出的無失真信源編碼定理奠定了數(shù)據(jù)壓縮的理論基礎。數(shù)據(jù)壓縮的目的就是要消除信息中的冗余,而信息熵及相關的定理恰恰用數(shù)學手段精確地描述了信息冗余的程度。 本文主要采用香農編碼和費諾編碼方法來描述信源的編碼過程。香農編碼采用信源符號與概率由用戶輸入。通過一定的校驗代碼確保離散信源的正確性。例如單個符號的概率不能大于1,概率和不能大于1,信源概率和不為1時無法編碼等校驗。由于香農編碼是將信源概率由大到小排序的,所以,本軟件也實現(xiàn)了這一點,輸入時不必考慮信源概率順序問題,軟件會自動按概率排序編碼。最后將結果顯示在MFC列表控件上。用戶可以將最終結果保存成文件。費諾編碼通過輸入字符串來自動計算單個

3、信源符號的概率。當然,為了方便起見,本軟件對費諾編碼還提供了打開文件完成信源輸入,從而可以更快的輸入字符串。進行編碼時同樣按概率從大到小排序,同樣可以將結果保存到文件中。本軟件界面友好,方便可靠,用戶可根據(jù)自己的愛好選擇不同的界面風格。在首頁加入了好看的Flash,使軟件更為美觀。同樣反映除了本軟件的功能特性。根據(jù)實驗要求和日常壓縮數(shù)據(jù)的習慣,本軟件最終完成了以下目標:1、 界面設計友好,美觀,數(shù)據(jù)存儲安全,可靠。2、 操作簡便、適用,無冗余操作。3、 編碼效率較高,編碼時間短。關鍵詞: 離散信源;香農編碼;費諾編碼;信源熵 前 言本課程設計是在學習了信息論與編碼和相關開發(fā)的軟件課程后,讓學生

4、通過實際的操作來熟悉信源編碼微機實現(xiàn),培養(yǎng)學生能夠獨立的完成對相關課題或者項目的分析能力、設計能力和調試能力。本課程設計是銜接在大一時C課程設計之后的,同樣是運用MFC程序來設計,聯(lián)系本學期所學內容,要求有獨立的操作界面。由于在以前有過類似的練習,故在這次的課程設計相對以前來說不是太難。在這次的課程設計中,著重培養(yǎng)的是學生的自學能力,以及獨立分析互聯(lián)網上和圖書館里的各種資料,來豐富自己的知識并且提高對數(shù)學公式的計算機實現(xiàn)、VC+等軟件的實際操作能力。通過這次的課程設計,能夠使學生對已經學習過的信息論與編碼課程的進一步的掌握,能夠對知識進行最大程度的消化融匯。因此這次的課程設計對我們有著非常重要

5、的意義。 本課程設計中用VC+編寫出基于MFC界面的簡單軟件以實現(xiàn)壓縮信源的目的。軟件應用香農編碼的相關理論,經過比較系統(tǒng)合理的編程操作,實現(xiàn)可視化的窗口以方便用戶使用。通過簡單校驗確保信源正確性,保證軟件的可靠性。最終將結果保存為文檔方便記錄編碼結果。 通過讓完成具體編碼算法的程序設計和調試工作,達到提高編程能力和深刻理解編碼理論的目的。培養(yǎng)我們使用計算機和查閱參考資料的能力,提高我們的基本設計能力。培養(yǎng)了理論聯(lián)系實際和獨立思考的能力。并激發(fā)我們的實際開發(fā)創(chuàng)造的意識和能力。培養(yǎng)和提高我們的自學能力以及綜合運用所學理論知識去分析解決實際問題的能力。第1章 總體設計方案1.1 軟件結構設計香農編

6、碼幫助費諾編碼編碼選擇信源編碼費諾編碼香農編碼編碼理論菜單皮膚切換圖1.1.1 軟件功能結構圖輸入信源符號和概率碼長累加概率碼字進行編碼檢驗信息平均碼長顯示結果正確錯誤信源熵信息率信源符號概率編碼效率圖1.1.2 香農編碼流程圖輸入字符串序列碼長概率碼字進行編碼打開文件字符串長度顯示結果字符個數(shù)信源熵信源符號編碼效率直接輸入概率計算及排序出現(xiàn)次數(shù)平均碼長圖1.1.3 費諾編碼流程圖第2章 算法思想及設計2.1香農編碼2.1.1香農編碼思想:設有離散無記憶信源:1按信源符號的概率從大到小的順序排列,為方便起見,可令23確定滿足下列不等式的整數(shù),并令為第個碼字的長度4把用二進制表示,用小數(shù)點后的位

7、作為的碼字例:有一單符號離散無記憶信源對該信源編二進制香農碼編碼過程 :2.1.2香農編碼算法設計:通過文本框輸入信源符號及相應概率。用冒泡法將信源符號及概率依概率由大到小排序,計算其累加概率,用數(shù)學公式計算每個信源符號的。最后把結果寫入列表控件中,以可視化方式顯示編碼結果。2.2費諾編碼2.2.1費諾編碼思想設有離散無記憶信源1.按信源符號的概率從大到小的順序排隊不妨設2.將依次排列的信源符號按概率值分為兩大組,使兩個組的概率之和近似相同,并對各組賦予一個二進制碼元“0”和“1”。 3.將每一大組的信源符號再分為兩組,使劃分后的兩個組的概率之和近似相同,并對各組賦予一個二進制符號“0”和“1

8、”。 4.如此重復,直至每個組只剩下一個信源符號為止。 5.信源符號所對應的碼字即為費諾碼。例:有一單符號離散無記憶信源對該信源編二進制費諾碼2.2.2費諾編碼算法設計通過輸入字符串或打開相關文件獲取字符串,用字符串處理方法統(tǒng)計每個字符的數(shù)量及運算其概率。然后按照每個字符的概率用冒泡法進行排序。然后用遞歸的思想進行費諾編碼,求得了每個字符的二進制碼字。并且對編碼后的平均碼長,以及編碼的傳輸效率進行了求解。第3章 軟件詳細設計3.1主界面設計編碼軟件主界面如圖3.1.1所示,基本功能在菜單中進行選擇。用Falsh CS5軟件設計一個簡單的Flash插入到主界面,使界面更美觀而且形象。 圖3.1.

9、1 主界面3.2功能設計3.2.1香農編碼的實現(xiàn)香農編碼是通過編輯框依次輸入信源符號和概率的,輸入時同時完成校驗工作。即單個信源符號概率不能大于1,信源概率和不能大于1,概率和不為1時不能進行編碼。正確輸入信源符號及其概率后便可計算出該離散信源的碼長、碼字等信息。可以講編碼結果保存為txt文本等文件。圖3.2.1 香農編碼界面圖3.2.2保存編碼結果(1) 添加信源代碼:void CShannonCode:OnAdd() / TODO: Add your control notification handler code hereUpdateData(true); CString tempf1

10、,tempf2;/添加之前、之后列表控件值float sum=0.0, sum2=0.0, tempa1, tempa2;if(m_prob >= 1.0)/單個信源符號概率不能大于1MessageBox("概率小于1!","提示");return;for(int i = 0;i < count;i+)/計算信源概率和 tempf1 = m_list1.GetItemText(i,1);tempa1 = (float)(atof(tempf1);sum = sum +tempa1;if(sum >= 1.0)/如果和大于等于1,則不再添

11、加MessageBox("信源概率和已等于1!無法添加!","提示");return;CString s1,s2;m_list1.InsertItem(r,"");s1.Format("%s",m_single);m_list1.SetItemText(r,0,s1);s2.Format("%.6f",m_prob);m_list1.SetItemText(r,1,s2);r+;count+;for(int j = 0;j < count;j+)/計算信源概率和 tempf2 = m_li

12、st1.GetItemText(j,1);tempa2 = (float)(atof(tempf2);sum2 = sum2 +tempa2;if(sum2 > 1.0)/如果添加后概率和大于1,則最后添加的信源不做計算MessageBox("當前信源添加后信源概率和大于1!","提示");s1.Format("%s","");m_list1.SetItemText(r-1,0,s1);s2.Format("%s","");m_list1.SetItemText(r-1

13、,1,s2);r-;count-;return;m_single = ""m_prob = 0.0;UpdateData(false); (2) 算法實現(xiàn)代碼:void CShannonCode:Count() CString singe,temp,s;char binN=""CString singleN;/信源符號數(shù)組float pN;/信源概率數(shù)組int i,j,c3;float btemp,vtemp;double c1,c2;/讀取輸入的信源符號和概率for(i = 0; i < count; i+)singlei =m_list1.Ge

14、tItemText(i,0); temp=m_list1.GetItemText(i,1); pi = (float)(atof(temp);/信源符號和概率按概率大小排序for(i = 1;i < count;i+) for(j = 0;j < count-i;j+)if(pj < pj+1)ExChangeChar(single,j,j+1);ExChangePsingle(p,j,j+1);for(i = 0; i < count; i+)m_list2.InsertItem(i,"");temp.Format(" %s "

15、,singlei);m_list2.SetItemText(i,0,temp);/信源符號temp.Format("%.6f",pi);m_list2.SetItemText(i,1,temp);/概率/計算累加概率;for(i = 0; i < count; i+)temp = m_list2.GetItemText(i,1); singi.pa = (float)(atof(temp); sing0.paa = 0;for(i = 0; i < count; i+) singi.paa =singi-1.pa+singi-1.paa; for(i = 0;

16、i < count; i+)s.Format("%.6f",singi.paa); m_list2.SetItemText(i,2,s);/累加概率/計算碼字長度; for(i = 0;i < count;i+) for(j = 0;j < N;j+)if(j>=-log(singi.pa)/log(2)&&j<1-log(singi.pa)/log(2)singi.k=j;c1 = -log(singi.pa)/log(2);c2 = 1-log(singi.pa)/log(2);c3 = int(c1);if(c3-c1)

17、= 0)singi.k = c3;elsesingi.k = c3+1;for(i = 0; i < count; i+)s.Format("%d",singi.k); m_list2.SetItemText(i,3,s);/碼字長度 /計算二進制數(shù); for(i = 0;i < count;i+)singi.binary0 ='0'singi.binary1 ='.'btemp = singi.paa;for(j=0;j<singi.k;j+)if(btemp*2 >= 1)binj = '1'bte

18、mp = btemp*2-1;elsebinj = '0'btemp = btemp*2;singi.binaryj+2 = binj; singi.binaryj+2 ='0' for(i = 0; i < count; i+)s.Format("%s",singi.binary); m_list2.SetItemText(i,4,s);/二進制數(shù)/計算碼字; for(i = 0;i < count;i+)vtemp = singi.paa;for(j = 0;j < singi.k;j+)if(vtemp*2>=1

19、)singi.codej='1'vtemp=vtemp*2-1;elsesingi.codej='0'vtemp=vtemp*2; singi.codej='0'for(i = 0; i < count; i+)s.Format("%s",singi.code); m_list2.SetItemText(i,5,s);/碼字for(i = 0;i < count ; i+)for(int j = 0;j < 6; j+)Result1 = Result1 + m_list2.GetItemText(i,j)+

20、"t"Result1 = Result1 + "n"void CShannonCode:CodeEfficiency()/計算并顯示編碼效率CString temp,s;int i;double K,Hx,R,A; for(i = 0; i < count; i+)temp = m_list2.GetItemText(i,1); singi.pa =(float)(atof(temp); K = sing0.pa*sing0.k;Hx = -sing0.pa*log(sing0.pa)/log(2); for(i = 0; i < count

21、; i+)K = K+singi.pa*singi.k;Hx = Hx+(-singi.pa*log(singi.pa)/log(2); R = (K*log(2)/log(2)/1; A = Hx/R; /A代表編碼效率,轉化為百分比; s.Format("%.6f",K); m_list3.InsertItem(0,s,0); s.Format("%.6f",Hx); m_list3.SetItemText(0,1,s); s.Format("%.6f",R); m_list3.SetItemText(0,2,s); s.Form

22、at("%.6f",A); m_list3.SetItemText(0,3,s);/顯示結果void CShannonCode:OnResult() / TODO: Add your control notification handler code herem_list2.DeleteAllItems();/清空已有數(shù)據(jù)m_list3.DeleteAllItems();CString temp;float sum=0.0,temp2;for(int i=0;i<count;i+)/計算信源概率和 temp=m_list1.GetItemText(i,1);temp2

23、=(float)(atof(temp);sum = sum +temp2;if(sum != 1.0)/信源概率和不為1時不進行編碼MessageBox("信源概率之和不為1!請檢查!","提示");return;Count();/編碼結果CodeEfficiency();/編碼效率(3) 保存代碼:void CShannonCode:OnBUTTONSave() / TODO: Add your control notification handler code hereUpdateData(true); CFileDialog dlgSave(fal

24、se,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"Txt Files(*.txt)|*.txt|Dat Files(*.dat)|*.dat|All Files (*.*)|*.*|",AfxGetMainWnd();/構造文件打開對話框CString strPath; /聲明變量if(dlgSave.DoModal() = IDOK)/判斷是否按下"打開"按鈕strPath=dlgSave.GetPathName();/獲得文件路徑和文件名 if(strPath!="")FILE

25、*pFile=fopen(strPath,"w");if (pFile)fprintf(pFile,"%s",Result1);fclose(pFile);UpdateData(false);3.2.2費諾編碼的實現(xiàn)費諾編碼可由用戶打開文本獲取信源序列,也可直接輸入序列。輸入內容為空時會有提示信息彈出。正確讀到文本域內容后點擊編碼按鈕即可用算法實現(xiàn)各字符概率的計算并按概率排序,進而對其進行編碼。列表框內容也可以進行保存。圖3.2.3 費諾編碼界面圖3.2.4 打開文件讀取文本(1) 主要代碼BOOL CFanoCode:OnInitDialog() CD

26、ialog:OnInitDialog();/ TODO: Add extra initialization here/編碼結果欄初始化; m_list1.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP|LVS_EX_ONECLICKACTIVATE|LVS_EX_GRIDLINES);m_list1.InsertColumn(0,_T("信源符號"), LVCFMT_CENTER, 60);m_list1.InsertColumn(1,_T("出現(xiàn)次數(shù)"), LVCFMT_CENTE

27、R, 70);m_list1.InsertColumn(2,_T("概率"), LVCFMT_CENTER, 80); m_list1.InsertColumn(3,_T("碼字長度"), LVCFMT_CENTER, 60);m_list1.InsertColumn(4,_T("碼字"), LVCFMT_CENTER, 80); /信源信息級編碼效率欄初始化; m_list2.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP|LVS_EX_ONECLICKACTI

28、VATE|LVS_EX_GRIDLINES);m_list2.InsertColumn(0,_T("字符串長度"), LVCFMT_CENTER, 80);m_list2.InsertColumn(1,_T("字符個數(shù)"), LVCFMT_CENTER, 80);m_list2.InsertColumn(2,_T("平均碼長"), LVCFMT_CENTER, 80);m_list2.InsertColumn(3,_T("信源熵"), LVCFMT_CENTER, 80);m_list2.InsertColumn(

29、4,_T("編碼效率"), LVCFMT_CENTER, 80);return TRUE; / return TRUE unless you set the focus to a control / EXCEPTION: OCX Property Pages should return FALSEint Group(CodeType FanoNode,int low,int high) /*一次分組(一分為二)并編碼*/float MinSum=FanoNodelow.data,MaxSum=FanoNodehigh.data;FanoNodelow.bitFanoNode

30、low.length+=1;FanoNodehigh.bitFanoNodehigh.length+=0;while(low+1 < high)if(MinSum > MaxSum)MaxSum+= FanoNode-high.data;FanoNodehigh.bitFanoNodehigh.length+ = 0; /*編碼加0*/elseMinSum+=FanoNode+low.data;FanoNodelow.bitFanoNodelow.length+ = 1; /*編碼加1*/return low; /*返回分組的第一部分的上界*/void FanoEncoding(C

31、odeType FanoNode,int s,int t)/*遞歸進行費諾編碼*/if(s < t)int pivotloc = Group(FanoNode,s,t);if(s < t-1)FanoEncoding(FanoNode,s,pivotloc);FanoEncoding(FanoNode,pivotloc+1,t);int IsnotIn(char a,char t,int n,int count) /*檢查字符a是否在數(shù)組t中*/for(int k = 0;k < n;k+)if(a = tk)countk+;return 0;return 1;void Ex

32、ChangeFloat(float p,int i,int j) /*交換兩個數(shù)值*/ float temp;temp = pi;pi = pj;pj = temp;void ExChangeChar(char t,int i,int j) /*交換兩個字符*/ char temp;temp = ti;ti = tj;tj = temp;void CFanoCode:OnResult() / TODO: Add your control notification handler code hereUpdateData(true); m_list1.DeleteAllItems();m_list

33、2.DeleteAllItems();if(m_text="")MessageBox("字符串內容不能為空!請輸入字符串!","提示");return;float pMaxStrLength;/*p每個字符的概率*/char strMaxStrLength,tMaxStrLength;/*str輸入的字符串,t不重復的字符串*/char *q = (LPSTR)(LPCTSTR)m_text;/CString to char *strcpy(str,q);int countMaxStrLength=0,m=1;/*count每個字符的

34、個數(shù),m為不重復的字符的個數(shù)*/int SLength = strlen(str);if(SLength > 200)MessageBox("字符串長度超過200!","提示");return;t0 = str0;count0+;for(int i = 1;i < SLength;i+)/*去除重復的字符,并計算個數(shù)*/if(IsnotIn(stri,t,m,count)tm = stri;countm+;for(int j = 0;j < m;j+)pj=float(countj)/float(SLength);for(i = 1;i

35、 < m;i+) /*冒泡排序*/ for(j = 0;j < m-i;j+)if(pj < pj+1)ExChangeFloat(p,j,j+1);ExChangeChar(t,j,j+1);/*相應的計數(shù)器數(shù)值也交換 */int temp;temp = countj;countj = countj+1;countj+1 = temp;for(i = 0;i < m;i+)/*將值賦給結構體數(shù)組 */FanoNodei.data = pi;FanoNodei.length =0;FanoNodei.Character = ti;FanoEncoding(FanoNod

36、e,0,m-1);for( i=0;i<m;i+)K+=FanoNodei.data*FanoNodei.length; /*求平均碼長*/H+=-FanoNodei.data*log(FanoNodei.data); /*求信源熵H(X)的大小*/R = H/K;CString s1,s2,s3;for(i = 0;i < m;i+)m_list1.InsertItem(i,"");s1.Format(" %ct",FanoNodei.Character);m_list1.SetItemText(i,0,s1);s1.Format(&quo

37、t;%d ",counti);m_list1.SetItemText(i,1,s1);s1.Format("%.6f",FanoNodei.data);m_list1.SetItemText(i,2,s1);s1.Format(" %d ",FanoNodei.length);m_list1.SetItemText(i,3,s1);s3=""for(int j=0;j<FanoNodei.length;j+)s2.Format("%d",FanoNodei.bitj);s3=s3+s2;m_list

38、1.SetItemText(i,4,s3);m_list2.InsertItem(0,"");s2.Format("%d",SLength);m_list2.SetItemText(0,0,s2);s2.Format("%d",m);m_list2.SetItemText(0,1,s2);s2.Format("%.6f",K);m_list2.SetItemText(0,2,s2);s2.Format("%.6f",H);m_list2.SetItemText(0,3,s2);s2.Format

39、("%.6f",R);m_list2.SetItemText(0,4,s2);/遍歷列表,獲取相應值,用于保存for(i = 0;i < 5 ; i+)for(j = 0;j < m; j+)Result = Result + m_list1.GetItemText(i,j)+"t"Result = Result + "n"(2) 讀文件代碼:void CFanoCode:OnOpenFile() / TODO: Add your control notification handler code hereUpdateDa

40、ta(true); CFileDialog dlgOpen(true,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"Txt Files(*.txt)|*.txt|Dat Files(*.dat)|*.dat|All Files (*.*)|*.*|",AfxGetMainWnd();/構造文件打開對話框CString strPath; /聲明變量if(dlgOpen.DoModal() = IDOK)/判斷是否按下"打開"按鈕strPath = dlgOpen.GetPathName();/獲得文件路徑m

41、_FilePath.Format("%s",strPath);/顯示文件路徑FILE *pFile = fopen(strPath,"r");/以讀形式打開文件if (pFile)/判斷文件是否被正確打開char pchData1000 = 0;/定義數(shù)據(jù)緩沖區(qū) fread(pchData,sizeof(char),1000,pFile); /讀取數(shù)據(jù)到緩沖區(qū)中fclose(pFile);/關閉文件m_text.Format("%s",pchData);UpdateData(false);3.2.3有關文檔的鏈接編碼軟件自然不能缺少對

42、編碼的理論介紹,這一點可通過網頁形式展現(xiàn)出來。通過單擊觸發(fā)打開制作好的簡單網頁??煞謩e對每種編碼進行簡單介紹。圖3.2.5 編碼理論介紹(1) 主要代碼void CMyDlg:OnMENUITEMSourcecoding() / TODO: Add your command handler code hereShellExecute(NULL, _T("open"),"webSourcecoding.html", NULL,NULL, SW_SHOW);軟件設計離不開軟件說明書,本軟件的說明書也是通過網頁完成的,這樣可以保證說明書不被修改,保持原版特性。

43、圖3.2.6軟件說明3.2.4皮膚切換的設計以往的軟件制作都以系統(tǒng)默認的樣式為主,在不斷的學習過程中要走向更專業(yè)化的道路,簡單的皮膚添加可使整個程序樣式不再單一,更為人性化。圖3.2.7 皮膚切換實例1圖3.2.8皮膚切換實例2(1) 皮膚代碼:BOOL CMyApp:InitInstance()AfxEnableControlContainer();SkinStart(_T("skinbelv.urf"),WINDOW_TYPE_VC,"",GTP_LOAD_FILE,NULL,NULL);第4章 軟件測試4.1香農編碼的測試4.1.1 軟件運行及結果

44、測試圖4.1.1 香農編碼結果顯示圖4.1.2 香農編碼錯誤提示圖4.1.3 香農編碼結果保存文件測試時發(fā)現(xiàn)軟件能夠較好的完成預期目標,能夠保證阻止各類錯誤信源的輸入,以及能夠正確按照概率排序并計算正確的碼字。最終還可以正確的保存文件。4.2費諾編碼的測試4.2.1 軟件運行及結果測試文本內容為空時無法進行編碼,會有錯誤提示。圖4.2.1 空文本無法操作正確打開文件或輸入字符串后,軟件能夠正確完成編碼任務。結果如下圖:圖4.2.2 費諾編碼結果顯示圖4.2.3 費諾編碼保存結果4.3測試結果通過對各個模塊功能的測試,最終可以確定本軟件的數(shù)據(jù)計算正確性及可靠性。各個附加功能也能夠無誤的實現(xiàn)。第5

45、章 總結 通過一周的時間終于完成了香農、費諾編碼軟件的設計開發(fā),時間的緊迫導致軟件依然存在不少問題,以費諾編碼不能識別漢子的問題為首。在參考眾多的資料后還是沒能及時將這個問題解決,不過時間短促,短時間內這個問題也不好解決。在以后的學習生活中我會嘗試著完成這個BUG。在課程設計的過程中困難不時的出現(xiàn),很多時候覺得無可入手,想盡辦法也不知道該怎么解決。在這個過程中我深深感受到編程人員經驗是多么的寶貴。由于之前已經有過幾次關于MFC的課程設計,所以在軟件模塊設計方面比較容易解決。算法方面,自己嘗試著去做了但總是不如意,由于時間關系,還是參考了相關文檔。在實踐中感覺到了學數(shù)學將數(shù)學算法轉換成計算機算法

46、不是一件容易的事。信源編碼軟件的設計同樣具有一定的挑戰(zhàn)性,以往的程序大多是在“黑窗口”下完成的,寫一個算法也是一件比較難的事,但路就是這樣走過來的,沒有今天的一小步就沒有明天的一大步。不斷地設計,不斷的思索,慢慢的就發(fā)現(xiàn)自己學會很多。有些問題自然就邊的簡單了。本次課程設計比較有突破性的是引入了皮膚文件,以往的MFC編程都是在系統(tǒng)默認的背景下運行的,這樣的軟件總感覺不是很舒服。之前學會了給對話框添加背景圖片等一些簡單的美化,但還是感覺不夠好。于是自己花了一段時間學習了一下皮膚美化程序,功夫不負有心人,這回在這方面感覺小有成就了。不過這也不算什么真真的提高,學好編程的思想更為重要。當然,軟件的開發(fā)

47、離不開好的資料和同學的交流。在這次課程設計中深深感受到了同學之間交流合作的重要性。交流不但可以發(fā)現(xiàn)新的問題,提高解決問題的效率,而且可以快速的學習到新的知識。最后,感謝同學在課程設計中給予我的幫助。讓我從中感受到了軟件開發(fā)時團隊的力量以及重要性。參 考 文 獻1 陳運. 信息論與編碼 M. 北京:電子工業(yè)出版社,2011.2 姚領田.精通MFC程序設計 M. 北京:人民郵電出版社,2006.附 錄源程序清單1 首頁Flash效果代碼:BOOL CMyDlg:OnInitDialog()CDialog:OnInitDialog();/ Add "About." menu it

48、em to system menu./ IDM_ABOUTBOX must be in the system command range.ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL)CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()pS

49、ysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ Set the icon for this dialog. The framework does this automatically/ when the application's main window is not a dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small icon/ TODO: Add extra initialization hereCRect layoutRect; GetClientRect(&layoutRect);

溫馨提示

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

評論

0/150

提交評論