哈弗曼编码课程设计实验报告_第1页
哈弗曼编码课程设计实验报告_第2页
哈弗曼编码课程设计实验报告_第3页
哈弗曼编码课程设计实验报告_第4页
哈弗曼编码课程设计实验报告_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录目录 一 实训要求 2 二 课题分析和设计 2 1 基本需求分析 2 3 2 对应的类 3 4 5 三 主要功能界面 5 1 主界面 5 2 读取文章并对字符编码 5 3 哈弗曼编码信息 6 4 文章编码 6 5 文章译码 6 6 错误处理 7 四 总结 课设心得体会 7 五 附录 主要函数代码 7 14 一 实训要求一 实训要求 1 输入为 一段中文或英文的文章的文件名 2 读取文章的字符信息 3 对字符进行权值的计算 4 根据权值构造哈弗曼树 5 生成对应的编码 6 输出为 原文章的编译 译文 7 根据已经生成的编码表 输入任意的译文可以得到原文 二 课题分析和设计二 课题分析和设计 1 基本需求分析 基本需求分析 1 在通信过程中 为了提高信道利用率 缩短信息传输时间降低传输成本 需要一 编译码器 2 此哈弗曼编码译码器应具有编码译码的双向功能 即在发送端通过编码系统对传 入的数据进行编码 3 在接收端将数据译码 将具有两项功能的编码译码器用于双工信道就可满足 双 工信道的双向编译功能 4 输入某段报文是 系统将自己完成编译输出 5 程序设计流程 程序设计流程 文字表述 开始进入功能选择界面 包含五种操作 1 读取文章并对字符编码 2 哈夫曼编码信息 3 文章编码 4 文章译码 5 退出程序 操作 1 给定一篇文章 统计字符出现的概率 并根据概率建立哈弗曼树 并利用哈弗曼 树对字符进哈夫曼编码 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 pname 字符名 int num 字符出现的次数 double lweight 字符的权值 Name num 0 lweight 0 Name 定义字符总类总数和存储信息 class GetName 关于字符类 public char file name max2 文件名 int n 字符的种类 int sum 字符的总数 Name letter max1 存储字符信息的类的数组 GetName sum 0 n 0 定义编码类 class CodeNode 编码类 public char ch 存储字符 char save code max1 存储编码 主要功能实现类 class Function public GetName L int fn 定义哈夫曼数组大小 Element HuffmanT max3 哈夫曼数组 CodeNode Code max1 字符编码数组 Function fn 0 3 主要功能界面 主要功能界面 1 主界面 2 读取文章并对字符编码 3 哈弗曼编码信息 4 文章编码 5 文章译码 6 错误处理 4 总结 课设心得体会 总结 课设心得体会 三周的课程设计结束了 在这次的课程设计中不仅检验了我所学习的知识 也培养了我如 何去把握一件事情 如何去做一件事情 又如何完成一件事情 在设计过程中 与同学分 工设计 和同学们相互探讨 相互学习 相互监督 学会了合作 学会了运筹帷幄 学会 了宽容 学会了理解 也学会了做人与处世 课程设计是我们专业课程知识综合应用的实 践训练 着是我们迈向社会 从事职业工作前一个必不少的过程 千里之行始于足下 通过这次课程设计 我深深体会到这句千古名言的真正含义 我今天认真的进行课程设计 学会脚踏实地迈开这一步 就是为明天能稳健地在社会大潮中奔跑打下坚实的基础 通过 这次课程设计 本人在多方面都有所提高 在这次设计过程中 体现出自己单独设计模具 的能力以及综合运用知识的能力 体会了学以致用 突出自己劳动成果的喜悦心情 从中 发现自己平时学习的不足和薄弱环节 从而加以弥补 六 六 附录 源代码 附录 源代码 include include include include define max1 150 define max2 50 define max3 256 using 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 code max1 存储编码 class Name 字符类 public char pname 字符名 int num 字符出现的次数 double lweight 字符的权值 Name num 0 lweight 0 Name class GetName 关于字符类 public char file name max2 文件名 int n 字符的种类 int sum 字符的总数 Name letter max1 存储字符信息的类的数组 GetName sum 0 n 0 void GetWeight 得到字符的权值 for int i 0 i n i letter i lweight double letter i 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 letter 0 pname ch letter 0 num sum while input eof 读取文件中的所有字符 int tag 0 ch input get for int i 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 得到字符权值 class Function public GetName L int fn 定义哈夫曼数组大小 Element HuffmanT max3 哈夫曼数组 CodeNode Code max1 字符编码数组 Function fn 0 void CharHuffmanTCoding 编码功能实现 int i f c char cd new char L n 1 暂时存储编码的数组 int start 编码读取起始位置 cd L n 0 for i 0 i 0 if HuffmanT f lchild c 如果为左孩子 为 0 cd start 0 else 如果为右孩子 为 1 cd start 1 c f strcpy Code i save code 将结果存入对应的编码数组中 void OutputHuffmanTCode cout 哈夫曼编码 endl cout endl cout 字符 t t 哈夫曼编码 endl for int i 0 i L n i 输出字符 哈夫曼编码 cout endl cout HuffmanT i name t t cout Code i 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 HuffmanT i name L letter i pname HuffmanT i weight L letter i lweight void Select 2Min int m int double m1 m2 m1 m2 1 p1 p2 1 for i 0 i m i if HuffmanT i parent 1 p2 p1 m1 HuffmanT i weight p1 i else if HuffmanT i parent 1 p2 i void CreatHT 建立哈夫曼树 核心 int i 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 int 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 Code i ch ch cout Code i save code cout endl input close int SaveArticleCode 保存文章编码 ofstream output ifstream input char namef1 max2 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 Code i ch ch for int j 0 j strlen Code i save code j output put Code i save code j input close output close cout 保存完毕 endl int OutTransCode 文章译码操作 ifstream input char namef max2 cout 请输入保存文章编码的文件名 namef input open namef if input fail cout 该文件不存在 0 c HuffmanT c lchild if HuffmanT c lchild 1 判断是否到叶子 cout 0 c HuffmanT c rchild if HuffmanT c rchild 1 判断是否到叶子 cout HuffmanT c name 输出字符 c 2 L n 2 返回根节点 ch input get cout endl input close int SaveTransCode 保存文章译码 ofstream output ifstream input char namef max2 char namef1 max2 cout 请输入文章编码所在的文件名 namef input open namef if input fail cout 该文件不存在 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 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 int main Function a new Function while 1 主界面显示 cout endl cout 欢迎进入编 译码系统 endl cout endl cout endl cout 功能如下 endl cout 1 读取文章并对字符编码 endl cout 2 哈夫曼编码信息 endl cout 3 文章编码 endl cout 4 文章译码 endl cout 5 退出程序 endl cout endl char ch cout 请选择功能 cin ch switch ch case 1 读取文章并对字符编码 delete a a new Function system cls a CreatHT a CharHuffmanTCoding cout 操作完毕 OutputHuffmanTCode system pause system cls break case 3 文章编码 system cls while 1 cout endl cout 1 显示文章编码 endl cout 2 保存文章编码 endl cout 3 返回上一界面 endl char ch1 cout endl 请选择功能 cin ch1 switch ch1 case 1 显示文章编码 system cls a OutArticleCode system pau

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论