⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xindao.cpp

📁 一 实验目的、掌握通过计算机实现香农编码 二实验要求 对于给定的信源的概率分布,按照香农编码的方法进行计算机实现.
💻 CPP
字号:
#include<iostream.h>
#include<math.h>
double a[10];              //用于存储符号的概率
int n;                     //请输入单符号信源元素个数
double b[10];              //用于存储码字的概率
int k[10];                 //用于存储Ki的K直
int c[10];                 //用于存储二进吗
void input();              //输入数据函数
void paixi();              //对概率排序
void output();             //输出函数
void bgailui();            //用于求码字的概率
void kjisuan();            //用于求Ki的K直
void bbianma();            //用于编码
void panduan();            //用于对输入数据判断,避免符号的总和概率》1
void main()
{
	input();
    panduan();
	paixi();
	output();
    bgailui();
    kjisuan();
    bbianma();
}
void input()
{
	cout<<"请输入单符号信源元素个数 :\n";
	cin>>n;
	cout<<"请输入单符号概率  :\n";
	for(int i=1;i<n+1;i++)
		cin>>a[i];
}
void panduan()
{
    double sum=0;
    for(int i=0;i<n+1;i++)
	
			sum+=a[i];
	
	cout<<""<<sum<<endl;
		if(sum==1.0)
			cout<<"将执行下面操作:"<<endl;
		else if(sum!=1.0)
		{
			cout<<" 输入错误,请重新输入     :"<<endl;
			input();
		}
}
            

void paixi()
{
	int i,j,k;
	double x;
	for(i=1;i<n+1;i++)
	{
		k=i-1;
		for(j=i;j<n+1;j++)
			if(a[j]>a[k])
				k=j;
			x=a[i-1];a[i-1]=a[k];a[k]=x;
	}
}
void output()
{
    cout<<"排序后符号概率分布"<<endl;
	for(int i=0;i<n;i++)
			cout<<" "<<a[i];
		 cout<<endl;
}
void bgailui()
{
	b[0]=0;
    for(int i=0;i<n;i++)
   {
	  b[i+1]=b[i]+a[i];
   }
	cout<<"累加概率分布为"<<endl;
   for( i=0;i<n;i++)
   cout<<" "<<b[i];
   cout<<endl;
}
void kjisuan()
{
	for(int i=0;i<n;i++)
	{
		if((-1)*log(a[i])/log(2)==int((-1)*log(a[i])/log(2)))
			k[i]=int((-1)*log(a[i])/log(2));
		else
			k[i]=int((-1)*log(a[i])/log(2))+1;
	}
    cout<<"k为 "<<endl;
	for(i=0;i<n;i++)
		cout<<" "<<k[i];
		cout<<endl;
}
void bbianma()
{
    double x;
	for(int i=0;i<n;i++)
	{
		x=b[i];
        for(int j=0;j<n;j++)
		{
           if(x<=0.5)
		   {
              if(x==int(x))
			    x=0;
		      else
                x=x*2;
                c[j]=int(x);
		   }
		   else if(x>0.5)
		   {
              if(x==int(x))
			    x=0;
			  else
				  x=(x-int(x))*2;
			      c[j]=int(x);
		   }

		 
		}
		cout<<"编码为"<<endl;
	 for(j=0;j<k[i];j++)
         	cout<<""<<c[j];
		 cout<<endl;
	}
}
		 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -