两个程序用了同一个算法,结果一个没错,一个输出有错。
程序代码:#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
int r[5];
/*************多项式相乘模块****************/
void pmul(int k[],int x,int t[],int y,int n[],int z)
{
int i,j;
for(i=0;i<z;i++)
n[i]=0;
for(i=0;i<x;i++)
for(j=0;j<y;j++)
n[i+j]=n[i+j]+k[i]*t[j];
return;
}
/*************多项式相除模块**************/
void pdiv(int n[],int x,int m[],int y,int r[],int l)
{
int i,k;
for(i=x-1;i>=0;i--)
if(n[i]!=0)
{
k=i;
printf("%d\n",k);
break;
}
while(k>=5)
{
for(i=k;i>=k-5;i--)
{
n[i]=n[i]^m[y-1-k+i];
}
for(i=k;i>=k-5;i--)
if(n[i]!=0)
{
k=i;
// printf("%d\n",k);
break;
}
}
for(i=l-1;i>=0;i--)
r[i]=n[i];
return;
}
void main()
{
int i;
char flag='Y';
while(flag=='Y')
{
int n[15];//整个码长,用于存放多项式相乘后各项的系数.
int k[10];//信息码系数数组.
int t[6]={0,0,0,0,0,1};//与信息码多项式相乘的多项式的各项的系数,即x^5.
FILE *fp;
fp=fopen("a.txt","w");
srand(time(0));
printf("The Cofficient of the information code is: \n");
for(i=0;i<10;i++)
{
k[i]=rand()%2;
printf("%d",k[i]);
}
printf("\n");
pmul(k,10,t,6,n,15);//多项式相乘模块的调用.
printf("The Cofficient of the total code is: \n");
for(i=0;i<15;i++)
{
printf("%d",n[i]);
fprintf(fp,"%d",n[i]);
}
fprintf(fp,"\n");
printf("\n");
fclose(fp);
int m[6]={1,0,1,0,1,1};
// static int r[5];
pdiv(n,15,m,6,r,5);//多项式相除模块的调用.
printf("The Cofficient of the array r is: \n");
for(i=0;i<=4;i++)
printf("%d",r[i]);
printf("\n");
/**********将文件中的数据读出来**********/
fp=fopen("a.txt","rb");
printf("The Cofficient that we read from the file is: \n");
// fscanf(fp,"%s",n);//读出文件中的二进制代码.
for(i=0;i<15;i++)
{
if(fscanf(fp,"%c",&n[i])==EOF)//改为每次读出一个字符.
break;
printf("%c",n[i]);//同样以字符格式输出.
}
printf("\n");
for(i=0;i<15;i++)
{
n[i]=n[i]-48;//将字符型转换成整形.
printf("%d",n[i]);
}
printf("\n");
fclose(fp);
/**********将余多项式中的各项系数赋值给信息多项式中的系数************/
for(i=0;i<=4;i++)
n[i]=r[i];
printf("The Cofficient that we need lastly is: \n");
for(i=0;i<15;i++)
printf("%d",n[i]);
printf("\n\n");
printf("Do you want to continue?If yes,press Y,if not,press N.\n");
scanf("%c",&flag);
getchar();
if(flag=='Y')
continue;
else break;
}
}
这个程序输出结果是正确的。
程序代码:#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
int s[5];
void pdiv(int n[],int x,int m[],int y,int s[],int z)
{
int i,k;
for(i=x-1;i>=0;i--)
if(n[i]!=0)
{
k=i;
printf("%d\n",k);
break;
}
while(k>=5)
{
for(i=k;i>=k-5;i--)
{
n[i]=n[i]^m[y-1-k+i];
}
for(i=k;i>=k-5;i--)
if(n[i]!=0)
{
k=i;
// printf("%d\n",k);
break;
}
}
for(i=z-1;i>=0;i--)
s[i]=n[i];
return;
}
void main()
{
int i;
int n[15];
int m[6]={1,0,1,0,1,1};
srand(time(0));
/***********随机产生接收到的码组**********/
for(i=0;i<14;i++)
{
n[i]=rand()%2;
printf("%d",n[i]);
}
printf("\n");
int s[5];
pdiv(n,15,m,6,s,5);
printf("************\n");
for(i=0;i<=4;i++)
printf("%d",s[i]);
printf("\n");
}而这个结果输出有误,这两个程序都用到了多项式相除模块。求指教……









看不明白了!
