📄 032223.cpp
字号:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 256 //定义串长度
int *input1(int *a,int &n){ //输入函数1:实现连接多项式的输入。
int flag=0,temp=0; //输入如1+x1++x2+x5+x27#
char c; //以井号(#)结束
printf("请输入多项式:");
a[0]=1;
while(1){
c=getchar(); //接受一个字符
if(c=='x'){temp=0;flag=1;} //判断为x,则准备接受气候的阶数
else if(c<='9'&&c>='0'&&flag==1)temp=temp*10+c-'0'; //如果为数字,保存
else if(c=='+'){a[temp]=1;flag=0;} //遇到+号,表明一个阶数输入完毕,保存
else if(c=='#'){a[temp]=1;flag=0;break;} //结束
}
n=temp; //n记录最大阶数
return a;
}
char *input2(char *b){ //输入函数2,输入初始序列,使用Char类型接受比较方便
printf("请输入初态:");
scanf("%s",b);
return b;
}
char *DSR(int *a,char *b,int n){ //DSR
int i,j,n1;
char temp[MAX]={'0'}; //初始化
strcpy(temp,b); //Temp用来保存d1-dn
n1=strlen(b); //初态序列的长度
for(i=n1;i<MAX;i++)
temp[i]='0';
for(i=0;i<MAX;i++){
b[i]=temp[0]; //d1左移
for(j=0;j<n;j++)
if(a[j+1]==1)temp[j]=(temp[j+1]+b[i]-'0'-'0')%2+'0'; //如Cn为1,则需计算
else temp[j]=temp[j+1]; //如Cn=0左移
}
b[MAX-1]='\0';
return b;
}
char *LFSR(int *a,char *b,int n){ //LFSR
int i,j,n1,sum=0;
n1=strlen(b); //初态长度
for(i=n1;i<MAX;i++){
for(j=1;i-j>=0;j++)
sum+=(b[i-j]-'0')*a[j]; //相乘,如1*1=1可得出有多少个Cn=1
b[i]=sum%2+'0'; //序列计算结果
sum=0;
}
b[MAX-1]='\0';
return b;
}
void main(){
int n,a[MAX]={0};
char b[MAX]={'0'},temp[MAX]={'0'};
input1(a,n); //输入联接多项式
input2(b); //输入初始序列
strcpy(temp,b);
LFSR(a,temp,n); //计算LFSR
printf("\nLFSR:\n");
puts(temp);
strcpy(temp,b);
DSR(a,temp,n); //计算DSR
printf("\nDSR:\n");
puts(temp);
}
/*
请输入多项式:1+x4+x5+x11+x14#
请输入初态:11010101101001
LFSR:
11010101101001101011110001101000101100100000010011100001100110101100111110110100
00101011101100110111010001000101001000101000110001111111101110000100111101100101
10100110011101101000101111101010101011010100000100000101010110111101110100101111
010111100100000
DSR:
11011110101000111000101000001111111010000000001010011101011001001011011111000110
01110011011110111100000010011010011001000100001100110011110010000111001010010010
00101011111011000111011011100110010100001101100000011001001110010001101010111001
011000001100001
请输入多项式:1+x1+x2+x5+x27#
请输入初态:101010110101110101000100111110
LFSR:
10101011010111010100010011111000111001100001011011100000000100000110110011111001
00001110100101110101110010110000011101110001100111001101111011001101110010100110
00001010011000001100001111001001101101111000011010111101000100110011101011011010
100111100001111
DSR:
11100110100011000011000111100110110011011010101110100101101110010110110010001001
10110001110010110100011001001111100101011001010011000000000010101100111101111101
10101111110011011111111110011110010001101001110100110001010010101001011001010100
010001100001000
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -