哈弗曼編碼教學(xué)規(guī)劃實(shí)驗(yàn)報告_第1頁
哈弗曼編碼教學(xué)規(guī)劃實(shí)驗(yàn)報告_第2頁
哈弗曼編碼教學(xué)規(guī)劃實(shí)驗(yàn)報告_第3頁
哈弗曼編碼教學(xué)規(guī)劃實(shí)驗(yàn)報告_第4頁
哈弗曼編碼教學(xué)規(guī)劃實(shí)驗(yàn)報告_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

_目錄一、實(shí)訓(xùn)要求……………..2謝謝閱讀二、課題分析和設(shè)計……………………..2謝謝閱讀1、基本需求分析……………………2,3精品文檔放心下載2、對應(yīng)的類………………................3,4,5謝謝閱讀三、主要功能界面………………………...5感謝閱讀1、主界面……………5謝謝閱讀2、讀取文章并對字符編碼…………5感謝閱讀3、哈弗曼編碼信息………………….6感謝閱讀4、文章編碼………….6精品文檔放心下載5、文章譯碼………….6感謝閱讀6、錯誤處理………….7感謝閱讀四、總結(jié)(課設(shè)心得體會)………………7謝謝閱讀五、附錄(主要函數(shù)代碼)………………7~14精品文檔放心下載__一、實(shí)訓(xùn)要求1、輸入為:一段中文或英文的文章的文件名。2、讀取文章的字符信息。3、對字符進(jìn)行權(quán)值的計算。4、根據(jù)權(quán)值構(gòu)造哈弗曼樹。5、生成對應(yīng)的編碼。6、輸出為:原文章的編譯(譯文)。7、根據(jù)已經(jīng)生成的編碼表,輸入任意的譯文可以得到原文。精品文檔放心下載二、課題分析和設(shè)計1.基本需求分析:(1)在通信過程中,為了提高信道利用率,縮短信息傳輸時間降低傳輸成本,需要一謝謝閱讀編譯碼器。(2)此哈弗曼編碼譯碼器應(yīng)具有編碼譯碼的雙向功能,即在發(fā)送端通過編碼系統(tǒng)對傳謝謝閱讀入的數(shù)據(jù)進(jìn)行編碼。(3)在接收端將數(shù)據(jù)譯碼,將具有兩項(xiàng)功能的編碼譯碼器用于雙工信道就可滿足,雙謝謝閱讀工信道的雙向編譯功能。(4)輸入某段報文是,系統(tǒng)將自己完成編譯輸出。(5)、程序設(shè)計流程:<1>文字表述:_開始進(jìn)入功能選擇界面,包含五種操作(1)讀取文章并對字符編碼。(2)哈夫曼編碼信息。(3)文章編碼。(4)文章譯碼。(5)退出程序。<2>操作:(1)給定一篇文章,統(tǒng)計字符出現(xiàn)的概率,并根據(jù)概率建立哈弗曼樹,并利用哈弗曼精品文檔放心下載樹對字符進(jìn)哈夫曼編碼。(2)顯示哈弗曼編碼信息,包括字符和其哈弗曼編碼。(3)對文章進(jìn)行譯碼,顯示譯碼信息,并保存。(4)對文章進(jìn)行譯碼,顯示并保存。<3>流程圖:程序開始_程序主界面讀取文章并對哈夫曼編碼信文章編碼文章譯碼退出程序文章進(jìn)行編碼息顯示編碼

保存編碼

返回主界面

顯示譯碼

保存譯碼

返回主界面_2、對應(yīng)的類:<1>定義類:classElement //結(jié)點(diǎn)類{public:charname;//字符名intweight;//字符權(quán)值intlchild;//左孩子intrchild;//右孩子intparent;//父結(jié)點(diǎn)Element(){weight=0;lchild=-1;rchild=-1;parent=-1;}~Element(){}};_<2>定義字符和出現(xiàn)的次數(shù):className //字符類{public:charpname;//字符名intnum;//字符出現(xiàn)的次數(shù)doublelweight;//字符的權(quán)值Name(){num=0;lweight=0;}~Name(){}};<3>定義字符總類總數(shù)和存儲信息:classGetName//關(guān)于字符類{public:charfile_name[max2];//文件名精品文檔放心下載intn;//字符的種類_intsum;//字符的總數(shù)Nameletter[max1];//存儲字符信息的類的數(shù)組謝謝閱讀GetName(){sum=0;n=0;}};<4>定義編碼類:classCodeNode//編碼類{public:charch;//存儲字符charsave_code[max1];//存儲編碼感謝閱讀};<5>主要功能實(shí)現(xiàn)類:classFunction{public:_GetNameL;intfn;//定義哈夫曼數(shù)組大小ElementHuffmanT[max3];//哈夫曼數(shù)組感謝閱讀CodeNodeCode[max1];//字符編碼數(shù)組精品文檔放心下載Function(){fn=0;}};三、主要功能界面:1、主界面:2、讀取文章并對字符編碼:_3、哈弗曼編碼信息:4、文章編碼:_5、文章譯碼:6、錯誤處理:四、總結(jié)(課設(shè)心得體會):三周的課程設(shè)計結(jié)束了,在這次的課程設(shè)計中不僅檢驗(yàn)了我所學(xué)習(xí)的知識,也培養(yǎng)了我如何精品文檔放心下載_去把握一件事情,如何去做一件事情,又如何完成一件事情。在設(shè)計過程中,與同學(xué)分工設(shè)感謝閱讀計,和同學(xué)們相互探討,相互學(xué)習(xí),相互監(jiān)督。學(xué)會了合作,學(xué)會了運(yùn)籌帷幄,學(xué)會了寬容,謝謝閱讀學(xué)會了理解,也學(xué)會了做人與處世。課程設(shè)計是我們專業(yè)課程知識綜合應(yīng)用的實(shí)踐訓(xùn)練,精品文檔放心下載著是我們邁向社會,從事職業(yè)工作前一個必不少的過程.”千里之行始于足下”,通過這次精品文檔放心下載課程設(shè)計,我深深體會到這句千古名言的真正含義.我今天認(rèn)真的進(jìn)行課程設(shè)計,學(xué)會腳踏謝謝閱讀實(shí)地邁開這一步,就是為明天能穩(wěn)健地在社會大潮中奔跑打下堅(jiān)實(shí)的基礎(chǔ).通過這次課程設(shè)感謝閱讀計,本人在多方面都有所提高。在這次設(shè)計過程中,體現(xiàn)出自己單獨(dú)設(shè)計模具的能力以及綜精品文檔放心下載合運(yùn)用知識的能力,體會了學(xué)以致用、突出自己勞動成果的喜悅心情,從中發(fā)現(xiàn)自己平時學(xué)謝謝閱讀習(xí)的不足和薄弱環(huán)節(jié),從而加以彌補(bǔ)。六、附錄(源代碼):#include<iostream>#include<fstream>#include<string.h>#include<windows.h>#definemax1150#definemax250#definemax3256usingnamespacestd;_classElement //結(jié)點(diǎn)類{public:charname;//字符名intweight;//字符權(quán)值intlchild;//左孩子intrchild;//右孩子intparent;//父結(jié)點(diǎn)Element(){weight=0;lchild=-1;rchild=-1;parent=-1;}~Element(){}};classCodeNode//編碼類{public:_charch;//存儲字符charsave_code[max1];//存儲編碼謝謝閱讀};className //字符類{public:charpname;//字符名intnum;//字符出現(xiàn)的次數(shù)doublelweight;//字符的權(quán)值Name(){num=0;lweight=0;}~Name(){}};classGetName//關(guān)于字符類{public:charfile_name[max2];//文件名感謝閱讀_intn;//字符的種類intsum;//字符的總數(shù)Nameletter[max1];//存儲字符信息的類的數(shù)組謝謝閱讀GetName(){sum=0;n=0;}voidGetWeight()//得到字符的權(quán)值{for(inti=0;i<n;i++)精品文檔放心下載{letter[i].lweight=(double)letter[i].num/sum;//出現(xiàn)的次數(shù)除總數(shù)得到謝謝閱讀權(quán)值}}intReadLetter(){ifstreaminput;cout<<"請輸入文件名:"<<endl;精品文檔放心下載_cin>>file_name;input.open(file_name);//打開文件精品文檔放心下載if(input.fail()){cout<<"該文件不存在!"<<endl;精品文檔放心下載return0;}charch;ch=input.get();letter[0].pname=ch;letter[0].num++;sum++;while(!input.eof())//讀取文件中的所有字符精品文檔放心下載{inttag=0;ch=input.get();for(inti=0;i<n+1;i++)謝謝閱讀{if(letter[i].pname==ch)精品文檔放心下載{letter[i].num++;sum++;_tag=1;}}if(tag==0){n++;letter[n].pname=ch;letter[n].num++;sum++;}}sum--;input.close();GetWeight();//得到字符權(quán)值}};classFunction{public:GetNameL;intfn;//定義哈夫曼數(shù)組大小_ElementHuffmanT[max3];//哈夫曼數(shù)組謝謝閱讀CodeNodeCode[max1];//字符編碼數(shù)組感謝閱讀Function(){fn=0;}voidCharHuffmanTCoding()//編碼功能實(shí)現(xiàn)感謝閱讀{inti,f,c;char*cd=newchar[L.n+1];//暫時存儲編碼的數(shù)組謝謝閱讀intstart;//編碼讀取起始位置cd[L.n]='\0';for(i=0;i<L.n;i++){Code[i].ch=HuffmanT[i].name;//字符信息精品文檔放心下載start=L.n;//起始位置c=i;while((f=HuffmanT[c].parent)>=0)精品文檔放心下載{if(HuffmanT[f].lchild==c)//如果為左孩子,為‘0’精品文檔放心下載{cd[--start]='0';_}else//如果為右孩子,為‘1’{cd[--start]='1';}c=f;}strcpy(Code[i].save_code,&cd[start]);//將結(jié)果存入對應(yīng)的編碼數(shù)組中謝謝閱讀}}voidOutputHuffmanTCode(){cout<<"哈夫曼編碼:"<<endl;cout<<"——————————————————————"<<endl;精品文檔放心下載cout<<"字符\t\t哈夫曼編碼"<<endl;感謝閱讀for(inti=0;i<L.n;i++)//輸出字符,哈夫曼編碼感謝閱讀{cout<<"——————————————————————"<<endl;謝謝閱讀cout<<HuffmanT[i].name<<"\t"<<"\t";感謝閱讀cout<<Code[i].save_code;感謝閱讀cout<<endl;}_cout<<"——————————————————————"<<endl;謝謝閱讀}voidInitHT()//哈夫曼初始化{L.ReadLetter();fn=(L.n)*2-1;for(inti=0;i<fn;i++)精品文檔放心下載{if(i<L.n){HuffmanT[i].name=L.letter[i].pname;感謝閱讀HuffmanT[i].weight=L.letter[i].lweight;精品文檔放心下載}}}voidSelect_2Min(intm,int&p1,int&p2)//選擇最小的兩個節(jié)點(diǎn)感謝閱讀{inti;doublem1,m2;m1=m2=1;p1=p2=-1;for(i=0;i<m;i++)_{if(HuffmanT[i].parent==-1&&HuffmanT[i].weight<m1)//找出未訪感謝閱讀問過的權(quán)值最小節(jié)點(diǎn){m2=m1;p2=p1;m1=HuffmanT[i].weight;p1=i;}elseif(HuffmanT[i].parent==-1&&HuffmanT[i].weight<m2)//找出精品文檔放心下載未訪問過的權(quán)值第二小結(jié)點(diǎn){m2=HuffmanT[i].weight;p2=i;}}}voidCreatHT()//建立哈夫曼樹//核心謝謝閱讀{inti,p1,p2;InitHT();for(i=L.n;i<fn;i++)精品文檔放心下載_{Select_2Min(i,p1,p2);HuffmanT[p1].parent=HuffmanT[p2].parent=i;精品文檔放心下載HuffmanT[i].weight=HuffmanT[p1].weight+HuffmanT[p2].weight;謝謝閱讀HuffmanT[i].lchild=p1;HuffmanT[i].rchild=p2;}}intOutArticleCode()//顯示文章編碼謝謝閱讀{ifstreaminput;input.open(L.file_name);if(input.fail()){cout<<"文件不存在!"<<endl;return0;}charch;cout<<"文章編碼如下:"<<endl;精品文檔放心下載while(!input.eof()){ch=input.get();_for(inti=0;i<L.n;i++)謝謝閱讀{if(Code[i].ch==ch)cout<<Code[i].save_code;謝謝閱讀}}cout<<endl;input.close();}intSaveArticleCode()//保存文章編碼謝謝閱讀{ofstreamoutput;ifstreaminput;charnamef1[max2];input.open(L.file_name);if(input.fail()){cout<<"該文件不存在!"<<endl;感謝閱讀return0;}cout<<"請輸入保存文章編碼的文件名:"<<endl;感謝閱讀cin>>namef1;_output.open(namef1);charch;while(!input.eof()){ch=input.get();for(inti=0;i<L.n;i++)感謝閱讀{if(Code[i].ch==ch){for(intj=0;j<strlen(Code[i].save_code);j++)謝謝閱讀{output.put(Code[i].save_code[j]);謝謝閱讀}}}}input.close();output.close();cout<<"保存完畢!"<<endl;}intOutTransCode()//文章譯碼操作謝謝閱讀{_ifstreaminput;charnamef[max2];cout<<"請輸入保存文章編碼的文件名:"<<endl;感謝閱讀cin>>namef;input.open(namef);if(input.fail()){cout<<"該文件不存在!"<<endl;感謝閱讀return0;}charch;ch=input.get();intc=2*L.n-2;while(!input.eof()){if(ch=='0')//遇0搜索左子樹{if(HuffmanT[c].lchild>=0){謝謝閱讀c=HuffmanT[c].lchild;}if(HuffmanT[c].lchild==-1)//判斷是否到葉子感謝閱讀{_cout<<HuffmanT[c].name;//輸出字符精品文檔放心下載c=2*L.n-2;//返回根節(jié)點(diǎn)}}if(ch=='1')//遇1搜索右子樹{if(HuffmanT[c].rchild>=0)謝謝閱讀{c=HuffmanT[c].rchild;}if(HuffmanT[c].rchild==-1)//判斷是否到葉子感謝閱讀{cout<<HuffmanT[c].name;//輸出字符精品文檔放心下載c=2*L.n-2;//返回根節(jié)點(diǎn)}}ch=input.get();}cout<<endl;input.close();}intSaveTransCode()//保存文章譯碼精品文檔放心下載_{ofstreamoutput;ifstreaminput;charnamef[max2];charnamef1[max2];cout<<"請輸入文章編碼所在的文件名:"<<endl;精品文檔放心下載cin>>namef;input.open(namef);if(input.fail()){cout<<"該文件不存在!"<<endl;謝謝閱讀return0;}cout<<"請輸入保存文章譯碼的文件名:"<<endl;謝謝閱讀cin>>namef1;output.open(namef1);charch;ch=input.get();intc=2*L.n-2;while(!input.eof()){if(ch=='0')_{if(HuffmanT[c].lchild>=0)精品文檔放心下載{c=HuffmanT[c].lchild;}if(HuffmanT[c].lchild==-1)精品文檔放心下載{output.put(HuffmanT[c].name);感謝閱讀c=2*L.n-2;}}if(ch=='1'){if(HuffmanT[c].rchild>=0)精品文檔放心下載{c=HuffmanT[c].rchild;}if(HuffmanT[c].rchild==-1){精品文檔放心下載output.put(HuffmanT[c].name);精品文檔放心下載c=2*L.n-2;}}_ch=input.get();}input.close();output.close();cout<<"保存完畢!"<<endl;}};intmain(){Function*a=newFunction;謝謝閱讀while(1)//主界面顯示{cout<<"************************************"<<endl;精品文檔放心下載cout<<"

*******歡迎進(jìn)入編/譯碼系統(tǒng)**********"<<endl;cout<<"************************************"<<endl;感謝閱讀cout<<endl;cout<<"

*******功能如下:*******************"<<endl;感謝閱讀_cout<<"*******"<<endl;cout<<"*************"<<endl;cout<<"*******************"<<endl;精品文檔放心下載cout<<"*******************"<<endl;精品文檔放心下載cout<<"*******************"<<endl;感謝閱讀cout<<endl;charch;cout<<"====>>請選擇功能:";cin>>ch;switch(ch){case'1'://讀取文章并對字符編碼{

*******1.讀取文章并對字符編碼*******2.哈夫曼編碼信息*******3.文章編碼*******4.文章譯碼*******5.退出程序謝謝閱讀deletea;a=newFunction;system("cls");a->CreatHT();_a->CharHuffmanTCoding();cout<<"操作完畢!"<<endl;system("pause");system("cls");break;}case'2'://哈夫曼編碼信息{system("cls");a->OutputHuffmanTCode();system("pause");system("cls");break;}case'3'://文章編碼{system("cls");while(1){cout<<endl;cout<<"========>>1.顯示文章編碼"<<endl;謝謝閱讀cout<<"========>>2.保存文章編碼"<<endl;精品文檔放心下載_cout<<"========>>3.返回上一界面"<<endl;謝謝閱讀charch1;cout<<endl<<"===>>請選擇功能:";謝謝閱讀cin>>c

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論