📄 hafuman.cpp
字号:
#include<iostream.h>
#include<math.h>
#define N 10
void bianma(int n,int r,int G[N][N])
{
int i,j,a,c;
int x[N];
cout<<"请依次输入信息码(0,1代码,结束请输9):"<<endl;
cin>>c;
while(c!=9)
{
for(i=0;i<n-r&&c!=9;i++)
{
x[i]=c;
cin>>c;
}
for(i=0;i<n;i++)
{
a=0;
for(j=0;j<n-r;j++)
a=(a+x[j]*G[j][i])%2;
cout<<a<<" ";
}
cout<<endl;
}
}
void jianma1(int n,int r,int H[N][N])
{
int i,j,c,a,b=0;
int ma[N],s[N];//增余汉明码
cout<<"请依次输入编码(结束请输9):"<<endl;
cin>>c;
while(c!=9)
{
for(i=0;i<n&&c!=9;i++)
{
ma[i]=c;
cin>>c;
}
for(i=0;i<r;i++)
{
a=0;
for(j=0;j<n;j++)
a=(a+ma[j]*H[i][j])%2;
s[i]=a;
}
j=0;
for(i=0;i<n;i++)
{
for(j=0;j<r;j++)
{
if(H[j][i]!=s[j])
break;
}
if(j==r)
break;
}
if(i!=n)
{
cout<<"第"<<i+1<<"位发生错!"<<endl;
cout<<"输出修改后的编码:";
ma[i]=(ma[i]+1)%2;
for(i=0;i<n;i++)
cout<<ma[i]<<" ";
cout<<endl;
}
else
cout<<"没错!"<<endl;
}
}
void main()
{
int a,n,r,i,j,H[N][N],G[N][N];
cout<<" 20062054 王竞婷 计科2 汉明码\n\n";
cout<<"汉明码编码与检码"<<endl;
cout<<"输入码字长度n:"<<endl;
cin>>n;
cout<<"监督位数r:"<<endl;
cin>>r;
for(i=0;i<n-r;i++)
for(j=0;j<n;j++)
{
if(i==j) G[i][j]=1;
else G[i][j]=0;
}
cout<<"输入监督矩阵:"<<endl;
for(i=0;i<r;i++)
for(j=0;j<n;j++)
cin>>H[i][j];
for(i=0;i<n-r;i++)
for(j=0;j<r;j++)
G[i][j+n-r]=H[j][i];
while(1)
{
cout<<"...............1、编码 2、检码 0、退出.............."<<endl;
cin>>a;
if(a==1)
bianma(n,r,G);
if(a==2)
jianma1(n,r,H);
if(a==0)
return;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -