题目

某编码由4个信息位和3个校验位组成,通过对编码信息进行验算,能够检测并纠正一位错误代码。该7位编码中b1~b4为信息位,p1~p3为校验位,位置如下: 编码中位 1 2 3 4 5 6 7 对位信息 p1 p2 b1 p3 b2 b3 b4 校验的方式如下,求校验值g1、g2、g3: g1 = p1 Xor b1 Xor b2 Xor b4 g2 = p2 Xor b1 Xor b3 Xor b4 g3 = p3 Xor b2 Xor b3 Xor b4 其中Xor 为异或运算,规则是:0 Xor 0 =0,0 Xor 1 =1,1 Xor 0 =1,1 Xor 1 =0, p1 Xor b1 是将p1、b1 转换为二进制后按位进行异或运算,如7 Xor 12 的结果为11。 ⑴若计算得到的校验值g1、g2、g3均为0,说明校验正确,数据无错误。例如:若7位编码为1101001,计算校验值g1、g2、g3值均为0,验证正确。 ⑵若校验值g1、g2、g3不全为0,说明数据有错,出错位置为g3g2g1(二进制数表示),纠错的方法是对错误的位进行取反,即“0”变“1”,“1”变“0”。例如:若7位编码为1111001,计算校验值g1=1、g2=1、g3=0,不全为0,说明数据有错,错误位置在011(二进制数)位,即第3位,原位置上“1”应为“0”,正确编码为1101001。 小明为此编写了VB程序,程序运行时,在文本框Text1中输入编码值,单击“校验” 按钮Command1后,在文本框Text2中输出运行结果,如图所示。 实现上述功能的VB程序如下,请回答下列问题: (1) 若按上述规则的7位编码为1001000,其中一位有错,则正确的编码应为。 (2) 请在划线处填入合适的代码。 Function check(s As String) As Integer Dim i As Integer g1 As Integer, g2 As Integer, g3 As Integer Dim c(1 To 7) As Integer For i = 1 To 7 c(i) = Val(Mid(s, i, 1)) Next i g1 = c(1) Xor c(3) Xor c(5) Xor c(7) g2 = c(2) Xor c(3) Xor c(6) Xor c(7) g3 = c(4) Xor c(5) Xor c(6) Xor c(7) If g1 + g2 + g3 = 0 Then check = 0 Else check = End Function Private Sub Command1_Click() Dim i As Integer, m As Integer, Outs As String m = If m = 0 Then Text2.Text = "验证正确,数据无错误" Else For i = 1 To 7 If i = m Then Outs = Outs + Chr( Asc(Mid(Text1.Text, i, 1)) Xor ) Else Outs = Outs + Mid(Text1.Text, i, 1) End If Next i Text2.Text = "第" + Str(m) + "位上数据有错误,正确编码应为:" + Outs End If End Sub 答案: 【1】1001100 【1】g3 * 4 + g2 * 2 + g1【2】check(Text1.Text)【3】1
信息技术 试题推荐
最近更新