病毒疫苗抗体检测。使用字符串序列表示志愿者注射疫苗后细胞的DNA和疫苗抗体的DNA(志愿者的DNA序列长度大于疫苗抗体的DNA序列长度),通过检测疫苗抗体DNA序列是否在志愿者的DNA序列中出现来分析疫苗效果。其中疫苗抗体的DNA序列是环状的,志愿者的DNA序列是线性的。只要疫苗抗体的DNA序列在志愿者的DNA序列中出现,说明己产生抗体。例如:疫苗抗体的DNA序列是环状的“cced”,即可以表示为“cced”,也可以表示为“cedc”、“edcc”、“dcce”。A志愿者的DNA序列为“mtrcnmdaced”, 没有出现抗体序列,结果为“阴性”,B志愿者的DNA序列为“acedssdfaef",出现抗体序列,结果为“阳性”,C志愿者的DNA序列为“ce”,志愿者的DNA序列长度不够,无法比对,结果为“无效”。
按上述要求,编写一个VB程序,功能如下:程序运行时从数据库中读取志愿者的检测号、
DNA序列存入相应数组,在文本框Text1中输入抗体DNA序列,单击“检测结果”按钮Command11,在列表框List1中按检测号顺序显示每个志愿者的检测结果,并在标签Label1显示疫苗抗体的阳性率(以百分比表示,并保留2位小数),程序运行界面如图所示,请在划线处填入合适的代码。 Dim Pnum(1 To 100) As String 'Pnum数组存储志愿者的检测编号 Dim Pch(1 To 100) As String 'Pch数组存储志愿者的DNA序列 Dim Prs(1 To 100) As String 'Prs数组存储志愿者的检测结果 Dim n As Integer '存储志愿者的总人数 Private Sub Form_ Load( ) Dim i As Integer, j As Integer Dim tmp As String, chtmp As String Dim Conn As New ADODB.Connection Dim Rs As New ADODB.Recordset Conn.ConnectionString = "Provider=Mi crosoft. ACE.OLEDB.12. 0;Data Source=" + App.Path+"\DNADB.accdb" Conn.Open Set Rs.ActiveConnection = Conn Rs.Open "SELECT * FROM Source" '从数据库的名为 “Source”数据表中读取数据 i =0 Do While Not Rs.EOF i=i+1 Pnum(i) = Rs.Fields(0) Pch(i) = Rs.Fields(1) Rs.MoveNext Loop Rs.Close Conn.Close n= For i=1 To n-1 '以检测号作为关键字对DNA序列数据进行升序排列 j=i+1 Do While j <= n If Then chtmp = Pch(i):Pch(i)= Pch(j):Pch(j)= chtmp tmp = Pnum(i):Pnum(i)= Pnum(j):Pnum(j)= tmp End If j=j+1 Loop Next i End Sub Private Sub Command1_ Click( ) Dim Ach As String, RVch As String, Vch As String Dim i As Integer, j As Integer, k As Integer, m As Integer Ach = Text1. Text: s = Len(Ach): RVch = Ach + Ach k=0:m=0 For i=1 To n If Len(Pch(i)) <= Len (Ach) Then k =k+ 1: Prs(i) = “无效” Else For j=1 To s '按环状序列依次进行比较 Vch = If Test(Vch,Pch(i)) Then m=m+1 Prs(i) =“阳性”: Exit For Else Prs(i) =“阴性” End If Next j End If Next i For i =1To n List1. AddItem Pnum(i) +" " + Prs(i) Next i Label1. Caption = Str(Int(m/(n-k)*10000 +0.5)/100) + "%" End Sub Function Test(str1 As String,str2 As String) As Boolean '字符串比对函数 Dim i As Integer Test = False For i = 1 To Len(str2) - Len(str1) + 1 If Then Test = True: Exit For End If Next i End Function
答案:【1】i【2】Pnum(i) > Pnum(j) 或 Pnum(j) < Pnum(i)【3】Mid(RVch, j, s) 或 Mid(Ach + Ach, j, s) 或 Mid(Ach & Ach, j, s)或 Mid(Ach,j,s-j+1) + Mid(Ach,1,j-1)【4】str1 = Mid(str2, i, Len(str1))