Board logo

標題: 雙重 for loop 請教印星星 [打印本頁]

作者: adrian_9832    時間: 2021-11-24 15:23     標題: 雙重 for loop 請教印星星

請教 板友  怎用 雙重的 for 迴圈   來 做到畫面 的星星 箭嘴?
作者: luhpro    時間: 2021-11-26 00:21

本帖最後由 luhpro 於 2021-11-26 00:26 編輯
請教 板友  怎用 雙重的 for 迴圈   來 做到畫面 的星星 箭嘴?
adrian_9832 發表於 2021-11-24 15:23


其實這可以看成單純的數學計算 :
1. 從左到右共8欄 : iI = 1 to 8

2. :從上到下有星號的列號依序為: 3 to 3, 2 to 4, 1 to 5, 3 to 3, 3 to 3.....

故而 起列 為 3, 2, 1, 3, 3......
而末列為 : 3, 4, 5, 3, 3......
可以明顯區分為4以下(分別各增減1) 及 3以上(都是3) 兩個區塊算式

則可以得下式 :
起列 :(下式貼到即時運算視窗執行可知算式結果)
For iI = 1 To 8: iJ = -(4 - iI) * (iI < 4) - (iI > 3) * 3: Debug.Print iI, iJ: Next

而末列則為 :
For iI = 1 To 8: iJ = -(2 + iI) * (iI < 4) - (iI > 3) * 3: Debug.Print iI, iJ: Next

綜合上述則可得 :
  1. Sub nn()
  2.   Dim iI%, iJ%, iK%
  3.   
  4.   Range(Cells(1, 1), Cells(5, 8)).ClearContents ' 清除星號
  5.   
  6.   For iI = 1 To 8
  7.     iK = (iI > 3) * 3 ' 減號後面的算式
  8.     For iJ = -(4 - iI) * (iI < 4) - iK To -(2 + iI) * (iI < 4) - iK
  9.       Cells(iJ, iI) = "*"
  10.     Next iJ
  11.   Next iI
  12. End Sub
複製代碼
[attach]34441[/attach]
作者: 准提部林    時間: 2021-11-26 10:50

Sub TEST_A1()
Dim R%, Rx%, C%, Cx%, j%
R = 5: C = 8: Cx = Int(R / 2) + 1
For j = 1 To C
    Rx = Cx - j + 1: If Rx < 1 Then Rx = Cx
    Cells(Rx, j).Resize(R - Rx * 2 + 2) = "*"
Next j
End Sub
作者: adrian_9832    時間: 2021-12-3 08:52

謝謝兩位大大的指導!
作者: adrian_9832    時間: 2021-12-3 16:08

回復 3# 准提部林


    請問大大 如果 改成 debug.print 來看 要怎改??
作者: adrian_9832    時間: 2021-12-3 16:09

回復 2# luhpro


    (iI < 4) - iK   
請問 在FOR LOOP 中 這個是怎麼理解?
作者: adrian_9832    時間: 2021-12-3 16:42

回復 3# 准提部林


    請問有 DEBUG.PRINT 的版本嗎




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