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

📄 1.cpp

📁 我们经常遇到的问题 山农编码 网络上代码极少 值得关注
💻 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 + -