/****************** 固定模式算术编码 **********************/
#include<math.h>
#include<string.h>
#include<stdio.h>
const double proc[]={0.10,0.10,0.10,0.1,0.1,0.1,0.1,0.1,0.15,0.05};
double result,areaBegin,areaEnd;
int cord[1000],cordLength;
char str[1000];
int strLength=0;
bool readdat(){
printf("*********** 固定模式算术编码 ***********\n");
printf("请输入字符串(0--9): \n");
scanf("%s",str);
while(str[strLength]!='\0')
strLength++;
for(int i=0;i<strLength;i++) //输入是否合法
if(str[i]>'9' || str[i]<'0') return 1;
return 0;
}
void encord(){
printf(" 编 码 :");
double w=0.0,len;
areaBegin=0.0,areaEnd=1.0;
for(int i=0;i<strLength;i++){
int n=str[i]-'0',k; w=0.0;
for(k=0;k<n;k++) w += proc[k]; //计算所在区间
len=areaEnd-areaBegin; //计算新的区间
areaEnd = areaBegin+len*(w+proc[k]);
areaBegin += len*w;
本内容试读结束,登录后可阅读更多
下载后可阅读完整内容,剩余2页未读,立即下载