课程设计怎么写

课程设计报告主要包括以下几个方面.
1.封面(根据自己的个性设计)2.目录3.主界面(介绍这次设计的课题、人员、目标、任务、人员分工)4.主要过程(要告诉别人你的这个作品该怎么用)5.程序流程图(用图来表示主要过程)6.核心源程序(你觉得这个作品它具备的主要功能是什么,就将实现这个功能的代码给COPY下来)7.主要函数(你程序代码里用的函数中你觉得重要的或是难的)8.心得9.附录(你完成这次课程设计参考的书,这个可以多写一点,以示用心认真)
我第一次做课程设计时写报告就是这么写的.你参考参考.希望能对你有些帮助

哈弗曼树课程设计

大一时的课程设计,现在看看实在是简单的要死。
如果你要做输入字符串然后自动判断概率的话就自己做,同样用vector。
如果你用.Net做的话就更简单了。

一、设计目的:
1、 掌握HUFFMAN编码的原理及步骤;
2、 熟悉用C++语言进行编码程序设计,并检验程序的正确性。
二、设计所需的软硬件:
PC机一台、DEV C++软件开发平台
三、设计原理与内容:
基本原理:
首先将q个信源符号按概率分布P(si)的大小,以降序排列。其次选出两个概率最小的信源符号合并成一个符号,变成q-1个符号。循环这个步骤直到得到最后一个符号为止。从根部分配0和1到两臂,依次进行分配即可。
设计内容:
对n(n<50)个字符进行Huffman编码,用户输入每个字符的概率,程序输出每个字符及其码字。
程序设计的思路:
(1) 定义霍夫曼树的结点结构huffnode.
(2)定义霍夫曼编码的结构huffcode.
(3)数组初始化
(4)构造霍夫曼树
(4.1) 构造n棵只有一个叶结点的二叉树,并找出根结点权值最小的两棵树
(4.2) 将找出的两棵树合并为一棵子树
(5)求各字符的霍夫曼编码
(6)输出字符的霍夫曼编码
四、设计步骤:
1、 写出HUFFMAN编码源程序,编译通过;
2、 运行程序,输入验证码,根据输出结果进行分析、调试。
附:源程序代码
#include <cstdlib>
#include <iostream>
#include <vector>
#include <string>
using namespace std;
class node{
public:
char data;
float weight;
};
class huffnode :public node
{
public:
string code;
int lchild,rchild,parent;
int flag;
};
void select(vector<huffnode> s,int &s1,int &s2){
s[0].weight = 1;
s1 = s2 = 0;
for(int i = 0; i < s.size(); i++)
if (s[i].parent == -1)
{
if (s[i].weight < s[s1].weight)
{ s2 = s1; s1 = i;}
else if (s[i].weight < s[s2].weight)
{ s2 = i; }
}
}
void code(vector<node> weights)
{
vector<huffnode> h;
vector<node>::iterator pit_i = weights.begin();
int nozero_num = 0;
huffnode m;
m.weight = 1;
h.push_back(m);
while(pit_i != weights.end()){
if((*pit_i).weight != 0){
huffnode n;
n.data = (*pit_i).data;
n.weight = (*pit_i).weight;
n.lchild = n.rchild = n.parent = -1;
h.push_back(n);
nozero_num++;
}
pit_i++;
}
int s1,s2;
int j = nozero_num;
cout<<j<<endl;
do
{
select(h,s1, s2);
huffnode hn;
hn.weight = h[s1].weight + h[s2].weight;
hn.lchild = s1;
hn.rchild = s2;
h.push_back(hn);
h[s1].parent = h[s2].parent = 1;
j–;
}while(j != 1);
int p = h.size()-1;
while(p != 0)
{
if(h[p].lchild != -1){
h[h[p].lchild].code = h[p].code + ‘0’;
h[h[p].rchild].code = h[p].code + ‘1’;}
p–;
}
for (int temp = 1;temp<=nozero_num;temp++) cout<<h[temp].data<< <<h[temp].code<<endl;
}
int main(int argc, char *argv[])
{
vector<node> weights;
int N;
cout<<请输入要编码的字符个数:<<endl;
cin>>N;
cout<<请输入相应的字符以及其概率:<<endl;
while(N>0)
{
node n;
cout<<字符:; cin>>n.data;
cout<<概率:; cin>>n.weight;
weights.push_back(n);
N–;
}
cout<<所得编码为:<<endl;
code(weights);

system(PAUSE);
return EXIT_SUCCESS;
}

原创文章,作者:晴空,如若转载,请注明出处:http://www.dlgrdx.com/yanxue/17035.html