ImageVerifierCode 换一换
格式:DOCX , 页数:30 ,大小:130.17KB ,
资源ID:9404841      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9404841.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(哈弗曼编码课程设计实验报告.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

哈弗曼编码课程设计实验报告.docx

1、哈弗曼编码课程设计实验报告一、 实训要求.2二、 课题分析和设计.21、 基本需求分析2,32、 对应的类.3,4,5三、 主要功能界面.51、 主界面52、 读取文章并对字符编码53、 哈弗曼编码信息.64、 文章编码.65、 文章译码.66、 错误处理.7四、 总结(课设心得体会)7五、 附录(主要函数代码)714一、实训要求 1、输入为:一段中文或英文的文章的文件名。 2、读取文章的字符信息。 3、对字符进行权值的计算。 4、根据权值构造哈弗曼树。 5、生成对应的编码。 6、输出为:原文章的编译(译文)。 7、根据已经生成的编码表,输入任意的译文可以得到原文。二、课题分析和设计1.基本需

2、求分析:(1)在通信过程中,为了提高信道利用率,缩短信息传输时间降低传输成本,需要一编译码器。(2)此哈弗曼编码译码器应具有编码译码的双向功能,即在发送端通过编码系统对传入的数据进行编码。(3)在接收端将数据译码,将具有两项功能的编码译码器用于双工信道就可满足,双工信道的双向编译功能。 (4)输入某段报文是,系统将自己完成编译输出。(5)、程序设计流程:文字表述:开始进入功能选择界面,包含五种操作(1)读取文章并对字符编码。(2)哈夫曼编码信息。(3)文章编码。(4)文章译码。(5)退出程序。操作:(1)给定一篇文章,统计字符出现的概率,并根据概率建立哈弗曼树,并利用哈弗曼 树对字符进哈夫曼编

3、码。(2)显示哈弗曼编码信息,包括字符和其哈弗曼编码。(3)对文章进行译码,显示译码信息,并保存。(4)对文章进行译码,显示并保存。流程图:2、对应的类:定义类:class Element /结点类 public: char name;/字符名 int weight;/字符权值 int lchild;/左孩子 int rchild;/右孩子 int parent;/父结点 Element() weight = 0; lchild = -1; rchild = -1; parent =-1; Element();定义字符和出现的次数:class Name /字符类public: char pna

4、me;/字符名 int num;/字符出现的次数 double lweight;/字符的权值 Name() num = 0; lweight = 0; Name();定义字符总类总数和存储信息:class GetName /关于字符类 public: char file_namemax2;/文件名 int n; /字符的种类 int sum; /字符的总数 Name lettermax1; /存储字符信息的类的数组 GetName() sum = 0; n = 0; ;定义编码类:class CodeNode/编码类 public: char ch; /存储字符 char save_codem

5、ax1; /存储编码; 主要功能实现类:class Function public: GetName L; int fn; /定义哈夫曼数组大小 Element HuffmanTmax3; /哈夫曼数组 CodeNode Codemax1; /字符编码数组 Function() fn = 0; ;3、主要功能界面:1、主界面:2、?取文章并?字符?:3、哈弗曼?信息:4、文章?:5、文章?:6、?理:4、?(?心得体?):三周的?程?束了,在?次的?程?中不?了我所?的知?,也培?了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。在?程中,与同?分工?,和同?相互探?,相互?,相互

6、?督。?了合作,?了?帷幄,?了?容,?了理解,也?了做人与?世。 ?程?是我?程知?合?用的?,?是我?向社?,?事?工作前一?必不少的?程.千里之行始于足下,通?次?程?,我深深体?到?句千古名言的真正含?.我今天?真的?行?程?,?踏?地?一步,就是?明天能?健地在社?大潮中奔跑打下?的基?. 通?次?程?,本人在多方面都有所提高。在?次?程中,体?出自己?模具的能力以及?合?用知?的能力,体?了?以致用、突出自己?成果的喜?心情,?中?自己平?的不足和薄弱?,?而加以?。六、 附?(源代?):#include #include #include #include #define max

7、1 150#define max2 50#define max3 256using namespace std;class Element /? public: char name;/字符名 int weight;/字符?值 int lchild;/左孩子 int rchild;/右孩子 int parent;/父? Element() weight = 0; lchild = -1; rchild = -1; parent =-1; Element();class CodeNode/?public: char ch; /存?字符 char save_codemax1; /存?;class N

8、ame /字符?public: char pname;/字符名 int num;/字符出?的次? double lweight;/字符的?值 Name() num = 0; lweight = 0; Name();class GetName /?于字符?public: char file_namemax2;/文件名 int n; /字符的种? int sum; /字符的? Name lettermax1; /存?字符信息的?的? GetName() sum = 0; n = 0; void GetWeight()/得到字符的?值 for (int i = 0; i n; i+) letteri

9、.lweight = (double) letteri.num / sum; /出?的次?除?得到?值 int ReadLetter() ifstream input; cout ?入文件名: file_name; input.open(file_name); /打?文件 if (input.fail() cout ?文件不存在! endl; return 0; char ch; ch = input.get(); letter0.pname = ch; letter0.num+; sum+; while (!input.eof()/?取文件中的所有字符 int tag = 0; ch = i

10、nput.get(); for (int i = 0; i n + 1; i+) if (letteri.pname = ch) letteri.num+; sum+; tag = 1; if (tag = 0) n+; lettern.pname = ch; lettern.num+; sum+; sum-; input.close(); GetWeight(); /得到字符?值 ;class Functionpublic: GetName L; int fn; /定?哈夫曼?大小 Element HuffmanTmax3; /哈夫曼? CodeNode Codemax1; /字符? Fun

11、ction() fn = 0; void CharHuffmanTCoding()/?功能? int i, f, c; char *cd = new char L.n+1; /?存?的? int start; /?取起始位置 cdL.n = 0; for (i = 0; i = 0) if (HuffmanTf.lchild = c)/如果?左孩子,?0 cd-start = 0; else/如果?右孩子,?1 cd-start = 1; c = f; strcpy(Codei.save_code, &cdstart); /?果存入?的?中 void OutputHuffmanTCode()

12、cout 哈夫曼?: endl; cout endl; cout 字符tt哈夫曼? endl; for (int i = 0; i L.n; i+)/?出字符,哈夫曼? cout endl; cout HuffmanTi.name t t; cout Codei.save_code; cout endl; cout endl; void InitHT()/哈夫曼初始化 L.ReadLetter(); fn = (L.n)*2 - 1; for (int i = 0; i fn; i+) if (i L.n) HuffmanTi.name = L.letteri.pname; HuffmanTi

13、.weight = L.letteri.lweight; void Select_2Min(int m, int &p1, int &p2)/?最小的? int i; double m1, m2; m1 = m2 = 1; p1 = p2 = -1; for (i = 0; i m; i+) if (HuffmanTi.parent = -1 & HuffmanTi.weight m1)/找出未?的?值最小? m2 = m1; p2 = p1; m1 = HuffmanTi.weight; p1 = i; else if (HuffmanTi.parent = -1 & HuffmanTi.w

14、eight m2)/找出未?的?值第二小? m2 = HuffmanTi.weight; p2 = i; void CreatHT()/建立哈夫曼?/核心 int i, p1, p2; InitHT(); for (i = L.n; i fn; i+) Select_2Min(i, p1, p2); HuffmanTp1.parent = HuffmanTp2.parent = i; HuffmanTi.weight = HuffmanTp1.weight + HuffmanTp2.weight; HuffmanTi.lchild = p1; HuffmanTi.rchild = p2; in

15、t OutArticleCode()/?示文章? ifstream input; input.open(L.file_name); if (input.fail() cout 文件不存在! endl; return 0; char ch; cout 文章?如下: endl; while (!input.eof() ch = input.get(); for (int i = 0; i L.n; i+) if (Codei.ch = ch) cout Codei.save_code; cout endl; input.close(); int SaveArticleCode()/保存文章? of

16、stream output; ifstream input; char namef1max2; input.open(L.file_name); if (input.fail() cout ?文件不存在! endl; return 0; cout ?入保存文章?的文件名: namef1; output.open(namef1); char ch; while (!input.eof() ch = input.get(); for (int i = 0; i L.n; i+) if (Codei.ch = ch) for (int j = 0; j strlen(Codei.save_code)

17、; j+) output.put(Codei.save_codej); input.close(); output.close(); cout 保存完?! endl; int OutTransCode() /文章?操作 ifstream input; char namefmax2; cout ?入保存文章?的文件名: namef; input.open(namef); if (input.fail() cout ?文件不存在! = 0) c = HuffmanTc.lchild; if (HuffmanTc.lchild = -1)/判?是否到?子 cout = 0) c = HuffmanT

18、c.rchild; if (HuffmanTc.rchild = -1)/判?是否到?子 cout HuffmanTc.name; /?出字符 c = 2 * L.n - 2; /返回根? ch = input.get(); cout endl; input.close(); int SaveTransCode()/保存文章? ofstream output; ifstream input; char namefmax2; char namef1max2; cout ?入文章?所在的文件名: namef; input.open(namef); if (input.fail() cout ?文件

19、不存在! endl; return 0; cout ?入保存文章?的文件名: namef1; output.open(namef1); char ch; ch = input.get(); int c = 2 * L.n - 2; while (!input.eof() if (ch = 0) if (HuffmanTc.lchild = 0) c = HuffmanTc.lchild; if (HuffmanTc.lchild = -1) output.put(HuffmanTc.name); c = 2 * L.n - 2; if (ch = 1) if (HuffmanTc.rchild

20、 = 0) c = HuffmanTc.rchild; if (HuffmanTc.rchild = -1) output.put(HuffmanTc.name); c = 2 * L.n - 2; ch = input.get(); input.close(); output.close(); cout 保存完?! endl; ;int main() Function *a = new Function; while (1) /主界面?示 cout *endl; cout *?迎?入?/?系?*endl; cout *endl; coutendl; cout *功能如下:*endl; cout *1.?取文章并?字符?*endl; cout *2.哈夫曼?信息*endl; cout *3.文章?*endl; cout *4.文章?*endl; cout *5.退出程序*endl; coutendl; char ch; cout ?功能:; cin ch; switch (ch) case 1:/?取文章并?字符? delete a; a = new Function; system(cls); a-CreatHT(); a-CharHuffmanTCoding(); cout 操作完?! endl; system(pause); system(cls);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1