题型:综合题 题类:常考题 难易度:困难
【bj】高中信息技术综合库——枚举算法及程序实现1
⑴找出等式中单个数字的最大值;
⑵从最大值加1的数制开始,按该数制的运算规则,把等式中所有数字转换成十进制数;
⑶如果等式两边的结论是成立的,那么该数制就是符合上述等式的最小数制,否则从下一个数制重新计算,直到十六进制为止。
小明为此编写了一个VB程序,程序运行时,在文本框Text1中输入一个等式,单击“计算”按钮Command1,在文本框Text2中显示该等式中数字所属的数制。程序运行界面如下图所示。
Private Sub Command1_Click()
Dim s1 As String, ysf As String,t1 As String,t2 As String,t3 As String
Dim ch As String,t As String, max As Integer, jz As Integer, i As Integer
s1=Text1. Text
t1=0: max=0
For i=1 To Len(s1)
ch= Mid(s1,i,1)
If ch="+" Or ch="-" Or ch="*" Or ch="\" Then
ysf=ch: t1=t: t=" "
ElseIf ch="=" Then
t2=t: t=" "
ElseIf ch>="A" And ch <="F" Then
t=t+ch
temp=
If max<temp Then max=temp
Else
t=t+ch
If max<Val(ch)Then max=Val(ch)
End If
Next i
t3=t: jz=0
Do While i<= 16
If ysf="+" Then
If XtoD(i, t1)+XtoD(i, t2)=XtoD(i, t3) Then jz=i: Exit Do
ElseIf ysf="-" Then
If XtoD(i, t1)-XtoD(i, t2)=XtoD(i, t3) Then jz=i: Exit Do
ElseIf ysf="*" Then
If XtoD(i, t1)* XtoD(i, t2)=XtoD(i, t3) Then jz=i: Exit Do
Else
If XtoD(i, t1)/XtoD(i, t2)=XtoD(i, t3) Then jz=i: Exit Do
End If
i=i+1
Loop
If jz < >0 Then
Text2.Text="该数属于"+Str(jz)+"进制"
Else
Text2.Text="没有找到合适的进制"
End If
End sub
Function XtoD(x As Integer,s As String) As Integer
Dim j As Integer
j=0
For i=Len(s)To 1 Step-1
XtoD=XtoD+Val(Mid(s, i, 1))*x
Next i
End Function
①把身份证前 17 位的每个数字和加权系数相乘并累加求和。身份证号码前17位数的加权系数见下表:
身份证号位数 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
加权系数 | 7 | 9 | 10 | 5 | 8 | 4 | 2 | 1 | 6 | 3 | 7 | 9 | 10 | 5 | 8 | 4 | 2 |
②根据步骤①求得的和值,与11做取余运算得到序号,再根据序号提取校验码字符。如:所得和值除以11的余数为“0”,则对应的校验码为“1”。如下表:
序号 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
校验码 | 1 | 0 | X | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 |
若步骤②中提取的校验码和身份证号最后一位相同,则校验通过,否则校验失败。
某人根据上述原理设计了一个身份证校验VB程序,功能如下:程序启动时从数据库student.accdb中读入全校学生身份证数据(全校共15个班级),并在列表框List1中显示,单击“校验”按钮Command1,在列表框List2中输出各班身份证号出错学生的信息和出错人数,若某班无出错学生,则不显示。程序界面如图所示。实现上述功能的VB程序如下,请回答下列问题:
试题篮