📄 xindao.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 + -