PCDVD數位科技討論區
PCDVD數位科技討論區   註冊 常見問題 標記討論區為已讀

回到   PCDVD數位科技討論區 > 其他群組 > 七嘴八舌異言堂
帳戶
密碼
 

回應
 
主題工具
someone_love
Major Member
 

加入日期: Dec 2004
文章: 224
Unhappy 請幫我看一下這個vb程式碼哪邊錯了

執行會出現錯誤



== 第一部分.宣告 ==

'---設定Visual Basic選項---
Option Explicit

'---針對節點開一個11x11的矩陣---
Dim M(1 To 11, 1 To 11) As Double
Dim i As Integer, j As Integer
'---宣告區段到此結束.以下是執行程序---

' == 第二部分.初始假設 ==

'---假定矩陣各元素之初始值(由0開始)---
Private Sub Command1_Click()

M(1, 1) = 0: M(1, 2) = 0: M(1, 3) = 0: M(1, 4) = 0: M(1, 5) = 0: M(1, 6) = 0: M(1, 7) = 0: M(1, 8) = 0: M(1, 9) = 0: M(1, 10) = 0: M(1, 11) = 0
M(2, 1) = 0: M(2, 2) = 0: M(2, 3) = 0: M(2, 4) = 0: M(2, 5) = 0: M(2, 6) = 0: M(2, 7) = 0: M(2, 8) = 0: M(2, 9) = 0: M(2, 10) = 0: M(2, 11) = 0
M(3, 1) = 0: M(3, 2) = 0: M(3, 3) = 0: M(3, 4) = 0: M(3, 5) = 0: M(3, 6) = 0: M(3, 7) = 0: M(3, 8) = 0: M(3, 9) = 0: M(3, 10) = 0: M(3, 11) = 0
M(4, 1) = 0: M(4, 2) = 0: M(4, 3) = 0: M(4, 4) = 0: M(4, 5) = 0: M(4, 6) = 0: M(4, 7) = 0: M(4, 8) = 0: M(4, 9) = 0: M(4, 10) = 0: M(4, 11) = 0
M(5, 1) = 0: M(5, 2) = 0: M(5, 3) = 0: M(5, 4) = 0: M(5, 5) = 0: M(5, 6) = 0: M(5, 7) = 0: M(5, 8) = 0: M(5, 9) = 0: M(5, 10) = 0: M(5, 11) = 0
M(6, 1) = 0: M(6, 2) = 0: M(6, 3) = 0: M(6, 4) = 0: M(6, 5) = 0: M(6, 6) = 0: M(6, 7) = 0: M(6, 8) = 0: M(6, 9) = 0: M(6, 10) = 0: M(6, 11) = 0
M(7, 1) = 0: M(7, 2) = 0: M(7, 3) = 0: M(7, 4) = 0: M(7, 5) = 0: M(7, 6) = 0: M(7, 7) = 0: M(7, 8) = 0: M(7, 9) = 0: M(7, 10) = 0: M(7, 11) = 0
M(8, 1) = 0: M(8, 2) = 0: M(8, 3) = 0: M(8, 4) = 0: M(8, 5) = 0: M(8, 6) = 0: M(8, 7) = 0: M(8, 8) = 0: M(8, 9) = 0: M(8, 10) = 0: M(8, 11) = 0
M(9, 1) = 0: M(9, 2) = 0: M(9, 3) = 0: M(9, 4) = 0: M(9, 5) = 0: M(9, 6) = 0: M(9, 7) = 0: M(9, 8) = 0: M(9, 9) = 0: M(9, 10) = 0: M(9, 11) = 0
M(10, 1) = 0: M(10, 2) = 0: M(10, 3) = 0: M(10, 4) = 0: M(10, 5) = 0: M(10, 6) = 0: M(10, 7) = 0: M(10, 8) = 0: M(10, 9) = 0: M(10, 10) = 0: M(10, 11) = 0
M(11, 1) = 0: M(11, 2) = 0: M(11, 3) = 0: M(11, 4) = 0: M(11, 5) = 0: M(11, 6) = 0: M(11, 7) = 0: M(11, 8) = 0: M(11, 9) = 0: M(11, 10) = 0: M(11, 11) = 0

'------------------------------------------------------------------------------------------------------------------------------------------------------------

' == 第三部分.運算部分 ==

'---1.計算邊界數值---
If 1 <= i <= 11 And j = 1 Then
M(i, j) = 0 + i * (30 / 10)
End If

If 1 <= i <= 11 And j = 11 Then
M(i, j) = 50 + i * (50 / 10)
End If

If 2 <= j <= 10 And i = 1 Then
M(i, j) = 0 + j * (50 / 10)
End If

If 2 <= j <= 10 And i = 11 Then
M(i, j) = (2 * M(i - 1, j) + M(i, j - 1) + M(i, j + 1)) / 4
End If

'---2.計算內部數值(每個點之值=鄰近四點和/4)---
If 2 <= i <= 10 And 2 <= j <= 10 Then
M(i, j) = (M(i + 1, j) + M(i - 1, j) + M(i, j + 1) + M(i, j - 1)) / 4
End If

'-----------------------------------------------------------------------------------------------------------------------------------------------------------

' == 第四部分.迴圈結構 ==

'---Do Loop 由猜值推估修正到正確值---
Dim O As Double
Dim N As Double
Do
If 2 <= i <= 10 And 2 <= j <= 10 Then
M(i, j) = (M(i + 1, j) + M(i - 1, j) + M(i, j + 1) + M(i, j - 1)) / 4
M(6, 6) = O
End If

If 2 <= j <= 10 And i = 11 Then
M(i, j) = (2 * M(i - 1, j) + M(i, j - 1) + M(i, j + 1)) / 4
End If

If 2 <= i <= 10 And 2 <= j <= 10 Then
M(i, j) = (M(i + 1, j) + M(i - 1, j) + M(i, j + 1) + M(i, j - 1)) / 4
M(6, 6) = N
End If

If 2 <= j <= 10 And i = 11 Then
M(i, j) = (2 * M(i - 1, j) + M(i, j - 1) + M(i, j + 1)) / 4
End If

Loop Until (O / N) <= 10 ^ (-5) '---如果(舊值/新值)<10^(-5),則離開迴圈---

'--------------------------------------------------------------------------------------------------------------------------------------------------

' == 第五部分.結果輸出 ==

'---將此問題的結果輸出(檔案名"solution")---

Open "solution" For Output As #1
Print #1, M(i, j)

End Sub
     
      
舊 2005-01-07, 01:06 AM #1
回應時引用此文章
someone_love離線中  
Ychaung
Regular Member
 

加入日期: Sep 2001
文章: 51
代碼:
---假定矩陣各元素之初始值(由0開始)---
Private Sub Command1_Click()

M(1, 1) = 0: M(1, 2) = 0: M(1, 3) = 0: M(1, 4) = 0: M(1, 5) = 0: M(1, 6) = 0: M(1, 7) = 0: M(1, 8) = 0: M(1, 9) = 0: M(1, 10) = 0: M(1, 11) = 0
M(2, 1) = 0: M(2, 2) = 0: M(2, 3) = 0: M(2, 4) = 0: M(2, 5) = 0: M(2, 6) = 0: M(2, 7) = 0: M(2, 8) = 0: M(2, 9) = 0: M(2, 10) = 0: M(2, 11) = 0
M(3, 1) = 0: M(3, 2) = 0: M(3, 3) = 0: M(3, 4) = 0: M(3, 5) = 0: M(3, 6) = 0: M(3, 7) = 0: M(3, 8) = 0: M(3, 9) = 0: M(3, 10) = 0: M(3, 11) = 0
M(4, 1) = 0: M(4, 2) = 0: M(4, 3) = 0: M(4, 4) = 0: M(4, 5) = 0: M(4, 6) = 0: M(4, 7) = 0: M(4, 8) = 0: M(4, 9) = 0: M(4, 10) = 0: M(4, 11) = 0
M(5, 1) = 0: M(5, 2) = 0: M(5, 3) = 0: M(5, 4) = 0: M(5, 5) = 0: M(5, 6) = 0: M(5, 7) = 0: M(5, 8) = 0: M(5, 9) = 0: M(5, 10) = 0: M(5, 11) = 0
M(6, 1) = 0: M(6, 2) = 0: M(6, 3) = 0: M(6, 4) = 0: M(6, 5) = 0: M(6, 6) = 0: M(6, 7) = 0: M(6, 8) = 0: M(6, 9) = 0: M(6, 10) = 0: M(6, 11) = 0
M(7, 1) = 0: M(7, 2) = 0: M(7, 3) = 0: M(7, 4) = 0: M(7, 5) = 0: M(7, 6) = 0: M(7, 7) = 0: M(7, 8) = 0: M(7, 9) = 0: M(7, 10) = 0: M(7, 11) = 0
M(8, 1) = 0: M(8, 2) = 0: M(8, 3) = 0: M(8, 4) = 0: M(8, 5) = 0: M(8, 6) = 0: M(8, 7) = 0: M(8, 8) = 0: M(8, 9) = 0: M(8, 10) = 0: M(8, 11) = 0
M(9, 1) = 0: M(9, 2) = 0: M(9, 3) = 0: M(9, 4) = 0: M(9, 5) = 0: M(9, 6) = 0: M(9, 7) = 0: M(9, 8) = 0: M(9, 9) = 0: M(9, 10) = 0: M(9, 11) = 0
M(10, 1) = 0: M(10, 2) = 0: M(10, 3) = 0: M(10, 4) = 0: M(10, 5) = 0: M(10, 6) = 0: M(10, 7) = 0: M(10, 8) = 0: M(10, 9) = 0: M(10, 10) = 0: M(10, 11) = 0
M(11, 1) = 0: M(11, 2) = 0: M(11, 3) = 0: M(11, 4) = 0: M(11, 5) = 0: M(11, 6) = 0: M(11, 7) = 0: M(11, 8) = 0: M(11, 9) = 0: M(11, 10) = 0: M(11, 11) = 0

'------------------------------------------------------------------------------------------------------------------------------------------------------------

這一段改成
代碼:
For i = 1 To 11
    For j = 1 To 11
    M(i, j) = 0
Next j, i

會比較方便

第三部份之後
如果是照原先的方式--->i=0,j=0
這樣會產生錯誤.

在第四部份
給N一個初值吧.不然也會出現錯誤.


應該是這樣.
 
舊 2005-01-07, 02:16 AM #2
回應時引用此文章
Ychaung離線中  
someone_love
Major Member
 

加入日期: Dec 2004
文章: 224
請問 還要如何修改

因為還是會出現錯誤

錯誤訊息是

執行階段錯誤 '9'

陣列索引超出範圍

偵錯後說

M(i, j) = (M(i + 1, j) + M(i - 1, j) + M(i, j + 1) + M(i, j - 1)) / 4

有問題



thx
舊 2005-01-07, 02:46 AM #3
回應時引用此文章
someone_love離線中  
someone_love
Major Member
 

加入日期: Dec 2004
文章: 224
此外,第四部分的地方
If 2 <= i <= 10 And 2 <= j <= 10 Then
M(i, j) = (M(i + 1, j) + M(i - 1, j) + M(i, j + 1) + M(i, j - 1)) / 4
M(6, 6) = O
End If
------
If 2 <= j <= 10 And i = 11 Then
M(i, j) = (2 * M(i - 1, j) + M(i, j - 1) + M(i, j + 1)) / 4
End If
------
If 2 <= i <= 10 And 2 <= j <= 10 Then
M(i, j) = (M(i + 1, j) + M(i - 1, j) + M(i, j + 1) + M(i, j - 1)) / 4
M(6, 6) =N
End If
------
If 2 <= j <= 10 And i = 11 Then
M(i, j) = (2 * M(i - 1, j) + M(i, j - 1) + M(i, j + 1)) / 4
End If

我的意思是我原先給定的初始假設值由零開始(第二部分的地方),而在第四部分作迴圈的時候,因為本題外部的右邊界值會影響到內部數值,因此我規劃的流程是:
1.算一次內部值
2.算一次右邊界值
3.再算一次內部值
4.再算一次右邊界值
而為了定出跳出迴圈的條件,我設定了"如果(舊值/新值)<10^(-5),則離開迴圈"的條件.其中我任選擇矩陣中的某一數值作為判斷數值,因此,程式裡面寫到的M(6, 6) = O與M(6, 6) = N,是分別代表內部值的新值(N)與舊值(O)...因為看您的回答,感覺似乎認為M(6, 6) = O是指數值等於零.所以提出這個回應!
不過因為我是第一次撰寫VB,所以有很多地方仍然不太了解,如果我說的部分有需要修正的,還麻煩您幫忙修正.非常謝謝幫忙!

此文章於 2005-01-07 03:35 AM 被 someone_love 編輯.
舊 2005-01-07, 03:27 AM #4
回應時引用此文章
someone_love離線中  
someone_love
Major Member
 

加入日期: Dec 2004
文章: 224
有人知道嗎
舊 2005-01-07, 09:15 AM #5
回應時引用此文章
someone_love離線中  


回應


POPIN
主題工具

發表文章規則
不可以發起新主題
不可以回應主題
不可以上傳附加檔案
不可以編輯您的文章

vB 代碼打開
[IMG]代碼打開
HTML代碼關閉



所有的時間均為GMT +8。 現在的時間是09:57 PM.


vBulletin Version 3.0.1
powered_by_vbulletin 2025。