📄 1.cpp
字号:
#include<iostream.h>
#include<math.h>
#define N 100
void bianma(int n,int r,int G[N][N]){
int i,j,a,c;
int x[N];
cout<<"请输入信息码(输入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 jianma2(){
int n,r,i,j,c,a,b=0;
int H[N][N],ma[N],s[N];//增余汉明码
cout<<"输入码字长度n及监督位数r:";
cin>>n>>r;
cout<<"输入监督矩阵:"<<endl;
for(i=0;i<r;i++)
for(j=0;j<n;j++)
cin>>H[i][j];
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;
}
for(i=0;i<r;i++)
b=(b+s[i])%2;
if(b!=0){ //等于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;
return;
} }
else cout<<"没错!"<<endl;
cout<<endl;
}}
void main(){
int a,n,r,i,j,H[N][N],G[N][N];
cout<<"****05计科2 20052840 胡浩 汉明码****\n\n";
cout<<"汉明码编码与检码"<<endl;
cout<<"输入码字长度n及监督位数r:";
cin>>n>>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、检码 3、检码 0、退出"<<endl;
cin>>a;
if(a==1)
bianma(n,r,G);
if(a==2)
jianma1(n,r,H);
if(a==3)
jianma2();
if(a==0)
return;
}}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -