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

📄 hafuman.cpp

📁 实现哈夫曼编码和译码
💻 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 + -