湘潭大学OJ1200ProblemCRC(摸拟,坑题)

阅读: 评论:0

湘潭大学OJ1200ProblemCRC(摸拟,坑题)

湘潭大学OJ1200ProblemCRC(摸拟,坑题)

题目描述

现实中的网络通讯不够理想,经常会有bit从0变1,从1变0...为了检验是否出错 需要用到循环冗余校验CRC
CRC冗余检验码包含两个部分 k位信息位+n位校验位,可由以下的步骤得到:

1.将要传送的数据分段,每段k个bit,如果不足k位用0补齐
2.对于每个长度为k的01序列M, 先在M后面加n个0得到新的M'.
3.选定一个(n+1)位的01序列做为除数P,对M'做**模2的除法,得到一个n位的余数R(即校验位).
4.将R接到M的后面就得到了M的 CRC冗余检验码

请写一个程序模拟处理出CRC码的过程.
**注意此处模2的除法是不进位的除法,除数和被除数做异或运算。进行异或运算时除数和被除数最高位对齐,按位异或。如图所示

输入

多组样例输入,每个样例有3行. 第一行三个整数m,n,k.(m>0&&m<=200 n>0&&n<=100 m>=n k>0&&k<=100)
m要传送的比特串的长度 , n除数P的位数(实际的校验位长为n-1) , k 每个码元有 k 个比特
第二行 一个m位的字符串 即要传送的序列
第三行 一个n位的字符串 即除数P

输出

每行输出一段码元处理后的CRC码.见样例.

样例输入
15 4 6     
101001101001101
1101
样例输出
Case: 1#
101001001
101001001
101000100
题意要注意的是:看注释
#include<stdio.h>
int main()
{int m,n,k,t=0;int a[205],p[105],MM[205],mk;char ch[205],str[105];while(scanf("%d%d%d",&m,&n,&k)>0){scanf("%s",ch);scanf("%s",str);for(int i=0; i<m||i<n; i++){if(i<m)a[i]=ch[i]-'0';if(i<n)p[i]=str[i]-'0';}printf("Case: %d#n",++t);int c=m/k,tc=1;if(m%k)c++;while(c--){mk=0;for(int i=(tc-1)*k ; i<tc*k; i++)if(i<m) MM[mk++]=a[i],printf("%d",a[i]);else  MM[mk++]=0,printf("0");for(int i=0; i<n-1; i++) MM[mk++]=0;for(int tmk=0; tmk+n<=mk; tmk++)//不管第tmk位异或变成1都往下一位开始{if(MM[tmk]==0) continue;for(int i=0,j=tmk; i<n; i++,j++)MM[j]=MM[j]^p[i];}for(int j=mk-n+1; j<mk; j++)printf("%d",MM[j]);printf("n");tc++;}}
}


本文发布于:2024-02-01 19:45:20,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170678791839018.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

下一篇:VB摸拟键盘
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23