वर्तमान में मैं मैन्युअल रूप से मानों को सरणी में दर्ज कर रहा हूं, साइन_एरे (ए, बी, सी)। जहाँ c स्तर संख्या है। तो नीचे मेरा आउटपुट देखें, जहां सी = 1 सरणी में केवल दो इनपुट हैं। जब c = 2 (या स्तर 2) में 4 इनपुट होते हैं। स्तर ३ = ८ इनपुट, स्तर ४ में १६ इनपुट हैं। लेकिन यह सब लिखना बहुत थकाऊ हो रहा है।

मैं वास्तव में इससे जूझ रहा हूं। मुझे 1 या 2 के सभी संयोजनों को एक सरणी में लिखना होगा, और इसके आउटपुट की तलाश करनी होगी:

1    
2
1, 1    
1, 2    
2, 1
2, 2  
1, 1, 1  
2, 1, 1    
1, 2, 1    
1, 1, 2    
2, 2, 1    
2, 1, 2    
1, 2, 2    
2, 2, 2    
1, 1, 1, 1    
2, 1, 1, 1
etc

कृपया नीचे देखें कि मुझे कितनी दूर मिला है, लेकिन मुझे नहीं पता कि 1 या 2 के बीच अंतर करने के लिए क्या करना चाहिए। किसी भी मदद की बहुत सराहना की जाएगी। फिलहाल मैं मैन्युअल रूप से संयोजनों में खुद को डाल रहा हूं, लेकिन मेरे पास जितने अधिक आयाम हैं, मैं उतना ही बड़ा हो रहा हूं।

मुझे कोई फर्क नहीं पड़ता कि प्रत्येक स्तर के निर्माण के लिए लूप है।

levels_to_use = 4
for i = 1 to levels_to_use  ^ 2
    for j = 1 to levels_to_use 
        ' in here how to chose between 1 or 2
        sign_array(i, j, levels_to_use) = 1
    next
next
1
Surreall 13 फरवरी 2019, 14:24

1 उत्तर

सबसे बढ़िया उत्तर

कुछ समय पहले, मेरे पास करने के लिए कुछ भी बेहतर नहीं था और मैंने ठीक वही कोड लिखा था जिसकी आपको तलाश है - https://www.vitoshacademy.com/vba-nested-loops-with-recursion/

इस प्रकार, यदि आप इसे थोड़ा बदलते हैं, _ से बचते हैं और size चर को लूप में डालते हैं, तो यह वांछित परिणाम प्रिंट करता है:

enter image description here

यदि आप c = Array(1, 2) को c = Array(1, 2, 3) में बदलते हैं तो यह सिस्टम में एक तीसरा तत्व जोड़ देगा।

Sub Main()

    Static size         As Long
    Static c            As Variant
    Static arr          As Variant
    Static n            As Long

    c = Array(1, 2)
    n = UBound(c) + 1
    For size = 1 To 4
        ReDim arr(size - 1)
        EmbeddedLoops 0, size, c, n, arr
        Debug.Print "---------"
    Next size

End Sub

Function EmbeddedLoops(index, k, c, n, arr)

    Dim i                   As Variant
    If index >= k Then
        PrintArrayInOneLine arr
    Else
        For Each i In c
            arr(index) = i
            EmbeddedLoops index + 1, k, c, n, arr
        Next i
    End If

End Function

Public Sub PrintArrayInOneLine(myArray As Variant)

    Dim counter     As Long
    Dim sArray      As String
    For counter = LBound(myArray) To UBound(myArray)
        sArray = sArray & myArray(counter)
    Next counter
    Debug.Print sArray

End Sub
1
Vityata 13 फरवरी 2019, 12:34