




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.(1) .(1) .(2) (2) .(3) .(3) (4) (4) .(5) .(5) (5) .(6) .(6) .(6) .(7)目录一、系统开发的背景 二、系统分析与设计 三、系统的设计与实现 (一)设计初始化( Initialization ) (二)设计编码( Encoding )(三)设计译码( Decoding)(四)设计印代码文件( Print )(五)设计印哈夫曼树( TreePrinting )四、系统测试 (一)测试 main 函数 (二)测试编码(Encoding)及译码(Decoding)函数(三)测试印代码文件( Print )函数 (四)测试相关的根目录 五
2、、总结 六、附件(代码、部分图表) 哈夫曼编 / 译码器系统、系统开发的背景为了提高信道利用率,缩短信息传输时间,降低传输成本,且在信息发送端通过一个编码系统对待传数据预先编码,在信息接收端将传来的数据进行译码复原),因此设计哈夫曼编码 / 译码器系统。二、系统分析与设计一)系统功能要求:任务要求】I :初始化(Initialization)。从终端读入字符集大小n,以及n个字符和n个 权值,建立哈夫曼树,并将它存于文件 hfmTree 中。E:编码(Encoding )。利用以建好的哈夫曼树(如不在内存,则从文件hfmTree中读入),对文件 To Be Tran 中的正文进行编码,然后将结
3、果存入文件 CodeFile中。D:译码(Decoding)。利用已建好的哈夫曼树将文件 CodeFile中的代码进行译码,结果存入文件 Text File 中。P:印代码文件(Print )。将文件Code File以紧凑格式显示在终端上,每行50个代码。同时将此字符形式的编码文件写入文件 Code Prin 中。TreeT:印哈夫曼树(Tree Printing )。将已在内存中的哈夫曼树以直观的方式(树 或凹入表形式)显示在终端上,同时将此字符形式的哈夫曼树写入文件Print 中。测试数据】 利用教科书中的数据调试程序。用下表给出的字符集和频度的实际统计数据建立哈夫曼树,并实现以下报文的
4、编 码和译码:“ THIS P ROGRAM IS MY FAVORITE”。字符ABCDEFGHIJKLM频度1866413223210321154757153220字符NOPQRSTUVWXYZ频度5763151485180238181161(二)系统模块结构设计通过对系统功能的分析,哈夫曼编码/译码器系统功能如图1所示。图1哈夫曼编码/译码器系统功能图通过上图的功能分析,把整个系统划分为 5个模块:1、初始化(Initialization),该模块主要实现:初始化要编辑的语句,然后语句里面有个调用输入编码的语句len=I np utCode();2、编码(Encoding),该模块主要实
5、现:void Encoding();3、译码(In codi ng),该模块主要实现:void Decod in g();4、印代码文件(Print ),该模块主要实现:由函数 void Code_printing()5 、印哈夫曼树( TreePrinting ),该模块主要实现: coprint(p,HT);、系统的设计与实现和函数 void Code_printing1()实现。一) 初始化( Initialization),该模块主要实现void Initialization() int a,k,flag,len;a=0;len=InputCode();for(i=0;i<len
6、;i+)k=0;flag=1;coui-a.data=stri;coui-a.count=1;while(i>k)if(stri=strk)a+; flag=0;k+;if(flag=0)break;if(flag)for(j=i+1;j<len;j+)if(stri=strj)+coui-a.count;n=len-a;for(i=0;i<n;i+)printf("%d%d ",i,coui.data);printf("%d%dn",i,coui.count);for(i=0;i<=n;i+)*(z+i)=coui.data;*
7、(w+i)=coui.count;二) 编码( Encoding ),该模块主要实现void Encoding()char *tran;i=99;tran=(char*)malloc(100*sizeof(char); while(i=99)if(fgets(tran,100,tobetran)=NULL)printf(" 不能打开文件 n"); break;for(i=0;*(tran+i)!='0'i+)for(j=0;j<=n;j+)if(*(z+j-1)=*(tran+i)fputs(HCj,codefile);if(j>n)字符错误,无
8、法编码 !n");printf("break;译码( Decoding ),该模块主要实现void Decoding() char *work,*work2,i2;int i4=0,i,i3;unsigned long length=10000; work=(char*)malloc(length*sizeof(char); fgets(work,length,codef);work2=(char*)malloc(length*sizeof(char); i3=2*n-1;for(i=0;*(work+i-1)!='0'i+)i2=*(work+i);if(
9、HTi3.lchild=0) *(work2+i4)=*(z+i3-1); i4+; i3=2*n-1;i-;else if(i2='0') i3=HTi3.lchild;else if(i2='1') i3=HTi3.rchild;四)印代码文件( Print ),该模块主要实现void Code_printing1() char *work5;work5=(char*)malloc(51*sizeof(char);do不能读取文件 n"); if(fgets(work5,51,txtfile)=NULL) printf(" break;f
10、puts(work5,CodePrin1);puts(work5);while(strlen(work5)=50);free(work5);五)印哈夫曼树( TreePrinting ),该模块主要实现void Tree_printing(HuffmanTree HT,int w) HuffmanTree p; p=HT+w;printf(" 下面打印哈夫曼树 n"); coprint(p,HT);printf(" 打印工作结束 n");四、系统测试一) 测试 main 函数(二)测试编码(Encoding )及译码(Decoding)函数欢迎使用哈夫曼
11、编码译码系统ip初印:香哈夫曼§ S1化码初印"编 码 d、诵码 * -印哈夫4狼岀 *请先初始化哈夫i铀裘亠输入,i'd下面对根目录下文件codefile .中的字符进彳亍译玛译码完成內容写.扎根g录下的文件匕t F i g -1M中(二)测试印代码文件(Print )函数(四)相关的根目录文件阴骗辑(E)搭式®査看3帮助00THIS PROGRAJZ IE M¥ FAVORATE知F”赛gc至氏in至音糜肋如100011 LOCI 001L01001 ouioQooO'i OLiiiiioooooiiLiooiioioLoaooiio
12、iooioiLOOLiiiioLooaio:jiiooiiio:ic(iciDiiioooiioi五、总结系统完成的功能:本程序完成的功能是可以在信息发送端通过一个编码系统对待传数据预先编码,在信息接收端将传来的数据进行译码(复原)。系统的不足:本次课程设计,我认为还有很多不足,比如说不能把一个随机输入的字符串中不同字符作为叶子结点元素, 把其在该字符串中出现的次数作为 权值构造一个赫夫曼树,并得到各个叶子结点的赫夫曼编码和整个输入的字符串的赫夫曼编码,还有不能够顺利按题目要求写出相应的文件,将编码存储在tex文件中。我的收获是:通过本次实验,提高了自已调试程序的能力,充分体会到了在 程序执行
13、时的提示性输出的重要性,编写程序的时候,应先写出算法,再写程序,一段一段调试;此外,学编程一定要亲自动手,实践是检验真理正确性的唯一标 准,不能眼高手低,还要学会归纳,发现编程的捷径,想着用更高效的方法去完 成一个个任务。六、附件(代码、部分图表)#include<stdio.h> #include <string.h> #include <malloc.h> #include <stdlib.h> const int UINT_MAX=1000; char str50;typedef structint weight,K;int parent,
14、lchild,rchild; HTNode,* HuffmanTree; typedef char *HuffmanCode; HuffmanTree HT; HuffmanCode HC; int w50,i,j,n; char z50; int flag=0;int numb=0;struct cou char data; int count;cou50;int min(HuffmanTree t,int i) int j,flag;int k=UINT_MAX; for(j=1;j<=i;j+)if(tj.weight<k&&tj.parent=0) k=tj
15、.weight,flag=j;tflag.parent=1;return flag;void select(HuffmanTree t,int i,int &s1,int &s2) int j; s1=min(t,i);s2=min(t,i);if(s1>s2)j=s1; s1=s2;s2=j;void HuffmanCoding(HuffmanTree &HT,HuffmanCode &HC,int *w,int n) int m,i,s1,s2,start;int c,f;HuffmanTree p; char *cd; if(n<=1) ret
16、urn; m=2*n-1;HT=(HuffmanTree)malloc(m+1)*sizeof(HTNode); for(p=HT+1,i=1;i<=n;+i,+p,+w)p->weight=*w; p->parent=0; p->lchild=0; p->rchild=0; for(;i<=m;+i,+p) p->parent=0; for(i=n+1;i<=m;+i) select(HT,i-1,s1,s2);HTs1.parent=HTs2.parent=i;HTi.lchild=s1;HTi.rchild=s2;HTi.weight=HT
17、s1.weight+HTs2.weight;HC=(HuffmanCode)malloc(n+1)*sizeof(char*); cd=(char*)malloc(n*sizeof(char);cdn-1='0'for(i=1;i<=n;i+)start=n-1;for(c=i,f=HTi.parent;f!=0;c=f,f=HTf.parent)if(HTf.lchild=c)cd-start='0'elsecd-start='1'HCi=(char*)malloc(n-start)*sizeof(char); strcpy(HCi,&a
18、mp;cdstart); free(cd);int InputCode()FILE *tobetran;if(tobetran=fopen("tobetran.txt","w")=NULL) printf(" 不能打开文件 n"); return 0;printf(" 请输入你想要编码的字符 n"); gets(str);fputs(str,tobetran); printf(" 获取报文成功 n"); fclose(tobetran); return strlen(str);void Init
19、ialization() int a,k,flag,len;a=0; len=InputCode(); for(i=0;i<len;i+) k=0;flag=1;coui-a.data=stri; coui-a.count=1;while(i>k) if(stri=strk)a+; flag=0;k+;if(flag=0) break; if(flag)for(j=i+1;j<len;j+)if(stri=strj)+coui-a.count;n=len-a;for(i=0;i<n;i+)printf("%d%d ",i,coui.data); pr
20、intf("%d%dn",i,coui.count);for(i=0;i<=n;i+)*(z+i)=coui.data;*(w+i)=coui.count;HuffmanCoding(HT,HC,w,n); printf(" 字符对应的编码为 :n");for(i=1;i<=n;i+)puts(HCi);nn");printf(" 下面将哈夫曼编码写入文件 nFILE *htmTree;char r=' ','0'if(htmTree=fopen("htmTree.txt"
21、;,"w")=NULL)printf("can not open filen"); return;fputs(z,htmTree);for(i=0;i<n+1;i+)fprintf(htmTree,"%6d",*(w+i);fputs(r,htmTree);for(i=1;i<=n;i+)fputs(HCi,htmTree);fputs(r,htmTree);fclose(htmTree);printf(" 已将字符与对应编码写入根目录下文件 htmTree.txt 中 nn");void Encodi
22、ng()printf(" 下面对目录下文件 tobetran.txt 中的字符进行编码 n"); FILE *tobetran,*codefile;if(tobetran=fopen("tobetran.txt","rb")=NULL)printf(" 不能打开文件 n");if(codefile=fopen("codefile.txt","wb")=NULL)printf(" 不能打开文件 n");char *tran;i=99;tran=(char*)
23、malloc(100*sizeof(char); while(i=99)if(fgets(tran,100,tobetran)=NULL)printf(" 不能打开文件 n");break;for(i=0;*(tran+i)!='0'i+)for(j=0;j<=n;j+)if(*(z+j-1)=*(tran+i)fputs(HCj,codefile);if(j>n)printf(" 字符错误,无法编码 !n"); break;nn 编码写入目录下的 codefile.txt 中 nn");printf("
24、编码工作完成 fclose(tobetran); fclose(codefile); free(tran);void Decoding()printf(" 下面对根目录下文件 codefile.txt 中的字符进行译码 n"); FILE *codef,*txtfile;if(txtfile=fopen("txtfile.txt","w")=NULL)printf(" 不能打开文件 n");if (codef=fopen("codefile.txt","r")=NULL)pr
25、intf(" 不能打开文件 n");char *work,*work2,i2;int i4=0,i,i3;unsigned long length=10000; work=(char*)malloc(length*sizeof(char);fgets(work,length,codef); work2=(char*)malloc(length*sizeof(char); i3=2*n-1;for(i=0;*(work+i-1)!='0'i+)i2=*(work+i);if(HTi3.lchild=0)*(work2+i4)=*(z+i3-1);i4+;i3=
26、2*n-1;i-;else if(i2='0') i3=HTi3.lchild;else if(i2='1') i3=HTi3.rchild;*(work2+i4)='0'fputs(work2,txtfile);printf(" 译码完成 n 内容写入根目录下的文件 txtfile.txt 中 nn"); free(work);free(work2);fclose(txtfile);fclose(codef);void Code_printing()printf(" 下面打印根目录下文件 CodePrin.txt
27、中编码字符 n"); FILE * CodePrin,* codefile;if(CodePrin=fopen("CodePrin.txt","w")=NULL) printf(" 不能打开文件 n");return;if(codefile=fopen("codefile.txt","r")=NULL)printf(" 不能打开文件 n");return;char *work3;work3=(char*)malloc(51*sizeof(char); doif(fg
28、ets(work3,51,codefile)=NULL)printf(" 不能读取文件 n");break;fputs(work3,CodePrin);puts(work3);while(strlen(work3)=50);free(work3);printf(" 打印工作结束 nn"); fclose(CodePrin); fclose(codefile);void Code_printing1()printf(" 下面打印根目录下文件 txtfile.txt 中译码字符 n"); FILE * CodePrin1,* txtfil
29、e;if(CodePrin1=fopen("CodePrin1.txt","w")=NULL)printf(" 不能打开文件 n");return;if(txtfile=fopen("txtfile.txt","r")=NULL)printf(" 不能打开文件 n");return; char *work5;work5=(char*)malloc(51*sizeof(char); doif(fgets(work5,51,txtfile)=NULL)printf("
30、不能读取文件 n");break;fputs(work5,CodePrin1);puts(work5); while(strlen(work5)=50); free(work5); printf(" 打印工作结束 "); fclose(CodePrin1); fclose(txtfile);void coprint(HuffmanTree start,HuffmanTree HT)if(start!=HT)FILE * TreePrint;创建文件失败 n");if(TreePrint=fopen("TreePrint.txt","a"
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 45362-2025纺织品织物蓄热系数的测定改型平面瞬态热源法
- GB/T 31128-2025毛巾产品毛圈钩拉力测试与评价
- 对痔疮患者的健康教育
- 安全教育家长会
- 音乐欣赏与表演技巧社团工作计划
- 水利工程的后期维护与管理计划
- 幼儿园学期班级活动安排计划
- 金融机构的安全风险管理措施计划
- 水务基础设施的长效维护计划
- 2024年高中地理旅游与文化相结合研究试题及答案
- 湖北省部分名校2024-2025学年高二下学期3月联考物理试卷(A)(原卷版+解析版)
- 第5课+光色交汇+课件-2024-2025学年浙人美版(2024)初中美术七年级下册
- (2025)政工职称考试题库(附参考答案)
- 临沂考科目一试题及答案
- 2025年初级等保测评试题及答案
- 2025年全国中小学生安全知识竞赛参考试题库500题(含答案)
- DB11∕T493.1-2024道路交通管理设施设置规范 第1部分:道路交通标志
- 教师如何使用AI开展教学DeepSeek使用指南人工智能 课件
- 2025新人教版七年级下语文-4.16《有为有不为》教案教学设计
- (二调)武汉市2025届高中毕业生二月调研考试 生物试卷(含标准答案)
- 2025年宁夏建设职业技术学院单招职业倾向性测试题库一套
评论
0/150
提交评论