返回列表 上一主題 發帖

雙重 for loop 請教印星星

雙重 for loop 請教印星星

請教 板友  怎用 雙重的 for 迴圈   來 做到畫面 的星星 箭嘴?
star.PNG

star.rar (5.62 KB)

本帖最後由 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
複製代碼
雙重forloop請教印星星star-a.zip (13.39 KB)

TOP

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

TOP

謝謝兩位大大的指導!

TOP

回復 3# 准提部林


    請問大大 如果 改成 debug.print 來看 要怎改??

TOP

回復 2# luhpro


    (iI < 4) - iK   
請問 在FOR LOOP 中 這個是怎麼理解?

TOP

回復 3# 准提部林


    請問有 DEBUG.PRINT 的版本嗎

TOP

        靜思自在 : 有願放在心裡,沒有身體力行,正如耕田不播種,皆是空過因緣。
返回列表 上一主題