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

📄 032223.cpp

📁 设f(x)=1+x+x2+x5+x27
💻 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 + -