字符编码与信息交换实验报告.docx
《字符编码与信息交换实验报告.docx》由会员分享,可在线阅读,更多相关《字符编码与信息交换实验报告.docx(13页珍藏版)》请在冰点文库上搜索。
字符编码与信息交换实验报告
字符编码与信息交换实验报告
实验三实验报告表
实验名称:
字符编码与信息交换学号
姓名
班级:
实验时间:
年月日
实验报告表3-1西文字符显示过程编码记录表
实验报告表3-2汉字显示过程编码记录表
实验报告表3-3不同字体的字型码
信息论与编码实验报告
学院:
计算机与通信工程学院
专业:
计算机科学与技术
班级:
计1203班
学号:
姓名:
xx年12月29日
实验一唯一可译码判别准则
实验目的:
1.进一步熟悉唯一可译码判别准则;
2.掌握C语言字符串处理程序的设计和调试技术。
实验内容:
1.已知:
信源符号数和码字集合C;
2.输入:
任意的一个码,码字的个数和每个具体的码字在运行时从键盘输入;
3.输出:
判决(是唯一可译码/不是唯一可译码);循环(若继续判决则输入1循环判决,否则输入0结束运行)。
实验原理:
根据唯一可译码的判别方法,利用数据结构所学的知识,定义字符串数据类型并利用指针进行编程来实现算法。
算法:
1、考察C中所有的码字,若Wi是Wj的前缀,则将对应的后缀作为一个尾随后缀码放入集合Fi+1中;
2、考察C和Fi俩个集合,若Wi∈C是Wj∈F的前缀或Wi∈F是Wj∈C的前缀,则将相应的后缀作为尾随后缀码放入集合Fi+1中;
3、F=∪Fi即为码C的尾随后缀集合;
4、若F中出现了C中的元素,算法终止,返回假(C不是唯一可译码);否则若F中没有出现新的元素,则返回真。
实验环境及实验文件存档名:
1.实验环境:
visualC++6.0
2.文件名:
weiyikeyi.cpp
实验结果及分析:
1.源代码:
#include
#include
charc[100][50];
charf[300][50];
intN,sum=0;//N为输入码字的个数,sum为尾随后缀集合中码字的个数
intflag;//判断是否唯一可译标志位
voidpatterson(charc[],chard[])//检测尾随后缀
{
inti,j,k;
for(i=0;;i++)
{
if(c[i]=='\0'&&d[i]=='\0')//2字符串一样,跳出
break;
if(c[i]=='\0')//d比c长,将d的尾随后缀放入f中
{
for(j=i;d[j]!
='\0';j++)f[sum][j-i]=d[j];
f[sum][j-i]='\0';
for(k=0;k{
if(strcmp(f[sum],f[k])==0)//查看当前生成的尾随后缀在f集合中是否存在{
sum--;break;
}
}
sum++;
break;
}
if(d[i]=='\0')//c比d长,将c的尾随后缀放入f中
{
for(j=i;c[j]!
='\0';j++)f[sum][j-i]=c[j];
f[sum][j-i]='\0';
for(k=0;k{
if(strcmp(f[sum],f[k])==0)//查看当前生成的尾随后缀在f集合中是否存在{
sum--;break;
}
}
sum++;
break;
}
if(c[i]!
=d[i])//字符不一样了也退出
break;
}
}
voidyima()
{
inti,j;
printf("********唯一可译码判别********\n");
printf("请输入码字的个数:
");//输入码得个数
scanf("%d",&N);
while(N>100)
{
printf("输入码字个数过大,请输入小于100的数\n");
printf("请输入码字的个数:
");
scanf("%d",&N);
}
flag=0;
printf("请分别输入码字:
\n");
for(i=0;i{
scanf("%s",&c[i]);
}
for(i=0;i
for(j=i+1;j{
if(strcmp(c[i],c[j])==0)
{flag=1;break;}
}
if(flag==1)//如果码本身有重复,就可以断定它不是唯一可译码
{
printf("这不是唯一可译码。
\n");
}
else
{
for(i=0;i
for(j=i+1;j{
patterson(c[i],c[j]);
}
}
for(i=0;;i++)//根据原始码与s[i]生成s[i+1]也放入f[i]
{
ints=0;
for(j=0;j
{
if(i==sum)
{s=1;break;}
else
patterson(f[i],c[j]);
}
if(s==1)break;
}
for(i=0;i
for(j=0;j{
if(strcmp(f[i],c[j])==0){
flag=1;
break;
}
}
}
if(flag==1)
{
printf("这不是唯一可译码!
\n");}
else
printf("这是唯一可译码!
\n");}
}
voidmain()
{
intflag=1;
while(flag){
yima();
printf("是否继续判别?
1/0\n");
scanf("%d",&flag);
}
}
2.运行结果
(1)输入0,01,001时:
(2)继续执行,输入1,01,10,1010
实验三实验报告表
实验名称:
字符编码与信息交换学号:
姓名:
班级:
实验时间:
实验报告表3-1西文字符显示过程编码记录表
实验报告表3-2汉字显示过程编码记录表
实验报告表3-3不同字体的字型码
内容仅供参考