题型:综合题 题类:常考题 难易度:困难
浙江省嘉兴市2018-2019学年高二下学期信息技术期末考试试卷二
N阶幻方的构造方法有很多种,下面是“右上方填数法”的算法:
⑴将1放在第一行中间一列;
⑵2~n2依次填在上一个数的右上方位置(即行减1列加1):
若上一个数的行数为1时,则当前数的行数为n;
若上一个数的列数为n时,则当前数的列数为1。
⑶如果按上面规则确定的位置上已有数,则把当前数放在上一个数的下面。
例如当n为3时,如图a所示,1在第1行第2列,则2的位置为第3行第3列;
再如3在第2行第1列,则4的位置应为第1行第2列,但该位置已有数,因此4就放在3所在位置的正下面。
“左上方填数法”的方法类似于“右上方填数法”,以3阶幻方为例,“右上方填数法”和“左上方填数法”所构造的幻方如下图a、图b所示。
|
|
图a 右上方填数法 | 图b 左上方填数法 |
小明采用“左上方填数法”的方法设计了如下程序。
Private Sub Command1_Click()
Dim a(1 To 100) As Integer
Dimx As Integer,y As Integer,x1 As Integer,y1 As Integer
Dim n As Integer, s As Integer,pos As Integer, st As String
n = Val(Text1.Text)
For i = 1 To n * n
a(i) = 0
Next i
s = 1
x = 1
y = (n + 1) \ 2
a(y) = s
Do While ①
s = s + 1
x1 = x: y1 = y
x = x - 1
y = y - 1
If x < 1 Then x = n
If y < 1 Then y = n
If a((x - 1) * n + y) > 0 Then ② : y = y1
③
a(pos) = s
Loop
st = ""
For i = 1 To n * n
st = st + wid(a(i))
If i Mod n = 0 Then
List1.AddItem st
st = ""
End If
Next i
End Sub
'自定义函数wid的功能是使数字在方阵对齐
Function wid(p As Integer) As String
'代码省略
End Function
请回答下列问题:
① ② ③
编码中位 |
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程序如下,请回答下列问题:
试题篮