本实验报告详细介绍了香农编码的基本原理及其应用,并通过具体实例阐述了香农编码的实现过程和效果分析。
湖南大学信息科学与工程学院实验报告
**实验名称**: 香农编码
**课程名称**: 信息论与编码
### 实验目的:
1. 进一步熟悉香农编码算法;
2. 掌握C语言程序设计和调试过程中数值的进制转换、数值与字符串之间的转换等技术。
### 实验要求
1. 输入:信源符号个数q,信源的概率分布p。
2. 输出:每个信源符号对应的Shannon编码的码字。
### Shannon编码算法
```plaintext
procedure SHANNON(q, { })
降序排列{ }
for i = 1 to q do
F() // 计算累加概率F()
将累加概率F(十进制小数)变换成二进制小数。
取小数点后的二进制数字作为第i个消息的码字。
end for
end procedure
```
### 调试过程
1. **错误**: fatal error C1083: Cannot open include file: unistd.h: No such file or directory
原因:unistd.h是Unix操作系统下所使用的头文件,Windows环境下不需要。
纠错:删除该行。
2. **错误**:
- error C2144: syntax error : missing ) before type int
- error C2064: term does not evaluate to a function
原因:l_i(int *)calloc(n,sizeof(int)); l_i后缺少赋值符号使之不能通过编译。
纠错:添加上赋值符号。
3. **错误**:
- error C2018: unknown character 0xa1
原因:有不能被识别的字符。
纠错:在错误处将该字符改为符合C语言规范的字符
4. **错误**:
- error C2021: expected exponent value, not
原因:if(fabs(sum-1.0)>DELTA); 这一行中 DELTA 宏定义不正确。
纠错:# define DELTA 0.000001
5. **错误**:
- error C2143: syntax error : missing ; before }
原因:少写了;号。
纠错:在对应位置添加上;号。
参考代码:
```c
#include
#include
#include
#include
#define DELTA 0.000001 //精度
void sort(float *p_i, int n); //排序函数声明
int main(void) {
register int i,j;
int n; //符号个数
float sum,p; //用sum来检验数据,用p来缓存了中间数据
fscanf(stdin,%d,&n);
float *p_i = (float *)calloc(n,sizeof(float)); // 存储信道传输的概率
float *P_i = (float *)calloc(n,sizeof(float));
int *l_i = (int *)calloc(n,sizeof(int));
for(i=0;iDELTA) fprintf(stderr,Invalid input data \n);
else {
fprintf(stdout,Starting…\n\n);
sort (p_i,n); //以降序排列概率
for(i=0;i
优质
本文档为《1操作系统实验报告》,内含对操作系统相关理论知识的应用实践与分析总结,详细记录了实验步骤、结果及心得体会。
华北电力大学 实验报告
实验名称:操作系统实验
课程名称:操作系统综合实验
专业班级:
学生姓名:
学 号:
成 绩:
指导教师:
实验日期:
**实验一**
**一.实验目的**
1. 熟悉操作系统集成环境OS Lab的基本使用方法。
2. 实践编译、调试EOS操作系统内核以及应用程序的方法。
**二.实验内容**
1. 启动OS Lab;
2. 掌握OS Lab的使用技巧:通过编写一个Windows控制台程序,熟悉其基本操作(如新建项目、生成项目及调试等)。
3. EOS内核项目的创建与调试:包括EOS内核项目的各种管理功能的操作方法(如新建、编译和调试) 与 Windows 控制台应用程序的方法一致;
4. 完成EOS应用程序的构建与测试过程;
5. 正确退出OS Lab。
**三.实验内容问题及解答**
1)通过单步调试(逐过程,逐语句),理解在什么情况下应使用“逐过程”和“逐语句”的方式。熟练操作各种调试工具以提高程序开发效率。
优质
本文档为一个典型的白盒测试实验报告示例,详细记录了软件内部结构分析、代码覆盖率评估及缺陷检测过程,适用于学习和参考。
白盒测试的原理是基于对产品内部工作过程的深入了解。通过这种测试方法,可以验证每种内部操作是否符合设计规格要求,并确保所有内部组件都已接受检查。这种方法将被测对象视为透明盒子中的程序结构和处理流程完全可见的状态下进行评估。它依据程序内部逻辑来执行测试,以确认每个路径都能按照预期正确运行。因此,白盒测试又被称为结构测试。
优质
本文档为《软件测试技术实验报告》,包含了对多种软件测试方法和技术的实际操作记录与分析结果,适用于学习和研究软件测试领域的学生及从业人员。
### 黑盒测试问题描述
假设商店内所有商品的价格(R)都不超过100元,并且为整数。如果顾客支付的金额(P)在100元以内,现有一个程序能够在每位顾客付款后给出找零的最佳组合(即找给顾客货币张数最少)。假定该商店内的货币面值包括:50元(M50)、10元(M10)、 5元(M5)和 1元(M1) 四种。
### 白盒测试问题描述
有十个铅球,其中一个为假球(比其他铅球轻)。使用天平三次称量可以找出这个假球。具体步骤如下:
第一次使用天平分别称五个球,判断较轻的一边包含假球;然后从这五颗较轻的中取出四个进行第二次称重,两边各放两个:如果两侧重量相同,则剩下的一个为假球;若两组不同重,则将较轻一组中的任意两个再次比较第三次,其中更轻的那个即为假球。
优质
这份《数字逻辑电路实验报告文档》包含了对多种数字逻辑电路实验的设计、搭建和测试过程的详细记录与分析,旨在帮助学生深入理解数字逻辑电路的工作原理和技术应用。
设计一个具有多种功能的数字钟:
1. 正常计时:此功能包括小时、分钟与秒数显示。采用24进制与时分两种进制级联的方式,其中分钟计数器接收来自秒钟计数器的脉冲信号进行递增,而小时计数器则以分钟为单位更新时间。
2. 校准时钟和清零:通过硬件系统上的按钮或拨动开关实现校时、调分以及重置功能。此操作能够帮助用户调整当前的时间显示或者将所有数值归零重新开始计时。
3. 整点报时:当达到整点钟时刻,设备会发出高频率的声音进行提示;而在接近整点前的59:50至60之间,则每两秒钟产生一次低频声音。其中,用于提醒的时间信号分别为512Hz和1kHz两种不同音调。
4. 闹钟功能:用户可以设置特定时间触发报警器,在设定时间内扬声器会发出响亮的声音来唤醒使用者或提示重要事件的发生;若在一分钟内未取消,则将持续鸣叫直到手动关闭为止。此外,还提供了一个独立的比较模块用于监测实际时间和预设闹铃时刻是否一致,并在两者相等时启动警报机制。
5. 数码管显示:使用6个数码显示器来呈现时间信息(包括小时、分钟和秒),并通过动态扫描技术将这些数字依次映射到相应的七段LED上。提高刷新频率能够确保读数更加稳定且清晰可见。