xunhuan.cpp
字号:
#include <iostream.h>
const int n=7,k=3,r=n-k;
void encodeh(int m[],int h[],int c[]);
void encodeg(int m[],int g[],int c[]);
void decode_1err(int r[],int g[],int c[]);
void main()
{
int g[r+1]={1,0,1,1,1};
int h[k+1]={1,0,1,1};
int m[k]={1,0,1};
int c[n]={0};
int i=0;
cout<<"(n,k)="<<n<<' '<<k<<endl;
cout<<"g:";
for(i=0;i<=n-k;i++)
cout<<g[i];
cout<<endl;
cout<<"h:";
for(i=0;i<=k;i++)
cout<<h[i];
cout<<endl;
encodeh(m,h,c);
for(i=0;i<=n-1;i++)
cout<<c[i];
cout<<" (k级编码器结果)"<<endl;
int c1[n]={0};
encodeg(m,g,c1);
for(i=0;i<=n-1;i++)
cout<<c1[i];
cout<<" (n-k级编码器结果)"<<endl;
int r[n]={1,0,1,1,1,0,0};
int c2[n]={0};
decode_1err(r,g,c2);
for(i=0;i<=n-1;i++)
cout<<r[i];
cout<<" (解码输入)"<<endl;
for(i=0;i<=n-1;i++)
cout<<c2[i];
cout<<" (解码输出)"<<endl;
return;
}
void encodeh(int m[],int h[],int c[])
{
int w[k]={0};
for(int i=0;i<=k-1;i++)
{
w[i]=m[k-1-i];
c[i]=m[i];
}
for(i=0;i<=n-k-1;i++)
{
int s=0;
for(int j=0;j<=k-1;j++)
{
s=s+w[k-1-j]*(h[k-j]);
}
s=s%2;
c[k+i]=s;
for(int l=k-1;l>=1;l--)
{
w[l]=w[l-1];
}
w[0]=s;
}
}
void encodeg(int m[],int g[],int c[])
{
int w[r+1]={0}; //registers clear to 0;
int i=0;
int m_temp=0;
for(i=0;i<=k-1;i++)
{
c[i]=m[i];
m_temp=(w[n-k-1]+m[i])%2;
for(int j=0;j<=n-k-1;j++)
{
if(j==n-k-1)
{
w[0]=m_temp;
}
else{
w[n-k-1-j]=(m_temp*g[1+j]+w[n-k-1-j-1])%2;
}
}
}
for(i=0;i<=n-k-1;i++)
{
c[k+i]=w[n-k-1-i];
}
}
void decode_1err(int r[],int g[],int c[])
{
int m[k]={0};
m[0]=1;
int c1[n]={0};
encodeg(m,g,c1);
int s[n-k]={0};
for(int index=0;index<n-k;index++)
s[index]=c1[k+index];
int w[n-k]={0};
int w_temp=w[0];
for(int i=0;i<=n-1;i++)
{
w_temp=w[0];
for(index=0;index<=n-k-2;index++)
{
w[index]=(w_temp*g[index+1]+w[index+1])%2;
}
w[n-k-1]=(w_temp*g[n-k]+r[i])%2;
}
/*
for(index=0;index<=n-k-1;index++)
cout<<s[index];
cout<<endl;
for(index=0;index<n-k;index++)
cout<<w[index];
cout<<endl;
*/
//***********************************
bool e=1;
for(index=0;index<=n-k-1;index++)
{
e=(w[index]==0)&&e;
}
if(e==1)
{
for(index=0;index<n;index++)
{
c[index]=r[index];
}
return;
}
//***************************************
e=1;
int shift=0;
for(index=0;index<=n-k-1;index++)
{
e=(w[index]==s[index])&e;
}
while(e==0)
{
w_temp=w[0];
for(index=0;index<=n-k-2;index++)
{
w[index]=(w_temp*g[index+1]+w[index+1])%2;
}
w[n-k-1]=(w_temp*g[n-k]+e)%2;
e=1;
for(index=0;index<=n-k-1;index++)
{
e=(w[index]==s[index])&e;
}
shift++;
}
w_temp=w[0];
for(index=0;index<=n-k-2;index++)
{
w[index]=(w_temp*g[index+1]+w[index+1])%2;
}
w[n-k-1]=(w_temp*g[n-k]+e)%2;
e=1;
for(index=0;index<=n-k-1;index++)
{
e=(w[index]==s[index])&e;
}
for(index=0;index<n;index++)
{
c[index]=(r[index]+(index==shift))%2;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -