关于一道VB题目。。。谁帮我看看程序出错在哪了,追加50分

来源:百度知道 编辑:UC知道 时间:2024/06/15 19:38:54
Option Base 1

Private Sub Command1_Click()

Dim t(7, 9) As Variant: Dim i As Integer: Dim j As Integer: Dim tt(7, 9) As Variant
m = 6: n = 8: eps = 0.01: k = 100: ti = 20: ttb = 50: tbb = 50: trb = 50: tlb = 200
For i = 1 To 6
For j = 1 To 8
t(i, 1) = tbb: t(i, n + 1) = ttb: t(1, j) = tlb: t(m + 1, j) = trb: t(i, j) = ti
Next j
Next i
it = 0
Do
tt(i, j) = t(i, j)
t(i, j) = 0.25 * (t(i - 1, j) + t(i + 1, j) + t(i, j + 1) + t(i, j - 1))
Loop
If Abs(tt(i, j) - t(i, j)) <= eps Then
Print it
Else: it = it + 1
If it > k Then
Print "不收敛"
Else: tt(i, j) = t(i, j)
t(i, j) = 0.25 * (t(i - 1, j) + t(i + 1, j) + t(i, j + 1) + t(i, j - 1))
End If
End If

End Sub

首先,不知道你的程序的功能,所以只是帮你找出代码中的错误.

1.在最开始的2层for结束后,i和j的值分别为7和9
然后你在do.loop中使用了:
t(i, j) = 0.25 * (t(i - 1, j) + t(i + 1, j) + t(i, j + 1) + t(i, j - 1))
其中的t(i + 1, j)和t(i, j + 1),会使用到:t(8,9)和t(7,10),这2个数组元素,所以会下标越界

2.你的do.loop没有结束条件,程序在此会陷入死循环

3.最后面的if else语句:
Else: it = it + 1
If it > k Then
Print "不收敛"
其中it在前面并没有其它运算,只有一个赋值语句就是让它=0,所以这条语句永远不会满足它大于k,因为k你在最初置的值是100,所以这条语句是多余的,或是错误的.