Ausgabe aller möglichen Zahlenkombinationen (Kofferschloss)
#11
Ich lösche dennoch …
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#12
Kleine Spielerei: Variable Anzahl Rädchen, jedes Rädchen mit individuellen Einstellmöglichkeiten:
Code:
Option Explicit

Sub Kombinationen()
Dim Rädchen As Variant
'Vorgabe: Anzahl "Rädchen", jeweils von 0 bis Obergrenze
'z. B. Rad 1 von 0 bis 7, Rad 2 von 0 bis 13, Rad 3 von 0 bis  9
Rädchen = Array(7, 13, 9)


Range("A:A").ClearContents
Range("A1").Value = "Kombinationen"
ReDim erg(0 To UBound(Rädchen))
Call RecLoop(Rädchen, erg)
End Sub

Sub RecLoop(ByVal Rädchen, ByRef erg As Variant)
Dim i As Long, f As Variant: f = Rädchen

If UBound(Rädchen) > 0 Then ReDim Preserve f(0 To UBound(f) - 1) Else f = 0
  
For i = 0 To Rädchen(UBound(Rädchen))
   erg(UBound(Rädchen)) = i
   If IsArray(f) Then Call RecLoop(f, erg)
   If UBound(Rädchen) = 0 Then Cells(Rows.Count, 1).End(xlUp).Offset(1).Value = "'" & Join(erg, "-")
Next i
End Sub
Rädchen = Array(7, 13, 9) gibt die Anzahl Rädchen und die Einstellungen vor (jeweils 0 bis zur angegebenen Zahl). Bei mehr oder weniger Rädchen einfach Zahlen ergänzen oder löschen.
[-] Folgende(r) 1 Nutzer sagt Danke an Gast für diesen Beitrag:
  • RPP63
Antworten Top
#13
Sehr schön!
Ernst gemeinte Frage:
Ist das eine "echte" Rekursion?
Ich stehe damit ein wenig auf Kriegsfuß.
(was man heute sicherlich gar nicht schreiben darf, ähnlich dem irgendwann als "unschicklich" geächtetem "Monitor im Kreuzfeuer" [Du erinnerst Dich, wurde als Kreuzverhör umbenannt?])
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#14
(23.11.2023, 19:20)RPP63 schrieb: Ist das eine "echte" Rekursion?
Ja, die Sub ruft sich selbst (mit jeweils geänderten Argumenten) auf. Nimm mal eine kleine Menge Kombinationen und spiel das mal im Einzelschritt durch. Behalte vor allem f, i und erg im Auge.

Das geht bestimmt auch eleganter, war ein Schnellschuss.
Antworten Top
#15
Vielen Dank EarlFred !

So hatte ich es mir vorgestellt.


Code:
'Vorgabe: Anzahl "Rädchen", jeweils von 0 bis Obergrenze

'z. B. Rad 1 von 0 bis 7, Rad 2 von 0 bis 13, Rad 3 von 0 bis  9

Rädchen = Array(7, 13, 9)


Kann man den Code auch so gestalten, dass ich angeben kann, wo meine Zahlen für die jeweiligen Rädchen beginnen?

Areray(7, 13, 9) begann ja bei 0-7, 0-13 & 0-9). Kann man für das 1. Rädchen auch bei 1 beginnen (1-5) und das 2. Rädchen (3-6) und eine Eingabe für das 3. Rädchen z.B. von 4-8 machen? Also nicht, dass immer bei der Zahl 0 begonnen wird?

Vielen Dank
Antworten Top
#16
Ich mag Menschen, die sich mit Lösungen beschäftigen, sie zuerst mal zu verstehen versuchen und dann selbst anpassen können. 

Wo müsste man das denn anpassen? Welche Varianten fallen dir ein?
Antworten Top
#17
Smile 
Dank Dir!

Habs mir nochmal genauer angeschaut. i=1 Blush

Schönen Abend noch!
Antworten Top
#18
Durch i=1 beginnen ja alle 3 Zahlen bei ist bis zur entsprechenden Array-Zahl. Kann ich aber auch 3 veschiedene Beginnzahlen angeben?
Antworten Top
#19
(23.11.2023, 22:47)Redgeier schrieb: Durch i=1 beginnen ja alle 3 Zahlen bei ist bis zur entsprechenden Array-Zahl. Kann ich aber auch 3 veschiedene Beginnzahlen angeben?
Du hast doch jetzt alles gelernt, was du zur Umsetzung brauchst, so dass die Frage „ob“ unzulässig ist. Selbstverständlich ist es möglich und du kannst es auch.

- du weißt, wie man die Obergrenze der Werte definiert.
- du kannst analog also auch die Untergrenze definieren.
- du weißt, wo die Untergrenze verwendet wird.

Alles da an Wissen. Einfach anwenden, das ist kein Hexenwerk.
Antworten Top
#20
Ich würde verwenden:
1:  0-7
2:  0-13
3:  0-9


Code:
Sub M_snb()
   msgbox = 8 * 14 * 10
 
  Cells(1).Resize(1120) = [index(int((row(1:1120)-1)/(14*10)) & "_" & mod(int((row(1:1120)-1)/10),14) & "_" & mod(row(1:1120)-1,10),)]
End Sub
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste