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

📄 coding .cpp

📁 在c++下算术编码的实现 设定了6个字符可以自己设定他们的概率
💻 CPP
字号:
#include<iostream.h>
int g,q;
char a,b,c,d,e,f,i,m,op;
double p1,p2,p3,p4,p5,p6,j1,j2,j3,j4,j5,j6,k1,k2,k3,k4,k5,k6,k7,Pi,pi,Ci,Asi=1.0,pm,Pm,Cm,Asm;
double S=1.0,M,C1=0.0;
double s1,s2;
double c1=0.0,c2=1.0;
void main()
{   
    cout<<"信源符号:";
    cin>>a>>b>>c>>d>>e>>f;
	cout<<"对应的概率:";
	cin>>p1>>p2>>p3>>p4>>p5>>p6; 
    j1=0.0;          k1=j1;     
	j2=p1+j1;        k2=j2; 
	j3=p2+j2;        k3=j4;
	j4=p3+j3;        k4=j4;
	j5=p4+j4;        k5=j5;
	j6=p5+j5;        k6=j6;
	                 k7=1.0;        
	cout<<" ***********************************"<<endl;
	cout<<" * 字符 |"<<" 概率 |"<<" 积累概率 |"<<" 区间范围  "<<endl;
	cout<<" *   "<<a<<"   | "<<p1<<"   |  "<<j1<<"     |"<<" ["<<k1<<","<<k2<<")  "<<endl;
	cout<<" *   "<<b<<"   | "<<p2<<"   |  "<<j2<<"   |"<<" ["<<k2<<","<<k3<<")    "<<endl;
	cout<<" *   "<<c<<"   | "<<p3<<"   |  "<<j3<<"   |"<<" ["<<k3<<","<<k4<<")    "<<endl;
	cout<<" *   "<<d<<"   | "<<p4<<"   |  "<<j4<<"   |"<<" ["<<k4<<","<<k5<<")    "<<endl;
	cout<<" *   "<<e<<"   | "<<p5<<"   |  "<<j5<<"   |"<<" ["<<k5<<","<<k6<<")    "<<endl;
	cout<<" *   "<<f<<"   | "<<p6<<"   |  "<<j6<<"   |"<<" ["<<k6<<","<<k7<<")    "<<endl;
	cout<<" ***********************************"<<endl;
  
		 cout<<"    1.多元符号编码"<<endl;
         cout<<"    2.多元符号解码"<<endl;
			cout<<"请选择:" ;
			cin>>op;

	switch(op)
	{
	case'1':	
		cout<<"需要编码的个数:";
				cin>>q;
		for(g=q;g>=0;g--)
		{
			if(g>0)
			{
	cout<<"编第"<<q-g+1<<"个字符:";
	cin>>i;
	if(i==a)
	{Pi=j1;
	pi=p1;}
 else	if(i==b)
	{Pi=j2;
	pi=p2;}
else	if(i==c)
	{Pi=j3;
	pi=p3;}
	if(i==d)
	{Pi=j4;
	pi=p4;}
	if(i==e)
	{Pi=j5;
	pi=p5;}
	if(i==f)
	{Pi=j6;
	pi=p6;}
	Ci=Ci+Pi*Asi;
	Asi=pi*Asi;
	S=Ci+Asi;
	cout<<Ci<<"  "<<S<<endl;
			}
			else
				break;
		}
  case '2':
		cout<<"输入最后的区间范围:";
			cin>>s1>>s2;
     	char op;
         cout<<"请按k开始解码";
         cin>>op;
    	switch(op)
		{
   case 'k':
			double h1,h2,h11,h22;
            cout<<"y."<<"进行解码"<<endl; //第二次解码
            cout<<"n."<<"不进行解码"<<endl;
	        cin>>op;
          case 'y':     
			  h1=c1;h2=c2;
		    for(int n=1;;n++)
			{
	           if( (h1+j1*(h2-h1))<=s1&&(h1+j1*(h2-h1)+p1*(h2-h1))>=s2)
			   {
	             	h11=(h1+j1*(h2-h1));
					h22=(h1+j1*(h2-h1)+p1*(h2-h1));
					h1=h11;
					h2=h22;
					cout<<"第"<<n<<"个解码为:"<<a<<endl;
      				cout<<"解码区间初始值变为:";
					cout<<"["<<h1<<","<<h2<<"]"<<endl;
			   }
	        	else if( (h1+j2*(h2-h1))<=s1&&(h1+j2*(h2-h1)+p2*(h2-h1))>=s2)
				{
					h11=(h1+j2*(h2-h1));
					h22=(h1+j2*(h2-h1)+p2*(h2-h1));
					h1=h11;
					h2=h22;
					cout<<"第"<<n<<"个解码为:"<<b<<endl;
					 cout<<"解码区间初始值变为:";
					cout<<"["<<h1<<","<<h2<<"]"<<endl;
				}
		    	else if( (h1+j3*(h2-h1))<=s1&&(h1+j3*(h2-h1)+p3*(h2-h1))>=s2)
				{
					 h11=(h1+j3*(h2-h1));
						h22=(h1+j3*(h2-h1)+p3*(h2-h1));
					h1=h11;
					h2=h22;
					 cout<<"第"<<n<<"个解码为:"<<c<<endl;
	  					cout<<"解码区间初始值变为:";
							 cout<<"["<<h1<<","<<h2<<"]"<<endl;
				}
				else if( (h1+j4*(h2-h1))<=s1&&(h1+j4*(h2-h1)+p4*(h2-h1)>=s2)
				{
					h11=(h1+j4*(h2-h1));
					h22=(h1+j4*(h2-h1)+p4*(h2-h1));
						h1=h11;
					h2=h22;
					cout<<"第"<<n<<"个解码为:"<<d<<endl;
	  				 cout<<"解码区间初始值变为:";
						 cout<<"["<<h1<<","<<h2<<"]"<<endl;
				}
                else if( (h1+j5*(h2-h1))<=s1&&(h1+j5*(h2-h1)+p5*(h2-h1))>=s2)
				{
					h11=(h1+j5*(h2-h1));
					h22=(h1+j5*(h2-h1)+p5*(h2-h1));
					h1=h11;
					h2=h22;
					 cout<<"第"<<n<<"个解码为:"<<e<<endl;
					 cout<<"解码区间初始值变为:";
						cout<<"["<<h1<<","<<h2<<"]"<<endl;
				}
	        	else if( (h1+j6*(h2-h1))<=s1&&(h1+j6*(h2-h1)+p6*(h2-h1))>=s2)
				{
					h11=(h1+j6*(h2-h1));
					h22=(h1+j6*(h2-h1)+p6*(h2-h1));
					h1=h11;
					h2=h22;
					 cout<<"第"<<n<<"个解码为:"<<f<<endl;
	  				 cout<<"解码区间初始值变为:";
					 cout<<"["<<h1<<","<<h2<<"]"<<endl;
				}
	 }
 }
}
}

⌨️ 快捷键说明

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