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

📄 suansu.c

📁 程序用C语言来实现算数编码以及解码过程
💻 C
字号:
#include <stdlib.h> 
#include <iostream.h> 
#include <stdio.h>
#define N  4
double uniform(double a,double b)
{double m,n;
m=b-a;
n=a+(double)(m*rand()/(RAND_MAX+1.0));
return n;}
double encode(char p[4][4],double chance[])//编码,chance[4]用于接收各个字符的概率范围
{ 
	 char number[4];double high=0,low=0,rang=1;int i,j;
	 char n;double aa=0,bb=0,cc=0,dd=0,m1=0,m2=0,m3=0,m4=0;
	  for(i=0;i<N;i++)
		for(j=0;j<N;j++)
		{
		 if(p[i][j]=='a')
          m1+=1;
         else if(p[i][j]=='b')
          m2+=1;
         else if(p[i][j]=='c')
		  m3+=1;
		 else if(p[i][j]=='d')
		  m4+=1;
		}
	 
	 printf("please enter in the numbers   ");//输入信源符号a,b,c,d;
	 for(i=0;i<N;i++)
	 {
	 scanf("%c",&n);
	 number[i]=n;
	 }
     for(i=0;i<N;i++)
	 {
	 if(number[i]=='a')
	 aa=m1/16;
	 else if(number[i]=='b')
	 bb=m2/16;
     else if(number[i]=='c')
	 cc=m3/16;
     else if(number[i]=='d')
     dd=m4/16;
	 }
	 chance[0]=aa;chance[1]=aa+bb;chance[2]=aa+bb+cc;chance[3]=aa+bb+cc+dd;
	 bb=bb+aa;cc=bb+cc;dd=cc+dd;
	 for(i=0;i<N;i++)
	   for(j=0;j<N;j++)
	   {
	   if(p[i][j]=='a')
	   {high=low+rang*aa;
	   low=low+rang*0;
	   rang=high-low;
	   }
	   else if(p[i][j]=='b')
	   {high=low+rang*bb;
	   low=low+rang*aa;
	   rang=high-low;
	   }
       else if(p[i][j]=='c')
	   {high=low+rang*cc;
	   low=low+rang*bb;
	   rang=high-low;
	   }
	   else if(p[i][j]=='d')
	   {
	   high=low+rang*dd;
	   low=low+rang*cc;
	   rang=high-low;
	   }
	 }
low=uniform(low,high);
return low;
}
void decode(double x,char ce[16],double chance[])
{    int i;
     for(i=0;i<16;i++)
	 {
	 if((x>=0)&&(x<chance[0]))
	 {ce[i]='a';x=(x-0)/(chance[0]-0);}
	 else if((x>=chance[0])&&(x<chance[1]))
     {ce[i]='b';x=(x-chance[0])/(chance[1]-chance[0]);}
     else if((x>=chance[1])&&(x<chance[2]))
     {ce[i]='c';x=(x-chance[1])/(chance[2]-chance[1]);}
     else if((x>=chance[2])&&(x<chance[3]))
     {ce[i]='d';x=(x-chance[2])/(chance[3]-chance[2]);}
	 }
}

    main()
    {char cod[4][4]={{'a','b','b','d'},{'b','c','d','a'},{'c','c','d','b'},{'c','b','d','a'}};
     char ec[16];int i;double t;double chance[N];
    t=encode(cod,chance);
	decode(t,ec,chance);
	printf("%f",t);
	printf("译码输出:");
	for(i=0;i<16;i++)
	printf("%c ",ec[i]);
	}

  

⌨️ 快捷键说明

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