Board logo

標題: [發問] 求救 有關nested loop [打印本頁]

作者: drgv11    時間: 2016-5-7 09:45     標題: 求救 有關nested loop

想寫一個計數的VBA
情況是這樣的
[attach]24188[/attach]
求幫忙看看
第一個loop 寫了是這樣
一開cells(1,1) 及 cells(2,1)是不知多少的
我先假設是某一數值 (下面的算式是隨便寫的 是不正確的)


Cells(3,1)=cells(1,1)*4-1
Cells(4,1)=cells(2,1)/6
do until Abs(Cells(4,1)-Cells(3,1)) <=0.0005
if Cells(4,1)-Cells(3,1) >0.0005 then cells(2,1)=cells(2,1)+0.0001
cells(3,1)=Cells(1,1)*4-1
Cells(4,1)=Cells(2,1)/6
loop
Cells(5,1)=cells(3,1)-2
Cells(6,1)=cells(4,1)/3
之後想寫 如果do until Abs(Cells(7,1)-Cells(6,1)) <=0.0005 如果不是的話 cells(1,1) 會再加0.00001
這時cells(2,1)已不一開始自己assume 的數值 它會再由0開始試 試到Abs(Cells(4,1)-Cells(3,1)) <=0.0005

應該如果寫
(抱歉 說得不是很白明
總之情況是如上圖所示)
簡易一點的話應該是  內面的loop如果滿足條件的話 會去外面的loop
直到2個loop同時滿足條件

謝謝
作者: yen956    時間: 2016-5-7 13:41

回復 1# drgv11

Sub test()
Do
[a1] = InputBox(1)   'assume [a1]
[a2] = InputBox(1)   'assume [a2]
    Do
        Cells(2, 1) = Cells(2, 1) + 0.0001      'ReAssume [a2]
        Cells(3, 1) = Cells(1, 1) * 4 - 1       'calculate [a3]
        Cells(4, 1) = Cells(2, 1) / 6           'calculate [a4]
        [a5] = Abs(Cells(4, 1) - Cells(3, 1))   '可觀察 計算過程
        '如果[a5]愈來愈大,則不可能跳出迴圈, 請按 ESC, 重設[a1],[a2]的值,
        '或 [a3],[a4]計算公式
    Loop Until [a5] <= 0.0005
    '若直接寫成 Loop Until Abs(Cells(4, 1) - Cells(3, 1)) <= 0.0005
    '則無法觀察 計算過程
Cells(5, 1) = Cells(3, 1) - 2
Cells(6, 1) = Cells(4, 1) / 3
'
[a7] = Abs(Cells(5, 1) - Cells(6, 1)) <= 0.0005 '可觀察 計算結果
'此處 Abs(Cells(7, 1) - Cells(6, 1)) <= 0.0005 應是樓主Cells(5, 1)筆誤?
Loop Until [a7] <= 0.0005
End Sub
作者: jackyq    時間: 2016-5-7 14:45

直接求解就可以了
非要用回圈嗎 ?
作者: luhpro    時間: 2016-5-7 23:36

回復 1# drgv11
手動輸入 Cells(1,1)
手動輸入 Cells(2,1)
Cells(3,1)=cells(1,1)*4-1
Cells(4,1)=cells(2,1)/6
do until Abs(Cells(4,1)-Cells(3,1)) <=0.0005
  if Cells(4,1)-Cells(3,1) >0.0005 then cells(2,1)=cells(2,1)+0.0001
  Cells(3,1)=Cells(1,1)*4-1
  Cells(4,1)=Cells(2,1)/6
loop

若 Cells(2,1) 為正數,
且 Cells(4,1)-Cells(3,1) >0.0005 則
第1個迴圈將成為無限迴圈.

證明 :
設 Cells(1,1)=A , Cells(2,1)=B 且  Cells(4,1)-Cells(3,1) >0.0005

Cells(3,1)=A*4-1
Cells(4,1)=B/6
Cells(4,1)-Cells(3,1)
=B/6-(A*4-1)
=B/6-4A+1 > 0.0005
依程式下一輪 cells(2,1)=B+0.0001
Cells(4,1)-Cells(3,1)
=(B+0.0001)/6+4A+1 > B/6-4A+1 => 只會越來越大
所以 Cells(4,1)-Cells(3,1) <= 0.0005 永遠不會成立.
得證.

註 : 我不是數學家, 證明步驟非正規, 請見諒.




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)