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

📄 xianglun.txt

📁 香伦编码的C语言实现!是信息类须掌握的编程之一!
💻 TXT
字号:
#include<iostream.h>
#include<stdlib.h>
#include<string.h>
char  B[6][10];
char C[6]={'a','b','c','d','e','f'};
void   codeing(float x, float y,int m)
{   
   float v=1.0/x; int j=1;
    while(v>2)
   {      
	v=v/2;
	j++;
	}
	cout<<"      "<<C[m]<<"对应的码字为"
		<<"--------------";
	for(int z=0;z<=j-1;z++)
	{
		   y=y*2;
		   if(y>=1)
		 { 
			 y=y-1;
		   	 cout<<"1";
			 B[m][z]='1';
		  }
		  else
		{ 
		  cout<<"0";
		  B[m][z]='0';
		}
	}
  cout<<endl;
}

  void transfer()
  {            
	  int n;  char s;
      cout<<"请输入要翻译的码长"<<endl;
      cin>>n;
	  char *D=new char [n+1];
	  cout<<"请依次输入二进制数"<<endl;
	  for(int c=0;c<=n-1;c++)
	  { 
		  cin>>s;
	      D[c]=s;
	  }
	  if (n<2)
	 cout<<"bu neng  yi chu "<<endl;
	  else
	{
	    int j=0; int e=0; 
	    cout<<"该串二进制代码对应的信源消息为"
			<<"--------";
	    for(int i=0;i<=5;i++)
		 {   
			while(j<10&&e<n)
			{
			    if(D[e]==B[i][j])
				{	
			 	   e++;       
				   j++;      
				   if(B[i][j]=='\0')
					{        
					  cout<<C[i];
                      j=0;
					}
				}
               else 
	           i++;
			}
		} 
	}
 cout<<endl;
  }
	  
void paixu(float B[7])
{  
   B[0]=0.0;  float x;  float p;
   cout<<"请依次6位输入元素:"<<endl;
   for(int i=1;i<=6;i++)
   {            
	   cin>>p;
	   B[i]=p;
   }
  for(int j=1;j<=7;j++)
  {   
	  x=B[j];
	  int low=1; 
	  int high=j-1;
	  while(low<=high)
		{
		    int m=(low+high)/2;
		    if(x>=B[m]) 
				high=m-1;
		    else 
				low=m+1;
		} 
	   for(int z=j-1;z>=high+1;--z) 
		 B[z+1]=B[z];
	     B[high+1]=x;
  } 
 cout<<"经过排序后该数组输出如下:"<<endl;
	 for(int y=1;y<=6; y++)
     cout<<B[y]<<" ";
	 cout<<endl;
}

 void  main()
 {                   
	 float A[7];
	 paixu(A);
	 float p=0;
	 for(int j=1;j<=6;j++)
	{   
	  p=p+A[j];
	} 
          
	if(p>1)
	{
	 cout<<"输入错误概率和不为1"<<endl;
	      exit(0);
	}   
	else
	{  
	   cout<<"输入正确对各元素的码字如下:"<<endl;
       codeing(A[1],0,0);
	   float k=0.0;
	   for(int y=2;y<=6;y++)
	   {
         k=k+A[y-1];
	     codeing(A[y],k,y-1);
	   }
	}                
    char f;
	cout<<"是否要进行译码(y/n)"<<endl;
	cin>>f;
	if(f =='y')
    transfer();
	else
    exit(0);

 }

⌨️ 快捷键说明

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