Dim arrStim(140), Typecount(3),arrtmp(28) As Integer Dim i, k, flag As Integer Dim bools As Boolean For i = 1 To UBound(arrtmp) If i<21 Then k=1 arrtmp(i)=k Else If i<25 Then k=2 arrtmp(i)=k Else k=3 arrtmp(i)=k End If End If Next For i=1 To 5 Do bools=True RandomizeArray arrtmp,1,UBound(arrtmp) If i<>1 And i<>5 Then If arrtmp(1)=2 Or arrtmp(1)=3 Then If arrtmp(1)=flag Then bools=False Else For k=1 To 27 If arrtmp(k)=2 Or arrtmp(k)=3 Then If arrtmp(k)=arrtmp(k+1) Then bools=False Exit For End If End If Next End If Else For k=1 To 27 If arrtmp(k)=2 Or arrtmp(k)=3 Then If arrtmp(k)=arrtmp(k+1) Then bools=False Exit For End If End If Next End If ElseIf i=1 Then If arrtmp(1)=2 Or arrtmp(1)=3 Or arrtmp(2)=2 Or arrtmp(2)=3 Then bools=False Else For k=1 To 27 If arrtmp(k)=2 Or arrtmp(k)=3 Then If arrtmp(k)=arrtmp(k+1) Then bools=False Exit For End If End If Next End If ElseIf i=5 Then If arrtmp(27)=2 Or arrtmp(27)=3 Or arrtmp(28)=2 Or arrtmp(28)=3 Then bools=False ElseIf arrtmp(1)=2 Or arrtmp(1)=3 Then If arrtmp(1)=flag Then bools=False Else For k=1 To 27 If arrtmp(k)=2 Or arrtmp(k)=3 Then If arrtmp(k)=arrtmp(k+1) Then bools=False Exit For End If End If Next End If Else For k=1 To 27 If arrtmp(k)=2 Or arrtmp(k)=3 Then If arrtmp(k)=arrtmp(k+1) Then bools=False Exit For End If End If Next End If End If Loop Until bools=True For k=1 To 28 arrStim((i-1)*28+k)=arrtmp(k) Next flag=arrtmp(28) Next For i=1 To UBound(arrStim) TrialList.SetNested CStr(i), "list" & arrStim(i) Next TrialList.Reset 要求:有三种实验材料,A材料100个、BC材料各20个。BC不能呈现在首尾的前后两个刺激上。BC同种材料不能重复呈现,BC可以挨着呈现。对A材料不反应,反应位错;对B材料按“f”键进行反应,C材料按“j”键进行反应。实验过程为:注视点800毫秒→刺激界面(无限时间) →反馈界面。设计要求: 1)请用“化整为零+随机打乱判断”法进行设计。 对以上编码进行分析后改成一个新的编码,请以标准的格式写出编码
时间: 2023-12-12 15:04:55 浏览: 71
Dim arrStim(139), TypeCount(3) As Integer
Dim i, k, flag As Integer
Dim bools As Boolean
' 初始化刺激列表
For i = 0 To 99
arrStim(i) = 1 ' A材料
Next
For i = 100 To 119
arrStim(i) = 2 ' B材料
Next
For i = 120 To 139
arrStim(i) = 3 ' C材料
Next
' 随机打乱刺激列表,保证BC不在首尾的前后两个刺激上,BC同种材料不能重复呈现
Do
RandomizeArray arrStim
Loop Until CheckBC(arrStim)
' 将刺激列表分为5个Block,每个Block包含28个刺激
For i = 0 To 4
flag = 0
bools = False
' 确保BC不在首尾的前后两个刺激上,BC同种材料不能重复呈现
Do
RandomizeArray arrStim, i * 28, (i + 1) * 28 - 1
bools = CheckBC(arrStim, i * 28, (i + 1) * 28 - 1, flag)
Loop Until bools
' 记录本次BC的最后一个材料
flag = arrStim((i + 1) * 28 - 1)
Next
' 根据刺激列表生成实验设计
For i = 0 To UBound(arrStim)
If arrStim(i) = 1 Then
TrialList.SetNested CStr(i + 1), "A"
ElseIf arrStim(i) = 2 Then
TrialList.SetNested CStr(i + 1), "B"
ElseIf arrStim(i) = 3 Then
TrialList.SetNested CStr(i + 1), "C"
End If
Next
TrialList.Reset
' 检查BC是否在首尾的前后两个刺激上,BC同种材料是否重复呈现
Function CheckBC(arrStim, startIdx, endIdx, lastBC)
Dim i As Integer
If startIdx = 0 Then ' 第一个Block,检查BC是否在首两个刺激上
If arrStim(0) = 2 Or arrStim(0) = 3 Or arrStim(1) = 2 Or arrStim(1) = 3 Then
CheckBC = False
Exit Function
End If
End If
If endIdx = UBound(arrStim) Then ' 最后一个Block,检查BC是否在尾两个刺激上
If arrStim(endIdx - 1) = 2 Or arrStim(endIdx - 1) = 3 Or arrStim(endIdx) = 2 Or arrStim(endIdx) = 3 Then
CheckBC = False
Exit Function
End If
End If
' 检查BC同种材料是否重复呈现
For i = startIdx To endIdx - 1
If arrStim(i) = 2 Or arrStim(i) = 3 Then
If arrStim(i) = arrStim(i + 1) Then
CheckBC = False
Exit Function
End If
End If
Next
' 检查BC是否在前后两个刺激上
If arrStim(startIdx) = 2 Or arrStim(startIdx) = 3 Then
If arrStim(startIdx) = lastBC Then
CheckBC = False
Exit Function
End If
End If
CheckBC = True
End Function
阅读全文