C语言已知二进制码求循环码,循环码系统与非系统编码的C语言实现
循環(huán)碼系統(tǒng)與非系統(tǒng)編碼的C語言實現(xiàn):
#include"stdio.h"
#include
#defineN10
//系統(tǒng)編碼實現(xiàn)
voidX(int?g[N],int?c[N],int?r,int?n)
{intdegg,degc,i,k,t,j,e,u,sum=0;
int?d[N][2*N]={0},C[N],R[N],a[N][2*N],q[N];
degg=r;
//求信息多項式的次冪
for(i=0;i<=n-r-1;i++)
{
if(c[i]!=0)
{degc=n-i-1;
break;
}
}
for(i=0;i
{q[i]=g[i];
R[i]=c[i];
}
k=degc-degg;
e=k;
//二進制除法實現(xiàn)
for(j=0;j
{
for(i=0;i
{
q[i]=g[i];
}
for(i=n-1;i>=e;i--)
{
t=q[i];q[i]=q[i-e];q[i-e]=t;
}
for(i=0;i<=n-1;i++)
{
c[i]=(c[i]+q[n-1-i])%2;
}
for(i=0;i<=n-1;i++)
{
if(c[i]!=0)
{degc=n-i-1;
break;
}
}
e=degc-degg;
u=j;
if(e<0){break;}
}
for(i=0;i<=n-1;i++)
{
C[i]=(R[i]+c[i])%2;
}
//輸出
printf("系統(tǒng)編碼的結(jié)果為:/n");
printf("/t");
for(j=0;j<=n-1;j++)
printf("%d ",C[j]);
printf("/n");
}
//非系統(tǒng)編碼實現(xiàn)
voidUX(int?g[N],int?c[N],int?r,int?n)
{inta[N][2*N],x[N];
int?i,j,k,sum=0;
//二進制乘法
for(j=0;j<=n-r-1;j++)
{for(i=0;i
a[j][i]=0;
for(i=0;i<=n-1;i++)
a[j][i+j]=c[j]*g[i];
for(k=i+j;k<=2*n-r-2;k++)
a[j][k]=0;
}
for(j=0;j<=2*n-r-2;j++)
{sum=0;
for(i=0;i<=n-r-1;i++)
sum=(a[i][j]+sum)%2;
x[j]=sum;
}
//輸出
printf("非系統(tǒng)編碼的結(jié)果:/n");
printf("/t");
for(j=0;j<=n-1;j++)
printf("%d ",x[j]);
printf("/n");
}
voidmain()
{inti,n,m,t,r;
int?g[N]={0},c[N]={0};
printf("****循環(huán)碼編碼方法(碼長n<=10)****/n");
printf("/t輸入碼長n:");
scanf("%d",&m);
n=m;
switch(n)
{case?1 :printf("輸入校驗位r<=%d:",n-1);
scanf("%d",&r);
switch(r)
{case?0:g[0]=1;break;
}?break;
case?2 :printf("輸入校驗位r<=%d:",n-1);
scanf("%d",&r);
switch(r)
{case?0:g[0]=1;break;
case?1:g[0]=1;g[1]=1;break;
}?break;
case?3 :printf("輸入校驗位r<=%d:",n-1);
scanf("%d",&r);
switch(r)
{case?0:g[0]=1;break;
case?1:g[0]=1;g[1]=1;break;
case?2:g[0]=1;g[1]=1;g[2]=1;break;
}?break;
case?4 :printf("輸入校驗位r<=%d:",n-1);
scanf("%d",&r);
switch(r)
{case?0:g[0]=1;break;
case?1:g[0]=1;g[1]=1;break;
case?2:g[0]=1;g[1]=0;g[2]=1;break;
case?3:g[0]=1;g[1]=1;g[2]=1;g[3]=1;break;
}?break;
case?5 :printf("輸入校驗位r=0,1,4:");
scanf("%d",&r);
switch(r)
{case?0:g[0]=1;break;
case?1:g[0]=1;g[1]=1;break;
case?4:g[0]=1;g[1]=1;g[2]=1;g[3]=1;g[4]=1;break;
}?break;
case?6 :printf("輸入校驗位r<=%d:",n-1);
scanf("%d",&r);
switch(r)
{case?0:g[0]=1;break;
case?1:g[0]=1;g[1]=1;break;
case?2:g[0]=1;g[1]=1;g[2]=1;break;
case?3:g[0]=1;g[1]=0;g[2]=0;g[3]=1;break;
case?4:g[0]=1;g[1]=0;g[2]=1;g[3]=0;g[4]=1;break;
case?5:g[0]=1;g[1]=1;g[2]=1;g[3]=1;g[4]=1;g[5]=1;break;
}?break;
case?7 :printf("輸入校驗位r=0,1,3,4,6:");
scanf("%d",&r);
switch(r)
{case?0 :g[0]=1;break;
case?1 :g[0]=1;g[1]=1;break;
case?3 :g[0]=1;g[1]=1;g[2]=0;g[3]=1;break;
case?4 :g[0]=1;g[1]=1;g[2]=1;g[3]=0;g[4]=1;break;
case?6 :g[0]=1;g[1]=1;g[2]=1;g[3]=1;g[4]=1;g[5]=1; g[6]=1;break;
}?break;
case?8 :printf("輸入校驗位r<=%d:",n-1);
scanf("%d",&r);
switch(r)
{case?0 :g[0]=1;break;
case?1 :g[0]=1;g[1]=1;break;
case?2 :g[0]=1;g[1]=0;g[2]=1;break;
case?3 :g[0]=1;g[1]=1;g[2]=1;g[3]=1;break;
case?4 :g[0]=1;g[1]=0;g[2]=0;g[3]=0;g[4]=1;break;
case?5 :g[0]=1;g[1]=1;g[2]=0;g[3]=0;g[4]=1;g[5]=1;break;
case?6 :g[0]=1;g[1]=0;g[2]=1;g[3]=0;g[4]=1;g[5]=0; g[6]=1;break;
case?7 :g[0]=1;g[1]=1;g[2]=1;g[3]=1;g[4]=1;g[5]=1;g[6]=1; g[7]=1;break;
}?break;
case?9 :printf("輸入校驗位r<=%d:",n-1);
scanf("%d",&r);
switch(r)
{case?0 :g[0]=1;break;
case?1 :g[0]=1;g[1]=1;break;
case?2 :g[0]=1;g[1]=0;g[2]=1;break;
case?3 :g[0]=1;g[1]=0;g[2]=0;g[3]=1;break;
case?4 :g[0]=1;g[1]=0;g[2]=1;g[3]=0;g[4]=1;break;
case?5 :g[0]=1;g[1]=1;g[2]=1;g[3]=1;g[4]=1;g[5]=1;break;
case?6 :g[0]=1;g[1]=1;g[2]=0;g[3]=1;g[4]=0;g[5]=1; g[6]=1;break;
case?7 :g[0]=1;g[1]=0;g[2]=1;g[3]=1;g[4]=1;g[5]=1; g[6]=0;g[7]=1;break;
case?8 :g[0]=1;g[1]=1;g[2]=1;g[3]=1;g[4]=1;g[5]=1;g[6]=1; g[7]=1;g[8]=1;break;
}?break;
case?10 :printf("輸入校驗位r=0,1,2,,4,5,6,8,9:");
scanf("%d",&r);
switch(r)
{case?0 :g[0]=1;break;
case?1 :g[0]=1;g[1]=1;break;
case?2 :g[0]=1;g[1]=0;g[2]=1;break;
case?4 :g[0]=1;g[1]=1;g[2]=1;g[3]=1;g[4]=1;break;
case?5 :g[0]=1;g[1]=0;g[2]=0;g[3]=0;g[4]=0;g[5]=1;break;
case?6 :g[0]=1;g[1]=1;g[2]=0;g[3]=0;g[4]=0; g[5]=1;g[6]=1;break;
case?8 :g[0]=1;g[1]=0;g[2]=1;g[3]=0;g[4]=1; g[5]=0;g[6]=1;g[7]=0;g[8]=1;break;
case?9 :g[0]=1;g[1]=1;g[2]=1;g[3]=1;g[4]=1;g[5]=1; g[6]=1;g[7]=1;g[8]=1;g[9]=1;break;
}?break;
}
printf("生成多項式系數(shù)矩陣為(冪次從低到高):/n");
for(i=0;i<=n-1;i++)
printf("%d ",g[i]);
printf("/n");
printf("輸入信源信息向量c(%d位):/n",n-r);
for(i=0;i<=n-r-1;i++)
scanf("%d",&c[i]);
while(1)
{
printf("/t*****選擇編碼方式及命令*****/n");
printf("/t1:系統(tǒng)編碼/n");
printf("/t2:非系統(tǒng)編碼/n");
printf("/t3:退出程序!!!/n");
printf("/t***************************/n");
scanf("%d",&t);
switch(t)
{case?1 :X(g,c,r,n);break;
case?2 :UX(g,c,r,n);break;
case?3 :printf("退出程序〉〉〉");exit(0);break;
}
printf("/n");
}
}
總結(jié)
以上是生活随笔為你收集整理的C语言已知二进制码求循环码,循环码系统与非系统编码的C语言实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言调用二维数组作为函数参数传递,C+
- 下一篇: c语言中读取内存的文件,c++从内存中读