不是VIP会员,不能显示答案

题目解答

题目:
(格雷码 Gray Code) Gray Code是一种二进制编码,编码顺序与相应的十进制数的大小不一致。其特点是,对于两个相邻的十进制数,对应的两个格雷码只有一个二进制位不同。另外,最大数与最小数间也仅有一个二进制位不同,以4位二进制数为例,编码如下:
十进制数 格雷码 十进制数 格雷码
0 0000 8 1100
1 0001 9 1101
2 0011 10 1111
3 0010 11 1110
4 0110 12 1010
5 0111 13 1011
6 0101 14 1001
7 0100 15 1000
如果把每个二进制的位看做一个开关,则将一个数变为相邻的另一个数,只须改动一个开关。因此,格雷码广泛用于信号处理、数-模转换等领域。
下面程序的任务是:由键盘输入二进制的位数n(n<16),再输入一个十进制数m(0≤m<2n),然后输出对应于m的格雷码(共n位,用数组gr[ ]存放)
program s501; 
var bound,m,n,i,j,b,p:integer; 
gr:array[0..14]of integer; 
begin 
bound:=1; 
writeln('input n,m'); 
readln(n,m); 
for i:=1 to n do bound:= bound*2 ; 
if (m<0)or(m>=bound) then 
begin 
writeln('Data error!'); 
 exit ; 
end; 
b:=1; 
for i:=1 to n do 
begin 
p:=0; b:=b*2; 
for  j:=0  to m do 
if (  (j mod b-(b div 2))=0  ) then 
p:=1-p; 
gr:=p; 
end; 
for i:=n   downto 1  do 
write(gr); 
writeln; 
end.
考点:
分析:
解答:
评论:
老师: