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

📄 s.cpp

📁 实现信息处理与编码理论中的算术编码
💻 CPP
字号:

#include<iostream>
#include<fstream>
using namespace std;
enum {size=27,len=2};
double  A(char ch );
double C(char ch);
struct node
{ char a;
 int b;
};
node n[32];
int main()
{  
	ifstream fin("a.txt");
	ofstream fout("b.txt");
	char h='a';
    int p;
	for(p=0;p<size;p++)
	{n[p].b=0;
	 n[p].a=h;
	 h+=1;
	}
	n[p].a=' ';
	n[p++].b=0;
	n[p].a='\n';
	n[p++].b=0;
	n[p].a=',';
    n[p++].b=0;
    n[p].a='.';
    n[p++].b=0;
     char ch;
     int i;
	double e=0.0,f=1.0;
	fin.clear();
    int count=0;
    while(1)
	{ for(i=0;i<len;i++)
	{ if(!fin.get(ch)) break;
	  e=e+f*C(ch);
	  f=f*A(ch);
    }
	fout.precision(16);
	//fout.width(20);
	 fout<<e;//<<'E';
	 count++;
	 //if(count%6==0)fout<<endl;
	 if(i<len){fout<<' '<<i;break;}
	 e=0.0;
     f=1.0;}
	 fin.close();
	 fout.close();
	 for(int c=0;c<size+3;c++){cout<<n[c].b<<n[c].a<<endl;}
	 return 1;
}
 double C(char ch)
 {   int t,flag=1;
	 for(t=0;t<=size+3;t++)
       if(n[t].a==ch) break;
      double d=0.0,f=1.0;
	   for(int i=0;i<t;i++)
	   { for(int q=0;q<=i;q++)
	   f=f*0.1;
	   d=d+f;
       f=1.0;
	    }

	   return d;
 }
 double A(char ch)
 {    node no;
      int t,flag=1;
      for( t=0;t<=size+3;t++)
       if(n[t].a==ch) break;
       double  f=1.0;
       for(int i=0;i<=
		   t;i++)
	      f=f*0.1;
       int count=0;
       n[t].b+=1;
	   for(int j=t;j>0&&n[j].b>n[j-1].b;j--)
	   { no=n[j];
		 n[j]=n[j-1];
		 n[j-1]=no;}
	   return f;
 }


⌨️ 快捷键说明

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